本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用标签控制对KMS密钥的访问
您可以 Amazon KMS keys 根据KMS密钥上的标签控制对的访问权限。例如,您可以编写一个IAM策略,允许委托人仅启用和禁用带有特定标签的KMS密钥。或者,您可以使用IAM策略来防止委托人在加密操作中使用KMS密钥,除非密KMS钥有特定的标签。
此功能是对基于属性的访问控制 () ABAC 的 Amazon KMS 支持的一部分。有关使用标签控制 Amazon 资源访问权限的信息,请参阅ABAC用途是什么 Amazon? 以及《IAM用户指南》中的 “使用 Amazon 资源标签控制对资源的访问”。有关解决与之相关的访问问题的帮助ABAC,请参阅适用于 Amazon KMS 的 ABAC 的故障排除。
注意
标签和别名更改最多可能需要五分钟才能影响KMS密钥授权。最近发生的更改可能会在API操作中显现出来,然后才会影响授权。
Amazon KMS 支持 aws:ResourceTag/tag-key 全局条件上下文密钥,它允许您根据KMS密钥上的标签控制对密钥的KMS访问。由于多个KMS密钥可以具有相同的标签,因此此功能允许您将权限应用于一组选定的KMS密钥。您还可以通过更改KMS密钥的标签来轻松更改密钥组中的密钥。
在中 Amazon KMS,只有IAM策略支持aws:ResourceTag/tag-key
条件密钥。密钥策略(仅适用于一个密KMS钥)或不使用特定密KMS钥的操作(例如ListKeys或ListAliases操作)不支持它。
使用标签控制访问提供了一种简单、可扩展且灵活的方式来管理权限。但是,如果设计和管理不当,它可能会在无意中允许或拒绝访问您的KMS密钥。如果您使用标签来控制访问,请考虑以下做法。
-
使用标签来强化最低权限访问的最佳实践。仅向IAM委托人提供他们必须使用或管理的KMS密钥所需的权限。例如,使用标签来标记用于项目的KMS密钥。然后授予项目团队仅使用带有项目标签的KMS密钥的权限。
-
谨慎为主体提供
kms:TagResource
和kms:UntagResource
权限,以允许他们添加、编辑和删除标签。当你使用标签来控制对KMS密钥的访问时,更改标签可以允许委托人使用他们原本无权使用的KMS密钥。它还可能拒绝访问其他委托人完成工作所需的KMS密钥。无权更改密钥策略或创建授权的密钥管理员如果有权管理标签,则可以控制对KMS密钥的访问权限。尽可能使用策略条件,例如
aws:RequestTag/tag-key
或,aws:TagKeys
将委托人的标记权限限制为特定标签或特定KMS密钥上的标签模式。 -
查看您中当前拥有标记和取消标记权限 Amazon Web Services 账户 的委托人,并在必要时对其进行调整。例如,密钥管理员的控制台默认密钥策略包括
kms:TagResource
该KMS密钥的kms:UntagResource
权限。 IAM策略可能允许对所有KMS密钥使用标记和取消标记权限。例如,AWSKeyManagementServicePowerUser托管策略允许委托人对所有KMS密钥进行标记、取消标记和列出标签。 -
在设置依赖于标签的策略之前,请查看您的KMS密钥上的标签 Amazon Web Services 账户。请确保您的策略仅适用于您要包含的标签。使用CloudTrail 日志和CloudWatch 警报提醒您注意可能影响KMS密钥访问权限的标记更改。
-
基于标签的策略条件使用模式匹配;它们不绑定到标签的特定实例。使用基于标签的条件键的策略会影响与模式匹配的所有新标签和现有标签。如果删除并重新创建与策略条件匹配的标签,则该条件将应用于新标签,就像对旧标签一样。
例如,考虑以下IAM政策。它允许委托人仅对您账户中位于亚太(新加坡)地区且有标签的KMS密钥调用和解密操作。GenerateDataKeyWithoutPlaintext"Project"="Alpha"
您可以将此策略附加到示例 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" } } } ] }