授予 AWS RDS 访问 KMS CMK 的最佳实践

问题描述

我使用的是使用位于同一 AWS 账户中的 KMS CMK 加密的 AWS RDS 数据库集群。

我的数据库集群似乎在认 KMS 策略下运行良好,但如果我没有特别授予它,我不确定 RDS 如何访问该密钥。

这是预期的最佳实践吗?还是我需要为 RDS 添加特定的策略?我有点担心我的集群可能缺少权限并且可能在未来某个时候停止工作。

解决方法

您似乎已经完成了这项工作,但如果您使用的是客户管理的 CMK,答案可能不完整。当您使用客户管理的 KMS CMK 时,您可以控制谁(什么)可以在 KMS 中使用您的 CMK。例如,如果你在你的CMK Key Policy中为kms:creategrant所有原则明确拒绝并重启数据库,你会发现数据库无法启动,因为它无法加载数据。 (如果您进行此类测试,请确保使用单可用区,因为多可用区在您重新启动时将准备好热故障转移)。默认情况下,密钥策略启用对 IAM 的委派,因此您可以在 IAM 中管理对密钥的访问,但这不是必需的。您可以细粒度地控制对客户托管 CMK 中的 creategrant 等项目的访问。您甚至可以使用加密上下文的条件来授予某些服务并拒绝其他服务,甚至是特定的 rds 实例或 ebs 卷:https://docs.aws.amazon.com/kms/latest/developerguide/services-rds.html

有关 RDS 和支持的加密类型的更多信息,请参见此处。 https://aws.amazon.com/blogs/database/securing-data-in-amazon-rds-using-aws-kms-encryption/

此外,请参阅此处了解使用 EBS 加密所需的内容,即 RDS 用于存储的内容:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#ebs-encryption-requirements

,

原来不需要添加特定的策略来允许RDS访问KMS。

RDS 通过创建数据库集群的实体授予的权限获得对密钥的访问权限。

您可以通过运行以下命令查看授权列表:

aws kms list-grants --key-id yourkey

这是我找到此信息的来源的链接: https://www.reddit.com/r/aws/comments/f17a25/rds_and_kms_access_a_follow_up/