本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
默认情况下,Amazon SES 会加密所有静态数据。默认加密有助于降低保护数据的操作开销和复杂性。加密还支持创建符合严格加密合规性和法规要求的 Mail Manager 存档。
SES 提供以下加密选项:
-
AWS 自有密钥 — SES 默认使用这些密钥。您无法查看、管理或使用 AWS 自有密钥,也无法审核其使用情况。但是,无需采取任何措施或更改任何计划即可保护用于加密数据的密钥。有关更多信息,请参阅 AWS Key Management Service 开发人员指南中的 AWS 自有密钥。
-
客户自主管理型密钥 – SES 支持使用由您自己创建、拥有和管理的对称客户自主管理型密钥。由于您可以完全控制此加密,因此可以执行以下任务:
-
制定和维护关键策略
-
建立和维护 IAM 策略和授权
-
启用和禁用密钥策略
-
轮换加密材料
-
添加标签
-
创建密钥别名
-
安排密钥删除
要使用您自己的密钥,请在创建 SES 资源时选择客户自主管理型密钥。
有关更多信息,请参阅《AWS Key Management Service 开发人员指南》中的客户托管密钥。
-
注意
SES 使用 AWS 自有密钥自动启用静态加密,不收取任何费用。
但是,使用客户管理的密钥需要 AWS KMS 付费。有关定价的更多信息,请参阅 AWS Key Management Service 定价
创建客户托管密钥
您可以使用 AWS Management Console、或,创建对称的客户托管密钥。 AWS KMS APIs
创建对称的客户托管密钥
请按照《AWS Key Management Service 开发人员指南》中创建对称加密 KMS 密钥的步骤操作。
注意
对于存档,您的密钥必须满足以下要求:
-
密钥必须是对称的。
-
密钥材料来源必须是
AWS_KMS
。 -
密钥的用法必须是
ENCRYPT_DECRYPT
。
密钥策略
密钥策略控制对客户自主管理型密钥的访问。每个客户托管式密钥必须只有一个密钥策略,其中包含确定谁可以使用密钥以及如何使用密钥的声明。创建客户托管式密钥时,可以指定密钥策略。有关更多信息,请参阅《AWS Key Management Service 开发人员指南》中的管理对客户托管密钥的访问。
要将客户自主管理型密钥与 Mail Manager 存档一起使用,您的密钥策略必须允许以下 API 操作:
-
kms: DescribeKey — 提供客户托管的密钥详细信息,允许 SES 验证密钥。
-
kms: GenerateDataKey — 允许 SES 生成用于加密静态数据的数据密钥。
-
kms:Decrypt – 允许 SES 在将存储的数据返回给 API 客户端之前对其进行解密。
以下示例显示了典型的密钥策略:
{
"Sid": "Allow SES to encrypt/decrypt",
"Effect": "Allow",
"Principal": {
"Service": "ses.amazonaws.com"
},
"Action": [
"kms:GenerateDataKey",
"kms:Decrypt",
"kms:DescribeKey"
],
"Resource": "*"
},
有关更多信息,请参阅《AWS Key Management Service 开发人员指南》中的在策略中指定权限。
有关问题排查的更多信息,请参阅《AWS Key Management Service 开发人员指南》中的密钥访问问题排查。
为 Mail Manager 存档指定客户自主管理型密钥
您可以指定客户管理的密钥作为使用 AWS 自有密钥的替代方法。创建存档时,您可以通过输入 KMS 密钥 ARN 来指定数据密钥,Mail Manager 存档会使用该密钥来加密存档中的所有客户数据。
-
KMS 密钥 ARN: AWS KMS 客户自主管理型密钥的密钥标识符。输入密钥 ID、密钥 ARN、别名名称或别名 ARN。
Amazon SES 加密上下文
加密上下文是一组可选的键值对,包含有关数据的其他上下文信息。
AWS KMS 使用加密上下文作为其他经过身份验证的数据来支持经过身份验证的加密。当您在加密数据的请求中包含加密上下文时,会将加密上下文 AWS KMS 绑定到加密数据。要解密数据,您必须在请求中包含相同的加密上下文。
注意
Amazon SES 不支持用于存档创建的加密上下文。相反,您可以使用 IAM 或 KMS 策略。有关策略示例,请参阅本节后面的存档创建策略。
Amazon SES 加密上下文
SES 在所有 AWS KMS 加密操作中使用相同的加密上下文,其中密钥为aws:ses:arn
,值为资源 Amazon 资源名称 (ARN)。
"encryptionContext": {
"aws:ses:arn": "arn:aws:ses:us-west-2:111122223333:ExampleResourceName/ExampleResourceID"
}
使用加密上下文进行监控
使用对称的客户自主管理型密钥来加密您的 SES 资源时,您还可以使用审计记录和日志中的加密上下文,来识别客户自主管理型密钥的使用情况。加密上下文还会显示在AWS CloudTrail 或 Amazon Logs 生成的 CloudWatch 日志中。
使用加密上下文控制对客户托管式密钥的访问
您可以使用密钥策略和 IAM 策略中的加密上下文作为 conditions
来控制对您的对称客户托管密钥的访问。您还可以在授权中使用加密上下文约束。
SES 在授权中使用加密上下文约束来控制对您账户或区域中客户自主管理型密钥的访问。授权约束要求授权允许的操作使用指定的加密上下文。
以下是密钥政策声明示例,用于授予对特定加密上下文的客户托管密钥的访问权限。此策略语句中的条件要求授权具有指定加密上下文的加密上下文约束。
{
"Sid": "Enable DescribeKey",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:role/ExampleReadOnlyRole"
},
"Action": "kms:DescribeKey",
"Resource": "*"
},
{
"Sid": "Enable CreateGrant",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:role/ExampleReadOnlyRole"
},
"Action": "kms:CreateGrant",
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:EncryptionContext:aws:ses:arn": "arn:aws:ses:us-west-2:111122223333:ExampleResourceName/ExampleResourceID"
}
}
}
存档创建策略
以下策略示例演示了如何启用存档创建。这些策略适用于所有资产。
IAM 策略
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "ses:CreateArchive",
"Resource": [
"*"
]
},
{
"Effect": "Allow",
"Action": [
"kms:DescribeKey",
"kms:GenerateDataKey",
"kms:Decrypt"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:ViaService": "ses.us-east-1.amazonaws.com",
"kms:CallerAccount": "012345678910"
}
}
}
AWS KMS 策略
{
"Sid": "Allow SES to encrypt/decrypt",
"Effect": "Allow",
"Principal": {
"Service": "ses.amazonaws.com"
},
"Action": [
"kms:GenerateDataKey",
"kms:Decrypt",
"kms:DescribeKey"
],
"Resource": "*"
},
为 Amazon SES 监控您的加密密钥
当您将 AWS KMS 客户托管密钥与您的 Amazon SES 资源一起使用时,您可以使用AWS CloudTrail或 Amazon CloudWatch Logs 来跟踪 SES 发送到的请求 AWS KMS。
以下示例是GenerateDataKey
Decrypt
、和DescribeKey
监控 SES 为访问由您的客户托管密钥加密的数据而调用的 KMS 操作 AWS CloudTrail 的事件:
当您为资源启用 AWS KMS 客户托管密钥时,SES 会创建一个唯一的表密钥。它向发送GenerateDataKey
请求 AWS KMS ,指定资源的 AWS KMS客户托管密钥。
当您为 Mail Manager 存档资源启用 AWS KMS 客户托管密钥GenerateDataKey
时,它将在加密静态存档数据时使用。
以下示例事件记录了 GenerateDataKey
操作:
{
"eventVersion": "1.08",
"userIdentity": {
"type": "AWSService",
"invokedBy": "ses.amazonaws.com"
},
"eventTime": "2021-04-22T17:07:02Z",
"eventSource": "kms.amazonaws.com",
"eventName": "GenerateDataKey",
"awsRegion": "us-west-2",
"sourceIPAddress": "172.12.34.56",
"userAgent": "ExampleDesktop/1.0 (V1; OS)",
"requestParameters": {
"encryptionContext": {
"aws:ses:arn": "arn:aws:ses:us-west-2:111122223333:ExampleResourceName/ExampleResourceID"
},
"keySpec": "AES_256",
"keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
},
"responseElements": null,
"requestID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
"eventID": "ff000af-00eb-00ce-0e00-ea000fb0fba0SAMPLE",
"readOnly": true,
"resources": [
{
"accountId": "111122223333",
"type": "AWS::KMS::Key",
"ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE"
}
],
"eventType": "AwsApiCall",
"managementEvent": true,
"eventCategory": "Management",
"recipientAccountId": "111122223333",
"sharedEventID": "57f5dbee-16da-413e-979f-2c4c6663475e"
}
了解更多
以下资源提供有关静态数据加密的更多信息。
-
有关 AWS Key Management Service 基本概念的更多信息,请参阅 《AWS Key Management Service 开发人员指南》。
-
有关 AWS Key Management Service的安全最佳实操的更多信息,请参阅 《AWS Key Management Service 开发人员指南》。