Amazon Simple Email Service (Amazon SES) 如何使用Amazon KMS - Amazon Key Management Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon Simple Email Service (Amazon SES) 如何使用Amazon KMS

您可以使用 Amazon Simple Email Service (Amazon SES) 接收电子邮件并 (选择性地) 加密收到的电子邮件,然后再将它们存储在您选择的 Amazon 简单存储服务 (Amazon S3) 存储桶中。如果您将 Amazon SES 配置为加密电子邮件,则必须选择Amazon KMS 客户主键(CMK),Amazon SES 将根据这些消息加密。可以选择Amazon托管 CMKAmazon SES 别名为AWS /ses),也可以选择对称客户托管 CMK中创建的Amazon KMS.

重要

Amazon SES 仅支持对称 CMK. 您无法使用非对称 CMK来加密您的 Amazon SES 电子邮件。要获取确定 CMK 是对称还是非对称的帮助,请参阅识别对称 CMK 和非对称 CMK

有关使用 Amazon SES 接收电子邮件的更多信息,请转到使用 Amazon SES 接收电子邮件中的Amazon Simple Email Service 开发人员指南.

Amazon SES 加密概述Amazon KMS

当您将 Amazon SES 配置为接收电子邮件并加密电子邮件,然后将其保存到 S3 存储桶时,其过程将如下所述:

  1. 创建接收规则,同 Amazon SES 指定 S3 操作、用于存储的 S3 存储桶以及用于加密的客户主密钥 (CMK)。

  2. Amazon SES 会收到与您的接收规则匹配的电子邮件。

  3. Amazon SES 请求使用您在适用接收规则中指定的 CMK 加密的唯一数据密钥。

  4. Amazon KMS创建一个新的数据密钥,使用指定的 CMK 对其进行加密,然后将已加密的数据密钥明文副本发送给 Amazon SES。

  5. Amazon SES 使用明文数据密钥加密电子邮件,并在使用后尽快从内存中删除该明文数据密钥。

  6. Amazon SES 将加密的电子邮件和加密的数据密钥放入指定的 S3 存储桶中。加密的数据密钥将存储为加密电子邮件的元数据。

要完成步骤 3通过步骤 6,Amazon SES 使用Amazon— 提供 Amazon S3 加密客户端。使用同一客户端从 Amazon S3 检索加密的电子邮件并对其进行解密。有关更多信息,请参阅获取和解密电子邮件

Amazon SES 加密上下文

Amazon SES 请求数据密钥来加密您收到的电子邮件时 (步骤 3中的Amazon SES 加密概述Amazon KMS),它包含一个加密上下文请求中。加密上下文提供其他已经过身份验证的数据(AAD) 指出Amazon KMS确保数据完整性。加密上下文也将写入您的 Amazon CloudTrail 日志文件,这有助于您了解为什么使用给定的客户主密钥 (CMK)。Amazon SES 使用以下加密上下文:

  • 的 ID Amazon Web Services 账户 您已在其中将配置为 Amazon SES 收电子邮件

  • 对电子邮件调用 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 使用您的Amazon KMS客户主密钥 (CMK)

要加密您的电子邮件,您可以使用Amazon托管客户主密钥 (CMK)在您的 Amazon SES 账户中(AWS /ses),或者您可以使用客户托管 CMK你创建的。Amazon SES 已有权使用Amazon代表您托管 CMK。但是,如果您指定了客户托管的 CMK,添加 S3 操作添加到您的 Amazon SES 接收规则,您必须授予 Amazon SES 权限,以使用 CMK 加密您的电子邮件。

要为提供 Amazon SES 使用客户托管 CMK 的权限,请将以下语句添加到 CMK 的密钥策略

{ "Sid": "Allow SES to encrypt messages using this CMK", "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"} } }

ReplaceACCOUNT-ID-WITHOUT-HYPHENS的 12 位数 ID Amazon Web Services 账户 ,您已在其中将 Amazon SES 配置为接收电子邮件。此策略语句仅允许 Amazon SES 在以下条件下使用此 CMK 加密数据:

  • Amazon SES 必须指定aws:ses:rule-nameaws:ses:message-id中的EncryptionContext他们的Amazon KMSAPI 请求。

  • Amazon SES 必须指定aws:ses:source-account中的EncryptionContext他们的Amazon KMSAPI 请求,以及aws:ses:source-account的对象必须与 Amazon Web Services 账户 密钥策略中指定的 ID。

有关 Amazon SES 在加密电子邮件时使用的加密上下文的更多信息,请参阅Amazon SES 加密上下文. 有关 Amazon KMS 如何使用加密上下文的一般信息,请参阅加密上下文

获取和解密电子邮件

Amazon SES 无权解密您的加密电子邮件,也无法为您解密它们。您必须编写代码以从 Amazon S3 获取电子邮件并对其进行解密。为方便起见,请使用 Amazon S3 加密客户端。以下Amazon开发工具包中包含 Amazon S3 加密客户端:

Amazon S3 加密客户端可简化以下工作:构建对 Amazon S3 的必要请求,以检索加密电子邮件;以及Amazon KMS来解密邮件的加密数据密钥,以及解密电子邮件。例如,要成功解密加密的数据密钥,您传递的加密上下文必须与 Amazon SES 在从Amazon KMS(步骤 3中的Amazon SES 加密概述Amazon KMS)。Amazon S3 加密客户端可以为您处理这一情况及其他许多工作。

对于使用 Amazon S3 加密客户端的示例代码,Amazon SDK for Java执行客户端解密,请参阅以下内容: