Amazon Simple Email Service(Amazon SES)에서 AWS KMS 사용 방법 - AWS Key Management Service

Amazon Simple Email Service(Amazon SES)에서 AWS KMS 사용 방법

Amazon Simple Email Service(Amazon SES)를 사용하여 이메일을 수신하고, (선택적으로) 수신된 이메일 메시지를 암호화한 후 선택한 Amazon Simple Storage Service(Amazon S3) 버킷에 저장할 수 있습니다. 이메일 메시지를 암호화하도록 Amazon SES를 구성할 때 Amazon SES가 메시지를 암호화하는 AWS KMS AWS KMS key를 선택해야 합니다. Amazon SES(별칭은 aws/ses)에 대해 AWS 관리형 키를 선택하거나 AWS KMS에서 생성한 대칭 고객 관리형 키를 선택할 수 있습니다.

중요

Amazon SES는 대칭 KMS 키만 지원합니다. 비대칭 KMS 키를 사용하여 Amazon SES 이메일 메시지를 암호화할 수 없습니다. KMS 키가 대칭 또는 비대칭인지 여부를 확인하는 방법은 비대칭 KMS 키 식별 단원을 참조하세요.

Amazon SES를 사용한 이메일 수신에 대한 자세한 내용은 Amazon Simple Email Service 개발자 안내서Amazon SES 이메일 수신하기를 참조하십시오.

AWS KMS를 이용한 Amazon SES 암호화 개요

Amazon SES가 이메일을 수신하고, 이메일 메시지를 S3 버킷에 저장하기 전에 암호화하도록 구성하면, 프로세스가 다음과 같이 작동합니다.

  1. Amazon SES에 대한 수신 규칙을 생성하여 S3 작업, 스토리지용 S3 버킷, 암호화용 AWS KMS key를 지정합니다.

  2. Amazon SES는 수신 규칙에 부합하는 이메일 메시지를 수신합니다.

  3. Amazon SES는 해당하는 수신 규칙에서 지정한 KMS 키로 암호화된 고유한 데이터 키를 요청합니다.

  4. AWS KMS가 새 데이터 키를 생성하고 지정된 KMS 키로 암호화한 후, 데이터 키의 암호화된 텍스트 버전과 일반 텍스트 버전을 Amazon SES로 보냅니다.

  5. Amazon SES는 일반 텍스트 데이터 키를 사용해 이메일 메시지를 암호화하고, 사용 후 가급적 빨리 메모리에서 일반 텍스트 데이터 키를 제거합니다.

  6. Amazon SES는 암호화한 이메일 메시지와 암호화한 데이터 키를 지정된 S3 버킷에 저장합니다. 암호화한 데이터 키는 암호화한 이메일 메시지와 함께 메타데이터로 저장됩니다.

단계 6을 통해 단계 3를 달성하기 위해 Amazon SES는 AWS 제공 Amazon S3 암호화 클라이언트를 사용합니다. 동일한 클라이언트를 이용해 Amazon S3에서 암호화한 이메일 메시지를 검색하고 복호화합니다. 자세한 내용은 이메일 메시지 가져오기 및 해독 섹션을 참조하세요.

Amazon SES 암호화 컨텍스트

Amazon SES가 수신한 이메일 메시지(AWS KMS를 이용한 Amazon SES 암호화 개요단계 3)를 암호화하기 위해 데이터 키를 요청하는 경우 요청에 암호화 컨텍스트가 포함됩니다. 암호화 컨텍스트는 AWS KMS가 데이터 무결성을 보장하기 위해 사용하는 추가 인증 데이터(AAD)를 제공합니다. 암호화 컨텍스트는 AWS CloudTrail 로그 파일에도 기록되어, 그 AWS KMS key(KMS 키)가 사용된 이유를 이해하는 데 도움을 줍니다. Amazon SES는 다음과 같은 암호화 컨텍스트를 사용합니다.

  • Amazon SES가 이메일 메시지를 수신하도록 구성한 AWS 계정의 ID

  • 이메일 메시지에 S3 작업을 호출한 Amazon SES 수신 규칙의 이름

  • 이메일 메시지의 Amazon SES 메시지 ID

