

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

# Amazon SES 的静态数据加密
<a name="encryption-rest"></a>

默认情况下，Amazon SES 会加密所有静态数据。默认加密有助于降低保护数据的操作开销和复杂性。加密还支持创建符合严格加密合规性和法规要求的 Mail Manager 存档。

SES 提供以下加密选项：
+ **AWS 自有密钥** — SES 默认使用这些密钥。您无法查看、管理或使用 AWS 自有密钥，也无法审核其使用情况。但是，无需采取任何措施或更改任何计划即可保护用于加密数据的密钥。有关更多信息，请参阅 *AWS Key Management Service 开发人员指南*中的 [AWS 自有密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk)。
+ **客户自主管理型密钥**：SES 支持使用由您自己创建、拥有和管理的对称客户自主管理型密钥。由于您可以完全控制此加密，因此可以执行以下任务：
  + 制定和维护关键策略
  + 建立和维护 IAM 策略和授权
  + 启用和禁用密钥策略
  + 轮换加密材料
  + 添加 标签
  + 创建密钥别名
  + 安排密钥删除

  要使用您自己的密钥，请在创建 SES 资源时选择客户自主管理型密钥。

  有关更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的[客户托管密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。

**注意**  
SES 使用 AWS 自有密钥自动启用静态加密，不收取任何费用。  
但是，使用客户管理的密钥需要 AWS KMS 付费。有关定价的更多信息，请参阅 [AWS Key Management Service 定价](https://aws.amazon.com/kms/pricing/)。

## 创建客户托管密钥
<a name="create-key"></a>

 您可以使用 AWS 管理控制台、或，创建对称的客户托管密钥。 AWS KMS APIs

**创建对称的客户托管密钥**

请按照《AWS Key Management Service 开发人员指南》**中[创建对称加密 KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk)的步骤操作。

**注意**  
对于存档，您的密钥必须满足以下要求：  
密钥必须是对称的。
密钥材料来源必须是 `AWS_KMS`。
密钥的用法必须是 `ENCRYPT_DECRYPT`。

**密钥策略**

密钥策略控制对客户自主管理型密钥的访问。每个客户托管式密钥必须只有一个密钥策略，其中包含确定谁可以使用密钥以及如何使用密钥的声明。创建客户托管式密钥时，可以指定密钥策略。有关更多信息，请参阅**《AWS Key Management Service 开发人员指南》中的[管理对客户托管密钥的访问](https://docs.aws.amazon.com/kms/latest/developerguide/control-access-overview.html#managing-access)。

要将客户自主管理型密钥与 Mail Manager 存档一起使用，您的密钥策略必须允许以下 API 操作：
+ [kms: DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) — 提供客户托管的密钥详细信息，允许 SES 验证密钥。
+ kms[: GenerateDataKey — 允许 SES](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) 生成用于加密静态数据的数据密钥。
+ [kms:Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)：允许 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 开发人员指南》**中的[在策略中指定权限](https://docs.aws.amazon.com/kms/latest/developerguide/control-access-overview.html#overview-policy-elements)。

有关问题排查的更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的[密钥访问问题排查](https://docs.aws.amazon.com/kms/latest/developerguide/policy-evaluation.html#example-no-iam)。

## 为邮件管理器指定客户管理的密钥
<a name="enable-custom-encryption"></a>

您可以指定客户管理的密钥作为使用 AWS 自有密钥的替代方法。在创建档案或使用双向 TLS (mTLS) 身份验证配置入口终端节点时，您可以通过输入 **KMS 密钥 AR** N 来指定数据密钥。对于存档，Mail Manager 使用密钥对存档中的所有客户数据进行加密。对于 mTLS 入口端点，Mail Manager 使用密钥对信任存储的静态内容进行加密。
+ **KMS 密钥 ARN** — AWS KMS 客户托管[密钥的密钥标识符](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id)。输入密钥 ID、密钥 ARN、别名名称或别名 ARN。

## Amazon SES 加密上下文
<a name="location-encryption-context"></a>

[加密上下文](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context)是一组可选的键值对，包含有关数据的其他上下文信息。

AWS KMS 使用加密上下文作为其他经过身份验证的数据来支持经过身份验证的加密。当您在加密数据的请求中包含加密上下文时，会将加密上下文 AWS KMS 绑定到加密数据。要解密数据，您必须在请求中包含相同的加密上下文。

**注意**  
Amazon SES 不支持用于存档创建的加密上下文。相反，您可以使用 IAM 或 KMS 策略。有关策略示例，请参阅本节后面的[存档创建策略](#archive-creation-policies)。

**Amazon SES 加密上下文**

SES 在所有 AWS KMS 加密操作中使用相同的加密上下文，其中密钥为`aws:ses:arn`，值为资源 [Amazon 资源名称](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) (ARN)。

**Example**  

```
"encryptionContext": {
    "aws:ses:arn": "arn:aws:ses:us-west-2:111122223333:ExampleResourceName/ExampleResourceID"
}
```

**使用加密上下文进行监控**

使用对称的客户自主管理型密钥来加密您的 SES 资源时，您还可以使用审计记录和日志中的加密上下文，来识别客户自主管理型密钥的使用情况。加密上下文还会显示在[AWS CloudTrail 或 Amazon Logs 生成的 CloudWatch 日志](#example-custom-encryption)中。

**使用加密上下文控制对客户托管式密钥的访问**

您可以使用密钥策略和 IAM 策略中的加密上下文作为 `conditions` 来控制对您的对称客户托管密钥的访问。您还可以在授权中使用加密上下文约束。

SES 在授权中使用加密上下文约束来控制对您账户或区域中客户自主管理型密钥的访问。授权约束要求授权允许的操作使用指定的加密上下文。

**Example**  
以下是密钥策略声明示例，用于授予对特定加密上下文的客户托管密钥的访问权限。此策略语句中的条件要求授权具有指定加密上下文的加密上下文约束。  

```
{
    "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"
          }
     }
}
```

## 存档创建策略
<a name="archive-creation-policies"></a>

以下策略示例演示了如何启用存档创建。这些策略适用于所有资产。

**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": "*"
        },
```

## 入口端点 mTLS 策略
<a name="ingress-endpoint-mtls-policies"></a>

以下示例策略允许使用客户托管密钥加密信任存储内容，以便在 Mail Manager 入口端点上进行双向 TLS (mTLS) 身份验证。

要将示例策略的范围限定为特定的入口端点，请将条件中的通配符替换为精确的资源 ARN（例如）。`arn:aws:ses:us-east-1:111122223333:mailmanager-ingress-point/inp-ab1c2defgh3ij4klmno5pq6rs`

**IAM 策略**

```
{
    "Effect": "Allow",
    "Principal": {
      "AWS": "arn:aws:iam::111122223333:role/rolename"
    },
    "Action": [
      "kms:GenerateDataKey",
      "kms:Decrypt"
    ],
    "Resource": "*",
    "Condition": {
      "StringEquals": {
        "kms:ViaService": "ses.us-east-1.amazonaws.com"
      },
      "StringLike": {
        "kms:EncryptionContext:aws:ses:arn": [
          "arn:aws:ses:us-east-1:111122223333:mailmanager-ingress-point/*"
        ]
      }
    }
  },
  {
    "Effect": "Allow",
    "Principal": {
      "AWS": "arn:aws:iam::111122223333:role/rolename"
    },
    "Action": [
      "kms:DescribeKey"
    ],
    "Resource": "*",
    "Condition": {
      "StringEquals": {
        "kms:ViaService": "ses.us-east-1.amazonaws.com"
      }
    }
  }
```

**AWS KMS 策略**

```
{
    "Effect": "Allow",
    "Principal": {
      "Service": "ses.amazonaws.com"
    },
    "Action": [
      "kms:Decrypt"
    ],
    "Resource": "*",
    "Condition": {
      "StringLike": {
        "aws:SourceArn": [
          "arn:aws:ses:us-east-1:111122223333:mailmanager-ingress-point/*"
        ],
        "kms:EncryptionContext:aws:ses:arn": [
          "arn:aws:ses:us-east-1:111122223333:mailmanager-ingress-point/*"
        ]
      }
    }
  },
  {
    "Effect": "Allow",
    "Principal": {
      "Service": "ses.amazonaws.com"
    },
    "Action": [
      "kms:DescribeKey"
    ],
    "Resource": "*",
    "Condition": {
      "StringLike": {
        "aws:SourceArn": [
          "arn:aws:ses:us-east-1:111122223333:mailmanager-ingress-point/*"
        ]
      }
    }
  }
```

## 为 Amazon SES 监控您的加密密钥
<a name="example-custom-encryption"></a>

当您将 AWS KMS 客户托管密钥与 Amazon SES 资源一起使用时，您可以使用[AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)或 [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) 来跟踪 SES 发送到的请求 AWS KMS。

以下示例是`GenerateDataKey``Decrypt`、和`DescribeKey`监控 SES 为访问由您的客户托管密钥加密的数据而调用的 KMS 操作 AWS CloudTrail 的事件：

------
#### [ GenerateDataKey ]

当您为资源启用 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"
}
```

------
#### [ Decrypt ]

当您访问加密的资源时，SES 会调用 `Decrypt` 操作，以使用存储的加密数据密钥来访问加密数据。

以下示例事件记录了 `Decrypt` 操作：

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AWSService",
        "invokedBy": "ses.amazonaws.com"
    },
    "eventTime": "2021-04-22T17:10:51Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Decrypt",
    "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"
        },
        "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-123456SAMPLE",
        "encryptionAlgorithm": "SYMMETRIC_DEFAULT"
    },
    "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": "dc129381-1d94-49bd-b522-f56a3482d088"
}
```

------
#### [ DescribeKey ]

SES 使用 `DescribeKey` 操作来验证与您的资源关联的 AWS KMS 客户自主管理型密钥是否存在于账户和区域中。

以下示例事件记录了 `DescribeKey` 操作：

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01",
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
        "accountId": "111122223333",
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE3",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROAIGDTESTANDEXAMPLE:Sampleuser01",
                "arn": "arn:aws:sts::111122223333:assumed-role/Admin/Sampleuser01",
                "accountId": "111122223333",
                "userName": "Admin"
            },
            "webIdFederationData": {},
            "attributes": {
                "mfaAuthenticated": "false",
                "creationDate": "2021-04-22T17:02:00Z"
            }
        },
        "invokedBy": "ses.amazonaws.com"
    },
    "eventTime": "2021-04-22T17:07:02Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "DescribeKey",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "172.12.34.56",
    "userAgent": "ExampleDesktop/1.0 (V1; OS)",
    "requestParameters": {
        "keyId": "00dd0db0-0000-0000-ac00-b0c000SAMPLE"
    },
    "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"
}
```

------

## 了解详情
<a name="Learn-more-data-at-rest-encryption"></a>

以下资源提供有关静态数据加密的更多信息。
+ 有关 [AWS Key Management Service 基本概念](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html)的更多信息，请参阅 **《AWS Key Management Service 开发人员指南》。
+ 有关 [AWS Key Management Service的安全最佳实操](https://docs.aws.amazon.com/kms/latest/developerguide/best-practices.html)的更多信息，请参阅 **《AWS Key Management Service 开发人员指南》。