AWS KMS key 管理 - Amazon Relational Database Service

AWS KMS key 管理

Amazon RDS 自动与 AWS Key Management Service(AWS KMS)集成以进行密钥管理。Amazon RDS 使用信封加密。有关信封加密的更多信息,请参阅 AWS Key Management Service 开发人员指南中的信封加密

您可以使用两种类型的 AWS KMS 密钥来加密数据库实例

  • 要完全控制 KMS 密钥,您必须创建客户托管式密钥。有关客户托管密钥的更多信息,请参阅 AWS Key Management Service 开发人员指南中的客户托管密钥

    如果快照已使用共享该快照的 AWS 托管式密钥 账户的 AWS 进行加密,则您无法共享该快照。

  • AWS 托管式密钥 是由与 AWS KMS集成的 AWS 服务代表您在账户中创建、管理和使用的 KMS 密钥。原定设置情况下,RDS AWS 托管式密钥(aws/rds)用于加密。您无法管理、轮换或删除 RDS AWS 托管式密钥。有关 AWS 托管式密钥 的更多信息,请参阅 AWS Key Management Service 开发人员指南中的 AWS 托管式密钥

要管理用于 Amazon RDS 加密数据库实例的 KMS 密钥,您可以使用 AWS KMS 控制台中的 AWS Key Management Service(AWS KMS)、AWS CLI 或 AWS KMS API。要查看利用 AWS 托管式或客户托管式密钥执行的每个操作的审计日志,请使用 AWS CloudTrail。有关密钥轮换的更多信息,请参阅轮换 AWS KMS 密钥

重要

如果您关闭或撤消对于 RDS 数据库使用的 KMS 密钥的权限,则在需要访问 KMS 密钥时,RDS 会将数据库置于最终状态。根据需要访问 KMS 密钥的使用案例,此更改可能是立即或延迟的。在此状态下,数据库实例不再可用,并且数据库的当前状态无法恢复。要还原数据库实例,您必须重新启用对 RDS 的 KMS 密钥的访问,然后从最新的可用备份中还原数据库实例

授权使用客户托管密钥

RDS 在加密操作中使用客户托管式密钥时,其代表创建或更改 RDS 资源的用户执行操作。

要使用客户托管式密钥创建 RDS 资源,用户必须具有对客户托管式密钥调用以下操作的权限:

  • kms:CreateGrant

  • kms:DescribeKey

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

您可以通过各种方式使 IAM 策略更严格。例如,如果您要允许将客户托管式密钥仅用于源自 RDS 的请求,可将 kms:ViaService 条件密钥rds.<region>.amazonaws.com 值结合使用。此外,您可以使用Amazon RDS 加密上下文中的密钥或值作为使用客户托管式密钥进行加密的条件。

有关更多信息,请参阅《AWS Key Management Service 开发人员指南》中的允许其他账户中的用户使用 KMS 密钥AWS KMS 中的密钥策略

Amazon RDS 加密上下文

RDS 使用您的 KMS 密钥时,或者当 Amazon EBS 代表 RDS 使用 KMS 密钥时,服务会指定加密上下文。加密上下文是 AWS KMS 用于确保数据完整性而使用的额外的身份验证数据 (AAD)。在为加密操作指定加密上下文时,该服务必须为解密操作指定同一加密上下文。否则,解密将失败。加密上下文还将写至您的 AWS CloudTrail 日志中,以帮助您了解为什么使用给定的 KMS 密钥。您的 CloudTrail 日志可能包含多个描述 KMS 密钥使用情况的条目,但每个日志条目中的加密上下文可以帮助您确定该特定使用的原因。

至少,Amazon RDS 始终将数据库实例 ID 用于加密上下文,如以下 JSON 格式的示例所示:

{ "aws:rds:db-id": "db-CQYSMDPBRZ7BPMH7Y3RTDG5QY" }

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

当您的 KMS 密钥用于特定的数据库实例和特定的 Amazon EBS 卷时,数据库实例 ID 和 Amazon EBS 卷 ID 用于加密上下文,如以下 JSON 格式的示例所示:

{ "aws:rds:db-id": "db-BRG7VYS3SVIFQW7234EJQOM5RQ", "aws:ebs:id": "vol-ad8c6542" }