在 IAM 策略语句中指定 CMK - AWS Key Management Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

在 IAM 策略语句中指定 CMK

您可以使用 IAM 策略允许委托人使用或管理 CMK。CMK 在Resource元素。

  • 要在 IAM 策略语句中指定 CMK,必须使用其密钥 ARN。您无法使用密钥 ID别名,或者别名 ARN在 IAM 策略语句中标识 CMK。

    例如:"Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"

    要根据 CMK 别名控制对其访问,请使用KMS: 请求别名或者KMS: 资源别名条件键。有关详细信息,请参阅 使用适用于 AWS KMS 的 ABAC

    仅在控制别名操作访问的策略语句中使用别名 ARN 作为资源,例如CreateAliasUpdateAlias,或者DeleteAlias。有关详细信息,请参阅 控制对别名的访问

  • 要在账户和区域中指定多个 CMK,请在密钥 ARN 的区域或资源 ID 位置中使用通配符 (*)。

    例如,要指定账户的美国西部(俄勒冈)区域的所有 CMK,请使用”Resource": "arn:aws:kms:us-west-2:111122223333:key/*“。要指定账户的所有区域中的所有 CMK,请使用”Resource": "arn:aws:kms:*:111122223333:key/*“。

  • 要表示所有 CMK,请单独使用通配符 ("*")。将此格式用于不使用任何特定 CMK 的操作,即CreateKeyGenerateRandomListAliases, 和ListKeys

在编写策略声明时,它是一个最佳实践只指定委托人需要使用的 CMK,而不是授予他们访问所有 CMK 的权限。

例如,以下 IAM 策略语句允许委托人调用DescribeKeyGenerateDataKeyDecrypt操作仅在Resource元素。通过键 ARN 指定 CMK(这是一种最佳做法)可确保权限仅限于指定的 CMK。

{ "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" ] } }

要将权限应用于特定受信任 AWS 账户中的所有 CMK,您可以在区域和密钥 ID 位置中使用通配符 (*)。例如,以下策略语句允许委托人在两个受信任示例帐户中对所有 CMK 调用指定操作。

{ "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元素。由于它允许访问账户有权使用的所有 CMK,因此建议主要用于不涉及特定 CMK 的操作,以及Deny语句。您还可以在仅允许不太敏感的只读操作的策略语句中使用它。要确定 AWS KMS 操作是否涉及特定 CMK,请查找CMK资源列中的表格AWS KMS 权限

例如,以下策略语句使用Deny效果来禁止委托人在任何 CMK 上使用指定的操作。它在Resource元素来表示所有 CMK。

{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": [ "kms:CreateKey", "kms:PutKeyPolicy", "kms:CreateGrant", "kms:ScheduleKeyDeletion" ], "Resource": "*" } }

以下策略语句仅使用通配符来表示所有 CMK。但它只允许不太敏感的只读操作和不适用于任何特定 CMK 的操作。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "kms:CreateKey", "kms:ListKeys", "kms:ListAliases", "kms:ListResourceTags" ], "Resource": "*" } }