

# AWS KMS key 管理
<a name="Overview.Encryption.Keys"></a>

 Amazon Aurora 自动与 [AWS Key Management Service（AWS KMS）](https://docs.aws.amazon.com/kms/latest/developerguide/)集成以进行密钥管理。Amazon Aurora 使用信封加密。有关信封加密的更多信息，请参阅 *AWS Key Management Service 开发人员指南*中的[信封加密](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#enveloping)。

您可以使用两种类型的 AWS KMS 密钥来加密数据库集群。
+ 要完全控制 KMS 密钥，您必须创建*客户托管密钥*。有关客户托管密钥的更多信息，请参阅 *AWS Key Management Service 开发人员指南*中的[客户托管密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)。
+  *AWS 托管式密钥* 是由与 AWS KMS 集成的 AWS 服务代表您在账户中创建、管理和使用的 KMS 密钥。默认情况下，RDS AWS 托管式密钥（`aws/rds`）用于加密。您无法管理、轮换或删除 RDS AWS 托管式密钥。有关 AWS 托管式密钥 的更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的 [AWS 托管式密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk)。

要管理用于 Amazon Aurora 加密数据库集群的 KMS 密钥，您可以使用 [AWS KMS 控制台](https://console.aws.amazon.com/kms)中的 [AWS Key Management Service（AWS KMS）](https://docs.aws.amazon.com/kms/latest/developerguide/)、AWS CLI 或 AWS KMS API。要查看利用 AWS 托管式或客户托管密钥执行的每个操作的审计日志，请使用 [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/)。有关密钥轮换的更多信息，请参阅[轮换 AWS KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html)。

## 授权使用客户托管密钥
<a name="Overview.Encryption.Keys.Authorizing"></a>

Aurora 在加密操作中使用客户自主管理型密钥时，其代表创建或更改 Aurora 资源的用户执行操作。

要使用客户自主管理型密钥创建 Aurora 资源，用户必须具有对客户自主管理型密钥调用以下操作的权限：
+  `kms:CreateGrant` 
+  `kms:DescribeKey` 

您可以在密钥策略中指定这些所需权限，或者在密钥策略允许的情况下在 IAM 策略中指定这些权限。

**重要**  
当您在 Amazon RDS 等托管式服务的 AWS KMS 密钥策略中对所有资源（\$1）使用显式拒绝语句时，您必须指定一个条件来支持拥有资源的账户。如果没有此条件，操作可能会失败，即使拒绝规则中包含针对您的 IAM 用户的例外情况也是如此。

**提示**  
为遵循最小特权原则，请不要允许对 `kms:CreateGrant` 拥有完全访问权限。而是仅当 AWS 服务代表用户创建授权时，才使用 [kms:ViaService 条件密钥](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service)来支持用户对 KMS 密钥创建授权。

您可以通过各种方式使 IAM 策略更严格。例如，如果您要支持将客户自主管理型密钥仅用于源自 Aurora 的请求，请将 [kms:ViaService 条件密钥](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service)与 `rds.<region>.amazonaws.com` 值结合使用。此外，您可以使用[Amazon RDS 加密上下文](#Overview.Encryption.Keys.encryptioncontext)中的密钥或值作为使用客户托管密钥进行加密的条件。

有关更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的[允许其他账户中的用户使用 KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html)和 [AWS KMS 中的密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies)。

## Amazon RDS 加密上下文
<a name="Overview.Encryption.Keys.encryptioncontext"></a>

当 Aurora 使用您的 KMS 密钥时，或者当 Amazon EBS 代表 Aurora 使用 KMS 密钥时，服务会指定[加密上下文](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context)。加密上下文是 AWS KMS 用于确保数据完整性而使用的[额外的身份验证数据](https://docs.aws.amazon.com/crypto/latest/userguide/cryptography-concepts.html#term-aad) (AAD)。在为加密操作指定加密上下文时，该服务必须为解密操作指定同一加密上下文。否则，解密将失败。加密上下文还将写至您的 [AWS CloudTrail](https://aws.amazon.com/cloudtrail/) 日志中，以帮助您了解为什么使用给定的 KMS 密钥。您的 CloudTrail 日志可能包含多个描述 KMS 密钥使用情况的条目，但每个日志条目中的加密上下文可以帮助您确定该特定使用的原因。

至少，Aurora 始终将数据库集群 ID 用于加密上下文，如以下 JSON 格式的示例所示：

```
{ "aws:rds:dbc-id": "cluster-CQYSMDPBRZ7BPMH7Y3RTDG5QY" }
```

此加密上下文可以帮助您确定使用您的 KMS 密钥的数据库集群。

当您的 KMS 密钥用于特定的数据库集群和特定的 Amazon EBS 卷时，数据库集群 ID 和 Amazon EBS 卷 ID 将用于加密上下文，如以下 JSON 格式的示例所示：

```
{
  "aws:rds:dbc-id": "cluster-BRG7VYS3SVIFQW7234EJQOM5RQ",
  "aws:ebs:id": "vol-ad8c6542"
}
```