控制对标签的访问 - AWS Key Management Service

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

控制对标签的访问

要在 AWS KMS 控制台中或通过使用 API 来添加、查看和删除标签,委托人需要标记权限。您可以在密钥策略中提供这些权限。您还可以在 IAM policy(包括 VPC 端点策略)中提供这些权限,但仅当密钥策略允许时。AWSKeyManagementServicePowerUser 托管策略允许委托人标记、取消标记和列出账户可以访问的所有 KMS 密钥上的标签。

您还可以通过将 AWS 全局条件键用于标签来限制这些权限。在 AWS KMS 中,这些条件可以控制对标记操作的访问,例如 TagResourceUntagResource

注意

请谨慎授予委托人管理标签和别名的权限。更改标签或别名可以允许或拒绝对客户托管密钥的权限。有关详细信息,请参阅 AWS KMS 中的 ABAC使用标签控制对 KMS 密钥的访问

有关示例策略和更多信息,请参阅 IAM 用户指南中的根据标签键控制访问

用于创建和管理标签的权限如下所示。

kms:TagResource

允许委托人添加或编辑标签。要在创建 KMS 密钥时添加标签,委托人必须在 IAM policy 中具有不限于特定 KMS 密钥的权限。

kms:ListResourceTags

允许委托人查看 KMS 密钥上的标签。

kms:UntagResource

允许委托人从 KMS 密钥中删除标签。

标记策略中的权限

您可以在密钥策略或 IAM policy 中提供权限标记。例如,以下示例密钥策略向选定用户授予标记 KMS 密钥的权限。它为所有可以担任示例管理员或开发人员角色的用户授予查看标签的权限。

{ "Version": "2012-10-17", "Id": "example-key-policy", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::111122223333:root"}, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow all tagging permissions", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::111122223333:user/LeadAdmin", "arn:aws:iam::111122223333:user/SupportLead" ]}, "Action": [ "kms:TagResource", "kms:ListResourceTags", "kms:UntagResource" ], "Resource": "*" }, { "Sid": "Allow roles to view tags", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::111122223333:role/Administrator", "arn:aws:iam::111122223333:role/Developer" ]}, "Action": "kms:ListResourceTags", "Resource": "*" } ] }

要授予委托人对多个 KMS 密钥的标记权限,您可以使用 IAM policy。为使此策略生效,每个 KMS 密钥的密钥策略都必须允许账户使用 IAM policy 来控制对 KMS 密钥的访问。

例如,以下 IAM policy 允许委托人创建 KMS 密钥。它还允许他们在指定账户中的所有 KMS 密钥上创建和管理标签。这种组合使委托人可以使用 CreateKey 操作的 Tags(标签)参数在他们创建 KMS 密钥时将标签添加到该密钥。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "IAMPolicyCreateKeys", "Effect": "Allow", "Action": "kms:CreateKey", "Resource": "*" }, { "Sid": "IAMPolicyTags", "Effect": "Allow", "Action": [ "kms:TagResource", "kms:UntagResource", "kms:ListResourceTags" ], "Resource": "arn:aws:kms:*:111122223333:key/*" } ] }

限制标签权限

您可以通过使用策略条件限制标记权限。以下策略条件可应用于 kms:TagResourcekms:UntagResource 权限。例如,您可以使用 aws:RequestTag/tag-key 条件来允许委托人仅添加特定标签,或阻止委托人添加具有特定标签键的标签。或者,您可以使用 kms:KeyOrigin 条件来防止委托人标记或取消标记具有导入密钥材料的 KMS 密钥。

作为使用标签控制对 KMS 密钥的访问的最佳实践,请使用 aws:RequestTag/tag-keyaws:TagKeys 条件键来确定允许哪些标签(或标签键)。

例如,以下 IAM policy 与上一个类似。但是,此策略允许主体为具有 Project 标签键的标签创建标签 (TagResource) 并删除标签 UntagResource

由于 TagResourceUntagResource 请求可以包含多个标签,您必须使用 aws:TagKeys 条件指定 ForAllValuesForAnyValue 集合运算符。ForAnyValue 运算符要求请求中至少有一个标签键与策略中的其中一个标签键匹配。ForAllValues 运算符要求请求中所有的标签键与策略中的其中一个标签键匹配。如果请求中没有标签,ForAllValues 运算符也会返回 true,但是当没有指定标签时,TagResource 和 UntagResource 将失败。有关集合运算符的详细信息,请参阅 IAM 用户指南中的使用多个键和值

{ "Version": "2012-10-17", "Statement": [ { "Sid": "IAMPolicyCreateKey", "Effect": "Allow", "Action": "kms:CreateKey", "Resource": "*" }, { "Sid": "IAMPolicyViewAllTags", "Effect": "Allow", "Action": "kms:ListResourceTags", "Resource": "arn:aws:kms:*:111122223333:key/*" }, { "Sid": "IAMPolicyManageTags", "Effect": "Allow", "Action": [ "kms:TagResource", "kms:UntagResource" ], "Resource": "arn:aws:kms:*:111122223333:key/*", "Condition": { "ForAllValues:StringEquals": {"aws:TagKeys": "Project"} } } ] }