使用标签控制对 KMS 密钥的访问 - AWS Key Management Service

使用标签控制对 KMS 密钥的访问

您可以基于 KMS 密钥上的标签控制对 AWS KMS keys 的访问权限。例如,您可以编写 IAM 策略,以允许委托人仅启用和禁用具有特定标签的 KMS 密钥。或者,您可以使用 IAM 策略防止委托人在加密操作中使用 KMS 密钥,除非 KMS 密钥具有特定标签。

此功能是 AWS KMS 对基于属性的访问控制 (ABAC) 的一部分。有关使用标签控制对 AWS 资源的访问的信息,请参阅 IAM 用户指南中的什么是适用于 AWS 的 ABAC?以及使用资源标签控制对 AWS 资源的访问。要获取有关解决与 ABAC 相关的访问问题的帮助,请参阅 适用于 AWS KMS 的 ABAC 的故障排除

注意

标签和别名的更改最多可能需要 5 分钟的时间才能影响 KMS 密钥授权。最近的更改可能会在 API 操作中显示,然后才会影响授权。

AWS KMS 支持 aws:ResourceTag/tag-key 全局条件上下文键,它允许您根据 KMS 密钥上的标签控制对 KMS 密钥的访问。由于多个 KMS 密钥可以具有相同的标签,此功能可使您将权限应用于一组选定的 KMS 密钥。您还可以通过更改 KMS 密钥的标签轻松更改集合中的 KMS 密钥。

在 AWS KMS 中,aws:ResourceTag/tag-key 条件键仅在 IAM 策略中受支持。它在密钥策略中不受支持,这些策略仅适用于一个 KMS 密钥,或者适用于不使用特定 KMS 密钥的操作,例如 ListKeysListAliases 操作。

使用标签控制访问提供了一种简单、可扩展且灵活的方式来管理权限。但是,如果设计和管理不当,它可能会无意中允许或拒绝对您的 KMS 密钥的访问。如果您使用标签来控制访问,请考虑以下做法。

  • 使用标签来强化最低权限访问的最佳实践。仅为 IAM 委托人授予他们对必须使用或管理的 KMS 密钥的所需权限。例如,使用标签来标记用于项目的 KMS 密钥。然后授予项目团队仅使用带有项目标签的 KMS 密钥的权限。

  • 谨慎为委托人提供 kms:TagResourcekms:UntagResource 权限,以允许他们添加、编辑和删除标签。当您使用标签控制对 KMS 密钥的访问时,更改标签可以授予委托人使用他们没有权限使用的 KMS 密钥的权限。它还可以拒绝对其他委托人执行其工作所需的 KMS 密钥的访问。不具有更改密钥策略或创建授权权限的密钥管理员可以控制对 KMS 密钥的访问,前提是他们有权管理标签。

    如有可能,请使用策略条件,例如 aws:RequestTag/tag-keyaws:TagKeys,以将委托人的标记权限限制为特定 KMS 密钥上的特定标签或标签模式。

  • 查看您的 AWS 账户 中当前具有标记和取消标记权限的委托人,并根据需要对其进行调整。例如,控制台密钥管理员的默认密钥策略包括对该 KMS 密钥的 kms:TagResourcekms:UntagResource 权限。IAM 策略可能允许对所有 KMS 密钥的标记和取消标记权限。例如,AWSKeyManagementServicePowerUser 托管策略允许委托人标记、取消标记和列出所有 KMS 密钥上的标签。

  • 在设置依赖于标签的策略之前,请查看您的 AWS 账户 中的 KMS 密钥上的标签。请确保您的策略仅适用于您要包含的标签。使用 CloudTrail 日志CloudWatch 告警以提示您可能会影响对您的 KMS 密钥的访问的标签更改。

  • 基于标签的策略条件使用模式匹配;它们不绑定到标签的特定实例。使用基于标签的条件键的策略会影响与模式匹配的所有新标签和现有标签。如果删除并重新创建与策略条件匹配的标签,则该条件将应用于新标签,就像对旧标签一样。

例如,请考虑以下 IAM 策略。它允许委托人仅对位于亚太地区(新加坡)区域且拥有 "Project"="Alpha" 标签的账户中的 KMS 密钥调用 GenerateDataKeyWithoutPlaintextDecrypt 操作。您可以将此策略附加到示例 Alpha 项目中的角色。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "IAMPolicyWithResourceTag", "Effect": "Allow", "Action": [ "kms:GenerateDataKeyWithoutPlaintext", "kms:Decrypt" ], "Resource": "arn:aws:kms:ap-southeast-1:111122223333:key/*", "Condition": { "StringEquals": { "aws:ResourceTag/Project": "Alpha" } } } ] }

以下示例 IAM 策略允许委托人使用账户中的 KMS 密钥执行特定加密操作。但它禁止主体对具有 "Type"="Reserved" 标签或不包含 "Type" 标签的 KMS 密钥使用这些加密操作。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "IAMAllowCryptographicOperations", "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:GenerateDataKey*", "kms:Decrypt", "kms:ReEncrypt*" ], "Resource": "arn:aws:kms:*:111122223333:key/*" }, { "Sid": "IAMDenyOnTag", "Effect": "Deny", "Action": [ "kms:Encrypt", "kms:GenerateDataKey*", "kms:Decrypt", "kms:ReEncrypt*" ], "Resource": "arn:aws:kms:*:111122223333:key/*", "Condition": { "StringEquals": { "aws:ResourceTag/Type": "Reserved" } } }, { "Sid": "IAMDenyNoTag", "Effect": "Deny", "Action": [ "kms:Encrypt", "kms:GenerateDataKey*", "kms:Decrypt", "kms:ReEncrypt*" ], "Resource": "arn:aws:kms:*:111122223333:key/*", "Condition": { "Null": { "aws:ResourceTag/Type": "true" } } } ] }