다음 예는 Amazon SES가 사용하는 암호화 컨텍스트의 JSON 표시를 보여줍니다.

{ "aws:ses:source-account": "111122223333", "aws:ses:rule-name": "example-receipt-rule-name", "aws:ses:message-id": "d6iitobk75ur44p8kdnnp7g2n800" }

Amazon SES에 AWS KMS key 사용 권한 부여

이메일 메시지를 암호화하려면 Amazon SES(aws/ses)용 계정에서 AWS 관리형 키를 사용하거나 생성한 고객 관리형 키를 사용할 수 있습니다. Amazon SES는 사용자를 대신해 이미 AWS 관리형 키를 사용할 권한이 있습니다. 그러나 Amazon SES 수신 규칙에 S3 작업을 추가할 때 고객 관리형 키를 지정하는 경우 Amazon SES에 KMS 키를 사용하여 이메일 메시지를 암호화할 수 있는 권한을 부여해야 합니다.

Amazon SES에 고객 관리형 키를 사용할 수 있는 권한을 부여하려면 해당 KMS 키의 키 정책에 다음 명령문을 추가하십시오.

{ "Sid": "Allow SES to encrypt messages using this KMS key", "Effect": "Allow", "Principal": {"Service": "ses.amazonaws.com"}, "Action": [ "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "Null": { "kms:EncryptionContext:aws:ses:rule-name": false, "kms:EncryptionContext:aws:ses:message-id": false }, "StringEquals": {"kms:EncryptionContext:aws:ses:source-account": "ACCOUNT-ID-WITHOUT-HYPHENS"} } }

ACCOUNT-ID-WITHOUT-HYPHENS를 이메일 메시지를 수신하도록 Amazon SES를 구성한 AWS 계정의 12자리 ID로 바꿉니다. 이 조건은 Amazon SES가 다음 조건에서만 이 KMS 키로 데이터를 암호화하도록 허용합니다.

  • Amazon SES는 AWS KMS API 요청의 EncryptionContextaws:ses:rule-nameaws:ses:message-id를 지정해야 합니다.

  • Amazon SES는 AWS KMS API 요청의 EncryptionContextaws:ses:source-account를 지정해야 하고 aws:ses:source-account 값은 키 정책에 지정된 AWS 계정 ID와 일치해야 합니다.

Amazon SES가 이메일 메시지를 암호화할 때 사용하는 암호화 컨텍스트에 대한 자세한 내용은 Amazon SES 암호화 컨텍스트 섹션을 참조하세요. AWS KMS가 암호화 컨텍스트를 사용하는 방식에 대한 전반적인 내용은 암호화 컨텍스트를 참조하세요.

이메일 메시지 가져오기 및 해독

Amazon SES는 암호화된 이메일 메시지를 복호화할 권한이 없으며 사용자를 위해 복호화할 수 없습니다. Amazon S3에서 이메일 메시지를 가져오고 복호화하기 위한 코드를 작성해야 합니다. 이를 쉽게 하기 위해 Amazon S3 암호화 클라이언트를 사용합니다. 다음 AWS SDK에 Amazon S3 암호화 클라이언트가 포함됩니다.

Amazon S3 암호화 클라이언트는 Amazon S3에 대해 암호화된 이메일 메시지 검색, AWS KMS에 대해 메시지의 암호화된 데이터 키 복호화, 이메일 메시지를 복호화하는 데 필요한 요청을 구성하는 작업을 단순화합니다. 예를 들어 암호화된 데이터 키를 성공적으로 복호화하려면 AWS KMS(AWS KMS를 이용한 Amazon SES 암호화 개요단계 3)에서 데이터 키를 요청할 때 Amazon SES가 전달한 것과 동일한 암호화 컨텍스트를 전달해야 합니다. Amazon S3 암호화 클라이언트가 자동으로 이 작업과 기타 다양한 프로세스를 수행합니다.

AWS SDK for Java에서 클라이언트 측 복호화를 위해 Amazon S3 암호화 클라이언트를 사용하는 샘플 코드를 보려면, 다음 내용을 참조하세요.