本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 IAM policy 语句中指定 KMS 密钥
您可以使用 IAM policy 来允许委托人使用或管理 KMS 密钥。KMS 密钥在策略语句的 Resource
元素中指定。
-
要在 IAM policy 语句中指定 KMS 密钥,必须使用其密钥 ARN。您不能使用密钥 ID、别名名称或别名 ARN 来标识 IAM policy 语句中的 KMS 密钥。
例如:“
Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
”要根据别名控制对 KMS 密钥的访问权限,请使用 k ms: RequestAlias 或 k ms: ResourceAliases 条件密钥。有关详细信息,请参阅ABAC for AWS KMS。
仅在控制别名操作(例如、或)访问权限的策略声明中使用别名 ARN 作为CreateAlias资源。UpdateAliasDeleteAlias有关详细信息,请参阅控制对别名的访问。
-
要在账户和区域中指定多个 KMS 密钥,请在密钥 ARN 的区域或资源 ID 位置中使用通配符 (*)。
例如,要指定账户的美国西部(俄勒冈)区域中的所有 KMS 密钥,请使用“
Resource": "arn:aws:kms:us-west-2:111122223333:key/*
”。要指定账户的所有区域中的所有 KMS 密钥,请使用“Resource": "arn:aws:kms:*:111122223333:key/*
”。 -
要表示所有 KMS 密钥,请单独使用通配符 (
"*"
)。对于不使用任何特定 KMS 密钥(即、和)的操作 CreateKeyGenerateRandomListAliases,请使用此格式ListKeys。
在编写策略语句时,最佳实践是只指定委托人需要使用的 KMS 密钥,而不是授予他们对所有 KMS 密钥的访问权限。
例如,以下 IAM 策略声明仅允许委托人对策略声明Resource
元素中列出的 KMS 密钥调用DescribeKeyGenerateDataKey、、Decrypt 操作。通过密钥 ARN 指定 KMS 密钥是一种最佳实践,可确保权限仅限于指定的 KMS 密钥。
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "kms:DescribeKey", "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": [ "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321" ] } }
要将权限应用于特定可信对象中的所有 KMS 密钥 AWS 账户,可以在区域和密钥 ID 位置使用通配符 (*)。例如,以下策略语句允许委托人对两个可信示例账户的中的 KMS 密钥调用指定操作。
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "kms:DescribeKey", "kms:GenerateDataKey", "kms:GenerateDataKeyPair" ], "Resource": [ "arn:aws:kms:*:111122223333:key/*", "arn:aws:kms:*:444455556666:key/*" ] } }
您还可以单独在 Resource
元素中使用通配符 ("*"
)。由于它允许访问帐户有权使用的所有 KMS 密钥,因此建议主要用于没有特定 KMS 密钥的操作和 Deny
语句。您还可以在仅允许不太敏感的只读操作的策略语句中使用它。要确定某项 AWS KMS 操作是否涉及特定的 KMS 密钥,请在中表的 “资源” 列中查找 KMS 密钥值AWS KMS 权限。
例如,以下策略语句使用 Deny
效果来禁止委托人对任何 KMS 密钥使用指定的操作。它在 Resource
元素中使用通配符来表示所有 KMS 密钥。
{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": [ "kms:CreateKey", "kms:PutKeyPolicy", "kms:CreateGrant", "kms:ScheduleKeyDeletion" ], "Resource": "*" } }
以下策略语句单独使用通配符来表示所有 KMS 密钥。但它只允许不太敏感的只读操作和不适用于任何特定 KMS 密钥的操作。
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "kms:CreateKey", "kms:ListKeys", "kms:ListAliases", "kms:ListResourceTags" ], "Resource": "*" } }