AWS KMS 에서 제공하는
봉투암호화 방식의 암호화 및
사이닝 기능에 대한 소개와 데모
신 은 수 | Security Specialist Solutions Architect
강연 중 질문하는 방법 AWS Builders
Go to Webinar “Questions” 창에 자신이 질문한
내역이 표시됩니다. 기본적으로 모든 질문은
공개로 답변 됩니다만 본인만 답변을 받고 싶으면
(비공개)라고 하고 질문해 주시면 됩니다.
본 컨텐츠는 고객의 편의를 위해 AWS 서비스 설명을 위해 온라인 세미나용으로 별도로 제작, 제공된 것입니다. 만약 AWS
사이트와 컨텐츠 상에서 차이나 불일치가 있을 경우, AWS 사이트(aws.amazon.com)가 우선합니다. 또한 AWS 사이트
상에서 한글 번역문과 영어 원문에 차이나 불일치가 있을 경우(번역의 지체로 인한 경우 등 포함), 영어 원문이 우선합니다.
AWS는 본 컨텐츠에 포함되거나 컨텐츠를 통하여 고객에게 제공된 일체의 정보, 콘텐츠, 자료, 제품(소프트웨어 포함) 또는 서비스를 이용함으로 인하여 발생하는 여하한 종류의 손해에
대하여 어떠한 책임도 지지 아니하며, 이는 직접 손해, 간접 손해, 부수적 손해, 징벌적 손해 및 결과적 손해를 포함하되 이에 한정되지 아니합니다.
고지 사항(Disclaimer)
주요 주제
- AWS 에서의 암호화
- CMK(Customer Master Key)
- 봉투암호화
- Encryption Context
- Policy 및 Grant
© 2018, Amazon Web Services, Inc. or Its Affiliates. All rights reserved.
일반적인 요건:
• 규제 준수를 위해
• 보안 모범사례를 따르기 위해
• 클라우드 사업자에게서 내 데이터를 보호하기 위해
• 클라우드 사업자의 다른 고객으로 부터 내 데이터를 보호하기 위해
IT 보안 인력
키 접근 정책
관리
소프트웨어 개발자 규제 준수팀
구성 및 이력 정보
를 검증
데이터 보호를 위해
암호키 사용
클라우드에서의 암호화
물리 계층
MACsec 기반 AES-256 암호화(IEEE)
VPC 암호화 | 교차 리전 연결 암호화 | AWS VPN
보안 시설 및 AES-256 기반 광학적 암호화
Amazon s2n. | NLB – TLS | ALB | CloudFront | ACM 통합
AWS Encryption SDK | KMS 를 활용한 암호화
데이터 링크 계층
네트워크 계층
전송 계층
애플리케이션 계층
AWS 암호화 스택
© 2018, Amazon Web Services, Inc. or Its Affiliates. All rights reserved.
클라이언트 측 암호화(Client-Side Encryption)
• 데이터를 전송하기 전에 암호화 수행
• 고객이 직접 암호화 키를 마련하고 직접 관리하거나, AWS KMS/CloudHSM내에 보
관 관리
• 도구들: AWS Encryption SDK, S3 Encryption Client, EMRFS Client, DynamoDB
Encryption Client
서버 측 암호화(Server-Side Encryption)
• AWS가 전송된 데이터에 대해 고객 대신 서버 측에서 암호화 작업 수행
• 총 58 개 서비스 연동 : Amazon S3, Amazon EBS, Amazon RDS, Amazon Redshift,
Amazon WorkSpaces, Amazon Kinesis Streams, AWS CloudTrail…
• 고객 관리 통제 하에 AWS KMS에 암호화키(CMK) 보관
AWS 에 데이터 저장 시 암호화 적용
https://aws.amazon.com/kms/features/#AWS_Service_Integration
KMS(Key Management Service)
AWS IAM
AWS KMS
S3
Secrets
Manager
Athena
DynamoDBRDS CloudTrail
EBS
S3
AWS Cloud
사용자
접근 제어
저장소
감사 로그
AWS KMS의 주요 개념
AWS KMS의 주요 개념
AWS KMS 키의 계층 구조
데이터키
암호화된
데이터키
암호화된 CMK
평문
CMK
도메인 키
KMS 서비스 구성
저장
HSM
암호화
데이터키
발급
고가용성이
보장된
스토리지
Client
데이터키
AWS KMS 키의 계층 구조(요약)
1. CMK(KMS 내부의 HSM 에서 생성)은 절대 평문 형태로 HSM 을 벗어나지 않는다.
2. CMK 는 HSM 에 저장된 도메인 키로 암호화되며 암호화된 상태로 KMS 내부의 별
도 저장공간(KMS Host)에 저장된다.
3. 데이터키는 KMS 내부의 HSM 에서 생성된다.
4. 생성된 데이터키는 CMK 로 암호화하여 평문 데이터키와 함께 전달된다.
**KMS 에 암/복호화를 요청하는 경우 HSM 에 의해 암/복호화가 수행되며 원본 데이
터의 사이즈는 4KB 로 제한된다.
데이터 키 생성 과정(대칭키)
데이터 키
암호화된
데이터 키
암호화
알고리즘
데이터 키 요청
(GenerateDataKey)
CMK CMK CMK CMK
데이터 암호화를 위해 사용
데이터 복호화를 위해 사용
KMS 에서의 암호화(4KB 미만으로 제한)
암호화 요청
(Encrypt)
CMK CMK CMK CMK
응답으로 받은 암호문
암호화 요청에 사용된 평문
{
"Plaintext": "VGhpcyBpcyBEYXkgMSBmb3IgdGhlIEludGVybmV0Cg=
=",
"KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab"
}
{ "CiphertextBlob": "CiDPoCH188S65r5Cy7pAhIFJMXDlU7mewhSlYUpuQIVB
rhKmAQEBAgB4z6Ah9fPEuua+/0psE5UWwkK6CnwoeC3Zj9Q0A66apZkbRgl
FfY1lTY+Tc=",
"KeyId": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-5
6ef-1234567890ab",
"EncryptionAlgorithm": "SYMMETRIC_DEFAULT"
}
암호화 결과 회신
비대칭키의 사용
비밀키
비대칭 CMK에 전자서명이나 공개키 암호화
*비대칭 CMK 발급 시 용도 구분
1. 부인 방지를 위한 전자 서명을 위해 사용
2. 공개키 기반의 암호화를 위해 사용
공개키
암호화된
비밀키
CMK CMK CMK CMK
대칭 CMK 에 데이터키 쌍 발급 요청
전자서명 및 암호화에 활용
데이터키 페어 발급
비밀키
암호화된
비밀키
암호화
알고리즘
데이터키 페어 요청
(GenerateDataKeyPair)
CMK CMK CMK CMK
전자서명을 위해 사용
데이터 복호화를 위해 사용
공개키
암호화를 위해 사용
주요 주제주요 주제
시 연
(비대칭키 서명)
주요 주제주요 주제
AWS KMS의 주요 개념
봉투암호화 동작 원리
평문
데이터 키
암호화된
데이터 키
암호화
봉투암호화
처리된 암호문
KMS 에서 발급
© 2018, Amazon Web Services, Inc. or Its Affiliates. All rights reserved.
암호화 작업에서, 개발자는 다음 2개의 사항만 고려:
• 암호화 할 메세지/파일/데이터스트림
• 마스터 키들을 리턴하는 마스터 키 제공자(key provider)
• SDK를 다양한 방식으로 커스터마이징해서 사용
• 복수 리전에서 복수개의 키를 활용하여 암호화
• 성능향상 이나 KMS Limit을 회피하기 위해 데이터 키 캐슁 기능을 이용하여 KMS로의 요청을
절감
현재 C, Java, Python, JavaScript, CLI 버전 제공
http://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/introduction.html
AWS Encryption SDK
AWS 서비스에서의 봉투 암호화
예제: S3 서버 측 암호화
평문 데이터
암호화 과정
암호화된 데이터키
3
Data key
Data key
7
Data key
암호화된 데이터키
6 Data key
데이터키 생성 요청
2
CMK
1
Amazon S3
Encrypt
S3 버킷 내의
암호화 데이
터 및 데이터
키
4
Data key
복호화 과정
5
S3 버킷 내의
암호화 데이
터 및 데이터
키Data key
Decrypt
Amazon S3
평문 데이터
8
주요 주제주요 주제
시 연
(봉투암호화)
주요 주제주요 주제
AWS KMS의 주요 개념
© 2018, Amazon Web Services, Inc. or Its Affiliates. All rights reserved.
Encryption Context
AWS KMS로 보호된 데이터와 연관시키고자 하는 부가정보(Key-value pair)
• 암호화된 리소스에 대한 통제 강화  복호화 시 요청자에 대한 부가 인증/인가에 사용(암호화
시점과 동일해야 수행)
• 감사 요건을 위해 암호키 사용에 대한 이해 제공
• Encryption Context는 CloudTrail상에 평문으로 기록됨  기밀 민감 정보는 활용하지 말것
• CMK정책의 Condition으로 활용
{
"Effect": "Allow",
"Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" },
"Action": [ "kms:Encrypt", "kms:Decrypt" ],
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:EncryptionContext:AppName": "ExampleApp",
"kms:EncryptionContext:Version": "1.0.24"
}
}
}
Encryption Context 사용 예시
Share.TXT Secret.TXT
복호화 성공
Share.TXT
NAME=“Share.TXT”
Secret.TXT
NAME=“Secret.TXT”
Secret.TXT
Share.TXT
NAME=“Secret.TXT”
복호화 실패
Share.TXT
Secret.TXT
NAME=“Share.TXT”
Share.TXT
Secret.TXT
Secret.TXT
Share.TXT
데이터키
데이터키
데이터키
데이터키
AWS KMS의 주요 개념
© 2018, Amazon Web Services, Inc. or Its Affiliates. All rights reserved.
CMK(마스터 키) 정책의 모범사례
• 리소스 기반 정책 - CMK 개별로 정의
• 3가지 유형
• CMK 정책만 사용 – 주로 키를 사용하여 암호화 작업을 수행할 조건을 정의.
• CMK 정책과 IAM 정책을 함께 사용(권장) – 주로 키 관리자의 권한을 정의.
• CMK 정책과 ‘Grants’사용(권장) – 다른 어카운트 또는 AWS 서비스의 키 접근을 정의.
• 기본 CMK 정책을 기업 보안 요건에 맞추어 수정할 것!
• 예 - 키 생성/관리 권한과 키 사용 권한을 동일인이 수행 불가
• IAM 정책에는 꼭 필요한 KMS action만 지정(No kms:*)
• 잉여 권한 부여 방지를 위해 White-listing 기반 정책 관리 권장
• 지정된 관리자 외 명시적 Deny 설정, NotPrincipal + Effect:Deny
© 2018, Amazon Web Services, Inc. or Its Affiliates. All rights reserved.
CMK 정책: Key관리자 vs. Key사용자
{
"Sid": "Allow access for Key Administrators",
"Effect": "Allow",
"Principal": {"AWS": [
"arn:aws:iam::111111111111:user/KMSAdminUser",
"arn:aws:iam::111122223333:role/KMSAdminRole”
]},
"Action": [
"kms:Create*", "kms:Describe*",
"kms:Enable*", "kms:List*",
"kms:Put*", "kms:Update*",
"kms:Revoke*", "kms:Disable*”,
"kms:Get*", "kms:Delete*",
"kms:TagResource", "kms:UntagResource",
"kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion”
],
"Resource": "*”
}
{
"Sid": "Allow use of the key",
"Effect": "Allow",
"Principal": {"AWS": [
"arn:aws:iam::111122223333:user/KMSUser",
"arn:aws:iam::111122223333:role/KMSRole",
"arn:aws:iam::444455556666:root" ]},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey”
],
"Resource": "*"
}
© 2018, Amazon Web Services, Inc. or Its Affiliates. All rights reserved.
어카운트 간 키 공유 CMK 정책
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::222222222222:root”
},
"Action": "kms:*",
"Resource": "*"
}
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::222222222222:root”
"AWS": "arn:aws:iam::222222222222:role/CMKAdmin”
.....
},
"Action": "kms:*",
"Resource": "*"
}
Option 1.
Option 2.
:: 지정된 어카운트가 자체적
으로 내부의 IAM user/role 등
에 접근 권한을 부여(위임 형
태)
:: 키 소유 어카운트에서
CMK 정책에 명시적으로
Principal을 지정하여 엄격하
게 관리
© 2018, Amazon Web Services, Inc. or Its Affiliates. All rights reserved.
ViaService
‘kms:ViaService’: 키 정책 Condition에 적용. 특정 서비스에서만 사용가능하게 제한
{
"Sid": "Allow use of CMK via RDS",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::222222222222:role/MortgageApp”,
},
"Action" : [ "kms:ListGrants", "kms:CreateGrant",
"kms:Decrypt", "kms:GenerateDataKey*", "kms:ReEncrypt*", "kms:DescribeKey", "kms:Encrypt" ],
"Resource" : "*",
"Condition" : {
"StringEquals" : {
"kms:ViaService" : "rds.us-west-1.amazonaws.com"
}
}
},
예 : R D S 서 비 스 에 C M K 사 용 권 한 부 여
© 2018, Amazon Web Services, Inc. or Its Affiliates. All rights reserved.
MFA 활용
예 :: 주요 KMS API 호출에 대해 5분 안에 MFA인증을 거치도록 설정
{
"Sid": "MFACriticalKMSEvents",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:user/ExampleUser"
},
"Action": [
"kms:DeleteAlias”, "kms:DeleteImportedKeyMaterial", "kms:PutKeyPolicy", "kms:ScheduleKeyDeletion"
],
"Resource": "*",
"Condition":{
"NumericLessThan” :{
"aws: MultiFactorAuthAge":"300”
}
}
}
© 2018, Amazon Web Services, Inc. or Its Affiliates. All rights reserved.
Grant 활용
• Grants: AWS 서비스 혹은 다른 주체에게 CMK사용을 허용하기 위한 권한 집합 위임을 코딩레벨에서 지원하
는 기능
$ aws kms create-grant --key-id 1234abcd-12ab-34cd-56ef-1234567890ab --grantee-principal arn:aws:iam::111122223333:user/exampleUser --operation
s Decrypt --retiring-principal arn:aws:iam::111122223333:role/adminRole --constraints EncryptionContextSubset={Department=IT}
• Grant 의 사용
• Grant User
- KMS 에 대한 사용 권한을 규정하는 권한을 가진 IAM 사용자. Grant Token 을 생성하여 Grantee 에
게 할당
• Grantee
- 할당 받은 Grant 를 사용하는 IAM 사용자. Grant Token 과 함께 허용된 액션 수행
• 유의!! Grant Limit
• CMK(*) 당 Grant Limit :: 10,000개
:: 동일한 CMK를 사용하는 암호화된 리소스를 10,000개 까지만 생성 (EBS볼륨 등)
• CMK(*) 당 특정 보안 주체(Principals)에 대한 Grants Limit :: 500개
:: 동일한 CMK를 사용하여 특정 EC2 인스턴스에 암호화된 EBS볼륨을 500개 까지 할당
주요 주제주요 주제
시 연
(Grant)
주요 주제주요 주제
더 나은 세미나를 위해
여러분의 의견을 남겨주세요!
▶ 질문에 대한 답변 드립니다.
▶ 발표자료/녹화영상을 제공합니다.
http://bit.ly/awskr-webinar
감사합니다.
신 은 수 | Security Specialist Solutions Architect

