AWS Key Management Service
開発者ガイド

Amazon Simple Email Service (Amazon SES) で AWS KMS を使用する方法

Amazon Simple Email Service (Amazon SES) を使用して E メールを受信し、(オプションで) 受信した E メールメッセージを暗号化してから、選択した Amazon Simple Storage Service (Amazon S3) バケットに保存することができます。E メールメッセージを暗号化するよう Amazon SES を設定する場合は、Amazon SES がメッセージを暗号化する KMS カスタマーマスターキー (CMK) を選択する必要があります。エイリアス aws/ses を使って、アカウントで Amazon SES 用のデフォルト CMK を選択できます。または、AWS KMS で別に作成したカスタム CMK を選択できます。

Amazon SES を使用した E メールの受信の詳細については、『Amazon Simple Email Service 開発者ガイド』の「Amazon SES を使用した E メールの受信」を参照してください。

AWS KMS を使用した Amazon SES 暗号化の概要

受信した E メールメッセージを暗号化してから S3 バケットに保存するよう Amazon SES を設定する場合のプロセスは、次のようになります。

  1. Amazon SES の受信ルールを作成し、S3 アクション、ストレージの S3 バケット、および暗号化の KMS カスタマーマスターキー (CMK) を指定します。

  2. Amazon SES は、受信ルールに一致する E メールメッセージを受信します。

  3. Amazon SES は、該当する受信ルールで指定した KMS CMK を使って暗号化された一意のデータキーをリクエストします。

  4. AWS KMS は新しいデータキーを作成し、指定された CMK で暗号化して、データキーの暗号化されたコピーとプレーンテキストのコピーを Amazon SES に送信します。

  5. Amazon SES はプレーンテキストデータキーを使用して E メールメッセージを暗号化し、使用後できるだけ早くプレーンテキストデータキーをメモリから削除します。

  6. Amazon SES は暗号化された E メールメッセージと暗号化されたデータキーを、指定された S3 バケットに配置します。暗号化されたデータキーは、暗号化された E メールメッセージとともにメタデータとして保存されます。

ステップ 3 から ステップ 6 を実行するため 、Amazon SES は AWS–により提供された Amazon S3 暗号化クライアントを使用します。Amazon S3 から暗号化された E メールメッセージを取得して復号するには、同じクライアントを使用します。詳細については、「E メールメッセージの取得と復号化」を参照してください。

Amazon SES 暗号化コンテキスト

Amazon SES が受信した E メールメッセージを暗号化するためにデータキーをリクエストすると (「ステップ 3」の AWS KMS を使用した Amazon SES 暗号化の概要)、リクエストに暗号化コンテキストが含まれます。暗号化コンテキストは、データの整合性を保証するために AWS KMS で使用される追加の認証データ (AAD) を提供します。また、暗号化コンテキストが AWS CloudTrail ログファイルに書き込まれるため、特定のカスタマーマスターキー (CMK) が使用された理由を理解するうえで役立ちます。Amazon SES では、次の暗号化コンテキストが使用されます

  • E メールメッセージを受信するよう Amazon SES を設定した AWS アカウントの ID

  • E メールメッセージで S3 アクションを呼び出した Amazon SES 受信ルールのルール名

  • E メールメッセージの Amazon SES メッセージ ID

次の例は、Amazon SES が使用する暗号化コンテキストの JSON 表現を示しています。

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

AWS KMS カスタマーマスターキー (CMK) を使用するアクセス権限の Amazon SES への付与

アカウントで、エイリアス aws/ses とともに Amazon SES 用のデフォルトのカスタマーマスターキー (CMK) を使用するか、自分が作成するカスタム CMK を使用できます。Amazon SES 用のデフォルト CMK を使用する場合は、それを使用するためのアクセス権限を Amazon SES に付与する手順は必要ありません。ただし、Amazon SES の受信ルールに対して S3 アクションを追加する場合、E メールメッセージを暗号化するために CMK を使用するアクセス権限を Amazon SES が持つようにする必要があります。カスタム CMK を使用するアクセス権限を Amazon SES に付与するには、CMK のキーポリシーに次のステートメントを追加します。

{ "Sid": "Allow SES to encrypt messages using this master 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 を、E メールメッセージを受信するよう Amazon SES を設定した AWS アカウントの 12 桁の ID で置き換えます。次のポリシーステートメントでは、Amazon SES が、これらの条件下でのみこの CMK でデータを暗号化することができます。

  • Amazon SES は、AWS KMS API リクエストの EncryptionContext で、aws:ses:rule-name および aws:ses:message-id を指定する必要があります。

  • Amazon SES は、AWS KMS API リクエストの EncryptionContextaws:ses:source-account を指定し、aws:ses:source-account の値は、キーポリシーで指定された AWS のアカウント ID と一致する必要があります。

E メールメッセージを暗号化する際に Amazon SES で使用される暗号化コンテキストの詳細については、「Amazon SES 暗号化コンテキスト」を参照してください。AWS KMS が暗号化テキストをどのように使用するかについての一般情報は、 暗号化コンテキストを参照してください。

E メールメッセージの取得と復号化

Amazon SES には、暗号化された E メールメッセージを復号するアクセス権限がないため、メッセージを復号することができません。Amazon S3 から E メールメッセージを取得して復号化するコードを書く必要があります。これを簡単にするには、Amazon S3 暗号化クライアントを使用します。以下の AWS SDK には、Amazon S3 暗号化クライアントが含まれます。

Amazon S3 暗号化クライアントは、Amazon S3 が暗号化された E メールメッセージを取得し、AWS KMS がメッセージの暗号化されたデータキーを復号するために必要なリクエストを作成するために必要な作業と、E メールメッセージの復号の作業を簡略化します。たとえば、暗号化されたデータキーを正常に復号するには、Amazon SES からデータキーをリクエストした (「AWS KMS」の ステップ 3) ときに AWS KMS を使用した Amazon SES 暗号化の概要 が渡したのと同じ暗号化コンテキストを渡す必要があります。Amazon S3 暗号化クライアントが、この作業と他の作業の多くをユーザーに代わって処理します。

AWS SDK for Java で Amazon S3 暗号化クライアントをサンプルコードが使用してクライアント側の復号を実行する方法については、以下を参照してください。