AWS KMS 에서 제공하는 봉투암호화 방식의 암호화 및 사이닝 기능에 대한 소개와 실습 - 신은수, AWS 솔루션즈 아키텍트 :: AWS Builders 300

  • 1.
    AWS KMS 에서제공하는 봉투암호화 방식의 암호화 및 사이닝 기능에 대한 소개와 데모 신 은 수 | Security Specialist Solutions Architect
  • 2.
    강연 중 질문하는방법 AWS Builders Go to Webinar “Questions” 창에 자신이 질문한 내역이 표시됩니다. 기본적으로 모든 질문은 공개로 답변 됩니다만 본인만 답변을 받고 싶으면 (비공개)라고 하고 질문해 주시면 됩니다. 본 컨텐츠는 고객의 편의를 위해 AWS 서비스 설명을 위해 온라인 세미나용으로 별도로 제작, 제공된 것입니다. 만약 AWS 사이트와 컨텐츠 상에서 차이나 불일치가 있을 경우, AWS 사이트(aws.amazon.com)가 우선합니다. 또한 AWS 사이트 상에서 한글 번역문과 영어 원문에 차이나 불일치가 있을 경우(번역의 지체로 인한 경우 등 포함), 영어 원문이 우선합니다. AWS는 본 컨텐츠에 포함되거나 컨텐츠를 통하여 고객에게 제공된 일체의 정보, 콘텐츠, 자료, 제품(소프트웨어 포함) 또는 서비스를 이용함으로 인하여 발생하는 여하한 종류의 손해에 대하여 어떠한 책임도 지지 아니하며, 이는 직접 손해, 간접 손해, 부수적 손해, 징벌적 손해 및 결과적 손해를 포함하되 이에 한정되지 아니합니다. 고지 사항(Disclaimer)
  • 3.
    주요 주제 - AWS에서의 암호화 - CMK(Customer Master Key) - 봉투암호화 - Encryption Context - Policy 및 Grant
  • 4.
    © 2018, AmazonWeb Services, Inc. or Its Affiliates. All rights reserved. 일반적인 요건: • 규제 준수를 위해 • 보안 모범사례를 따르기 위해 • 클라우드 사업자에게서 내 데이터를 보호하기 위해 • 클라우드 사업자의 다른 고객으로 부터 내 데이터를 보호하기 위해 IT 보안 인력 키 접근 정책 관리 소프트웨어 개발자 규제 준수팀 구성 및 이력 정보 를 검증 데이터 보호를 위해 암호키 사용 클라우드에서의 암호화
  • 5.
    물리 계층 MACsec 기반AES-256 암호화(IEEE) VPC 암호화 | 교차 리전 연결 암호화 | AWS VPN 보안 시설 및 AES-256 기반 광학적 암호화 Amazon s2n. | NLB – TLS | ALB | CloudFront | ACM 통합 AWS Encryption SDK | KMS 를 활용한 암호화 데이터 링크 계층 네트워크 계층 전송 계층 애플리케이션 계층 AWS 암호화 스택
  • 6.
    © 2018, AmazonWeb Services, Inc. or Its Affiliates. All rights reserved. 클라이언트 측 암호화(Client-Side Encryption) • 데이터를 전송하기 전에 암호화 수행 • 고객이 직접 암호화 키를 마련하고 직접 관리하거나, AWS KMS/CloudHSM내에 보 관 관리 • 도구들: AWS Encryption SDK, S3 Encryption Client, EMRFS Client, DynamoDB Encryption Client 서버 측 암호화(Server-Side Encryption) • AWS가 전송된 데이터에 대해 고객 대신 서버 측에서 암호화 작업 수행 • 총 58 개 서비스 연동 : Amazon S3, Amazon EBS, Amazon RDS, Amazon Redshift, Amazon WorkSpaces, Amazon Kinesis Streams, AWS CloudTrail… • 고객 관리 통제 하에 AWS KMS에 암호화키(CMK) 보관 AWS 에 데이터 저장 시 암호화 적용 https://aws.amazon.com/kms/features/#AWS_Service_Integration
  • 7.
    KMS(Key Management Service) AWSIAM AWS KMS S3 Secrets Manager Athena DynamoDBRDS CloudTrail EBS S3 AWS Cloud 사용자 접근 제어 저장소 감사 로그
  • 8.
  • 9.
  • 10.
    AWS KMS 키의계층 구조 데이터키 암호화된 데이터키 암호화된 CMK 평문 CMK 도메인 키 KMS 서비스 구성 저장 HSM 암호화 데이터키 발급 고가용성이 보장된 스토리지 Client 데이터키
  • 11.
    AWS KMS 키의계층 구조(요약) 1. CMK(KMS 내부의 HSM 에서 생성)은 절대 평문 형태로 HSM 을 벗어나지 않는다. 2. CMK 는 HSM 에 저장된 도메인 키로 암호화되며 암호화된 상태로 KMS 내부의 별 도 저장공간(KMS Host)에 저장된다. 3. 데이터키는 KMS 내부의 HSM 에서 생성된다. 4. 생성된 데이터키는 CMK 로 암호화하여 평문 데이터키와 함께 전달된다. **KMS 에 암/복호화를 요청하는 경우 HSM 에 의해 암/복호화가 수행되며 원본 데이 터의 사이즈는 4KB 로 제한된다.
  • 12.
    데이터 키 생성과정(대칭키) 데이터 키 암호화된 데이터 키 암호화 알고리즘 데이터 키 요청 (GenerateDataKey) CMK CMK CMK CMK 데이터 암호화를 위해 사용 데이터 복호화를 위해 사용
  • 13.
    KMS 에서의 암호화(4KB미만으로 제한) 암호화 요청 (Encrypt) CMK CMK CMK CMK 응답으로 받은 암호문 암호화 요청에 사용된 평문 { "Plaintext": "VGhpcyBpcyBEYXkgMSBmb3IgdGhlIEludGVybmV0Cg= =", "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab" } { "CiphertextBlob": "CiDPoCH188S65r5Cy7pAhIFJMXDlU7mewhSlYUpuQIVB rhKmAQEBAgB4z6Ah9fPEuua+/0psE5UWwkK6CnwoeC3Zj9Q0A66apZkbRgl FfY1lTY+Tc=", "KeyId": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-5 6ef-1234567890ab", "EncryptionAlgorithm": "SYMMETRIC_DEFAULT" } 암호화 결과 회신
  • 14.
    비대칭키의 사용 비밀키 비대칭 CMK에전자서명이나 공개키 암호화 *비대칭 CMK 발급 시 용도 구분 1. 부인 방지를 위한 전자 서명을 위해 사용 2. 공개키 기반의 암호화를 위해 사용 공개키 암호화된 비밀키 CMK CMK CMK CMK 대칭 CMK 에 데이터키 쌍 발급 요청 전자서명 및 암호화에 활용
  • 15.
    데이터키 페어 발급 비밀키 암호화된 비밀키 암호화 알고리즘 데이터키페어 요청 (GenerateDataKeyPair) CMK CMK CMK CMK 전자서명을 위해 사용 데이터 복호화를 위해 사용 공개키 암호화를 위해 사용
  • 16.
    주요 주제주요 주제 시연 (비대칭키 서명)
  • 17.
  • 18.
  • 19.
    봉투암호화 동작 원리 평문 데이터키 암호화된 데이터 키 암호화 봉투암호화 처리된 암호문 KMS 에서 발급
  • 20.
    © 2018, AmazonWeb Services, Inc. or Its Affiliates. All rights reserved. 암호화 작업에서, 개발자는 다음 2개의 사항만 고려: • 암호화 할 메세지/파일/데이터스트림 • 마스터 키들을 리턴하는 마스터 키 제공자(key provider) • SDK를 다양한 방식으로 커스터마이징해서 사용 • 복수 리전에서 복수개의 키를 활용하여 암호화 • 성능향상 이나 KMS Limit을 회피하기 위해 데이터 키 캐슁 기능을 이용하여 KMS로의 요청을 절감 현재 C, Java, Python, JavaScript, CLI 버전 제공 http://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/introduction.html AWS Encryption SDK
  • 21.
    AWS 서비스에서의 봉투암호화 예제: S3 서버 측 암호화 평문 데이터 암호화 과정 암호화된 데이터키 3 Data key Data key 7 Data key 암호화된 데이터키 6 Data key 데이터키 생성 요청 2 CMK 1 Amazon S3 Encrypt S3 버킷 내의 암호화 데이 터 및 데이터 키 4 Data key 복호화 과정 5 S3 버킷 내의 암호화 데이 터 및 데이터 키Data key Decrypt Amazon S3 평문 데이터 8
  • 22.
    주요 주제주요 주제 시연 (봉투암호화)
  • 23.
  • 24.
  • 25.
    © 2018, AmazonWeb Services, Inc. or Its Affiliates. All rights reserved. Encryption Context AWS KMS로 보호된 데이터와 연관시키고자 하는 부가정보(Key-value pair) • 암호화된 리소스에 대한 통제 강화  복호화 시 요청자에 대한 부가 인증/인가에 사용(암호화 시점과 동일해야 수행) • 감사 요건을 위해 암호키 사용에 대한 이해 제공 • Encryption Context는 CloudTrail상에 평문으로 기록됨  기밀 민감 정보는 활용하지 말것 • CMK정책의 Condition으로 활용 { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/RoleForExampleApp" }, "Action": [ "kms:Encrypt", "kms:Decrypt" ], "Resource": "*", "Condition": { "StringEquals": { "kms:EncryptionContext:AppName": "ExampleApp", "kms:EncryptionContext:Version": "1.0.24" } } }
  • 26.
    Encryption Context 사용예시 Share.TXT Secret.TXT 복호화 성공 Share.TXT NAME=“Share.TXT” Secret.TXT NAME=“Secret.TXT” Secret.TXT Share.TXT NAME=“Secret.TXT” 복호화 실패 Share.TXT Secret.TXT NAME=“Share.TXT” Share.TXT Secret.TXT Secret.TXT Share.TXT 데이터키 데이터키 데이터키 데이터키
  • 27.
  • 28.
    © 2018, AmazonWeb Services, Inc. or Its Affiliates. All rights reserved. CMK(마스터 키) 정책의 모범사례 • 리소스 기반 정책 - CMK 개별로 정의 • 3가지 유형 • CMK 정책만 사용 – 주로 키를 사용하여 암호화 작업을 수행할 조건을 정의. • CMK 정책과 IAM 정책을 함께 사용(권장) – 주로 키 관리자의 권한을 정의. • CMK 정책과 ‘Grants’사용(권장) – 다른 어카운트 또는 AWS 서비스의 키 접근을 정의. • 기본 CMK 정책을 기업 보안 요건에 맞추어 수정할 것! • 예 - 키 생성/관리 권한과 키 사용 권한을 동일인이 수행 불가 • IAM 정책에는 꼭 필요한 KMS action만 지정(No kms:*) • 잉여 권한 부여 방지를 위해 White-listing 기반 정책 관리 권장 • 지정된 관리자 외 명시적 Deny 설정, NotPrincipal + Effect:Deny
  • 29.
    © 2018, AmazonWeb Services, Inc. or Its Affiliates. All rights reserved. CMK 정책: Key관리자 vs. Key사용자 { "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::111111111111:user/KMSAdminUser", "arn:aws:iam::111122223333:role/KMSAdminRole” ]}, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*”, "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion” ], "Resource": "*” } { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::111122223333:user/KMSUser", "arn:aws:iam::111122223333:role/KMSRole", "arn:aws:iam::444455556666:root" ]}, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey” ], "Resource": "*" }
  • 30.
    © 2018, AmazonWeb Services, Inc. or Its Affiliates. All rights reserved. 어카운트 간 키 공유 CMK 정책 { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::222222222222:root” }, "Action": "kms:*", "Resource": "*" } { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::222222222222:root” "AWS": "arn:aws:iam::222222222222:role/CMKAdmin” ..... }, "Action": "kms:*", "Resource": "*" } Option 1. Option 2. :: 지정된 어카운트가 자체적 으로 내부의 IAM user/role 등 에 접근 권한을 부여(위임 형 태) :: 키 소유 어카운트에서 CMK 정책에 명시적으로 Principal을 지정하여 엄격하 게 관리
  • 31.
    © 2018, AmazonWeb Services, Inc. or Its Affiliates. All rights reserved. ViaService ‘kms:ViaService’: 키 정책 Condition에 적용. 특정 서비스에서만 사용가능하게 제한 { "Sid": "Allow use of CMK via RDS", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::222222222222:role/MortgageApp”, }, "Action" : [ "kms:ListGrants", "kms:CreateGrant", "kms:Decrypt", "kms:GenerateDataKey*", "kms:ReEncrypt*", "kms:DescribeKey", "kms:Encrypt" ], "Resource" : "*", "Condition" : { "StringEquals" : { "kms:ViaService" : "rds.us-west-1.amazonaws.com" } } }, 예 : R D S 서 비 스 에 C M K 사 용 권 한 부 여
  • 32.
    © 2018, AmazonWeb Services, Inc. or Its Affiliates. All rights reserved. MFA 활용 예 :: 주요 KMS API 호출에 대해 5분 안에 MFA인증을 거치도록 설정 { "Sid": "MFACriticalKMSEvents", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/ExampleUser" }, "Action": [ "kms:DeleteAlias”, "kms:DeleteImportedKeyMaterial", "kms:PutKeyPolicy", "kms:ScheduleKeyDeletion" ], "Resource": "*", "Condition":{ "NumericLessThan” :{ "aws: MultiFactorAuthAge":"300” } } }
  • 33.
    © 2018, AmazonWeb Services, Inc. or Its Affiliates. All rights reserved. Grant 활용 • Grants: AWS 서비스 혹은 다른 주체에게 CMK사용을 허용하기 위한 권한 집합 위임을 코딩레벨에서 지원하 는 기능 $ aws kms create-grant --key-id 1234abcd-12ab-34cd-56ef-1234567890ab --grantee-principal arn:aws:iam::111122223333:user/exampleUser --operation s Decrypt --retiring-principal arn:aws:iam::111122223333:role/adminRole --constraints EncryptionContextSubset={Department=IT} • Grant 의 사용 • Grant User - KMS 에 대한 사용 권한을 규정하는 권한을 가진 IAM 사용자. Grant Token 을 생성하여 Grantee 에 게 할당 • Grantee - 할당 받은 Grant 를 사용하는 IAM 사용자. Grant Token 과 함께 허용된 액션 수행 • 유의!! Grant Limit • CMK(*) 당 Grant Limit :: 10,000개 :: 동일한 CMK를 사용하는 암호화된 리소스를 10,000개 까지만 생성 (EBS볼륨 등) • CMK(*) 당 특정 보안 주체(Principals)에 대한 Grants Limit :: 500개 :: 동일한 CMK를 사용하여 특정 EC2 인스턴스에 암호화된 EBS볼륨을 500개 까지 할당
  • 34.
  • 35.
  • 36.
    더 나은 세미나를위해 여러분의 의견을 남겨주세요! ▶ 질문에 대한 답변 드립니다. ▶ 발표자료/녹화영상을 제공합니다. http://bit.ly/awskr-webinar
  • 37.
    감사합니다. 신 은 수| Security Specialist Solutions Architect