IAM 策略示例 - AWS Key Management Service

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

IAM 策略示例

在此部分中,可以找到允许执行各种 AWS KMS 操作的权限的示例 IAM policy。

重要

仅当 KMS 密钥的密钥策略也允许时,才允许提供以下策略中的某些权限。有关更多信息,请参阅 权限参考

有关编写和格式化 JSON 策略文档的帮助,请参阅 IAM 用户指南中的 IAM JSON 策略参考

允许用户在 AWS KMS 控制台中查看 KMS 密钥

以下 IAM 策略允许用户以只读方式访问 AWS KMS 控制台。拥有这些权限的用户可以查看其中的所有 KMS 密钥 AWS 账户,但他们无法创建或更改任何 KMS 密钥。

要在AWS 托管式密钥客户托管密钥页面上查看 K MS 密钥,即使密钥没有标签或别名ListAliases,委托人也需要 k m s:、kms: 和 tag: GetResources 权限。ListKeys在 KMS 密钥详细信息页面上查看可选的 KMS 密钥表列和数据需要其余权限,尤其是 kms: DescribeKey。需要 ia m: ListUsers 和 ia ListRoles m: 权限才能在默认视图中毫无错误地显示密钥策略。要查看自定义密钥存储库页面上的数据以及自定义密钥存储库中 KMS 密钥的详细信息,委托人还需要 k ms: DescribeCustomKeyStores 权限。

如果您限制用户的控制台对特定 KMS 密钥的访问,控制台将显示不可见的每个 KMS 密钥的错误。

此策略包含两个策略语句。第一个策略语句中的 Resource 元素允许对示例 AWS 账户的所有区域中的所有 KMS 密钥的指定权限。控制台查看器不需要额外的访问权限,因为 AWS KMS 控制台仅显示委托人账户中的 KMS 密钥。即使他们有权在其他版本中查看 KMS 密钥,也是如此 AWS 账户。其余 AWS KMS 和 IAM 权限需要一个"Resource": "*"元素,因为它们不适用于任何特定的 KMS 密钥。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadOnlyAccessForAllKMSKeysInAccount", "Effect": "Allow", "Action": [ "kms:GetPublicKey", "kms:GetKeyRotationStatus", "kms:GetKeyPolicy", "kms:DescribeKey", "kms:ListKeyPolicies", "kms:ListResourceTags", "tag:GetResources" ], "Resource": "arn:aws:kms:*:111122223333:key/*" }, { "Sid": "ReadOnlyAccessForOperationsWithNoKMSKey", "Effect": "Allow", "Action": [ "kms:ListKeys", "kms:ListAliases", "iam:ListRoles", "iam:ListUsers" ], "Resource": "*" } ] }

允许用户创建 KMS 密钥

以下 IAM policy 允许用户创建所有类型的 KMS 密钥。该Resource元素的值*是因为该CreateKey操作不使用任何特定的 AWS KMS 资源(KMS 密钥或别名)。

要限制用户使用特定类型的 KMS 密钥,请使用 k ms: KeySpeckms: KeyUsage 和 k ms: KeyOrigin 条件密钥。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "kms:CreateKey", "Resource": "*" } }

创建密钥的委托人可能需要一些相关权限。

  • kms: PutKeyPolicy — 拥有kms:CreateKey权限的委托人可以为 KMS 密钥设置初始密钥策略。但是,CreateKey调用者必须拥有 k ms: PutKeyPolicy 权限,允许他们更改 KMS 密钥策略,或者必须指定BypassPolicyLockoutSafetyCheck参数CreateKey,但不建议这样做。CreateKey 调用方可以从 IAM policy 中获得对 KMS 密钥的 kms:PutKeyPolicy 权限,也可以将此权限包含在他们正在创建的 KMS 密钥的密钥策略中。

  • kms: TagResource — 要在CreateKey操作期间向 KMS 密钥添加标签,CreateKey调用者必须在 IAM 策略中TagResource拥有 kms: 权限。将此权限包含在新 KMS 密钥的密钥策略中是不够的。但是,如果 CreateKey 调用方在初始密钥策略中包括 kms:TagResource,他们可以在创建 KMS 密钥后在单独调用中添加标签。

  • kms: CreateAlias — 在 AWS KMS 控制台中创建 KMS 密钥的委托人必须对 KMS 密钥和别名拥有 kms: CreateAlias 权限。(控制台进行两次调用;一次对 CreateKey,一次对 CreateAlias)。您必须在 IAM policy 中提供别名权限。您可以在密钥策略或 IAM policy 中提供 KMS 密钥权限。有关更多信息,请参阅 控制对别名的访问

此外kms:CreateKey,以下 IAM 策略提供kms:TagResource对中所有 KMS 密钥的kms:CreateAlias权限 AWS 账户 以及对账户所有别名的权限。它还包括一些只能在 IAM policy 中提供的有用的只读权限。

此 IAM policy 不包含 kms:PutKeyPolicy 权限或可以在密钥策略中设置的任何其他权限。它是在密钥策略中设置这些权限的最佳实践,在该密钥策略中,这些权限专门应用于一个 KMS 密钥。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "IAMPermissionsForParticularKMSKeys", "Effect": "Allow", "Action": "kms:TagResource", "Resource": "arn:aws:kms:*:111122223333:key/*" }, { "Sid": "IAMPermissionsForParticularAliases", "Effect": "Allow", "Action": "kms:CreateAlias", "Resource": "arn:aws:kms:*:111122223333:alias/*" }, { "Sid": "IAMPermissionsForAllKMSKeys", "Effect": "Allow", "Action": [ "kms:CreateKey", "kms:ListKeys", "kms:ListAliases" ], "Resource": "*" } ] }

允许用户使用特定 KMS 密钥进行加密和解密 AWS 账户

以下 IAM 策略允许用户使用 111122223333 中的 AWS 账户 任何 KMS 密钥加密和解密数据。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt" ], "Resource": "arn:aws:kms:*:111122223333:key/*" } }

允许用户使用特定 AWS 账户 和区域中的任何 KMS 密钥进行加密和解密

以下 IAM 策略允许用户使用美国西部(俄勒冈)地区的任何 KMS 密钥加密和解密数据。 AWS 账户 111122223333

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt" ], "Resource": [ "arn:aws:kms:us-west-2:111122223333:key/*" ] } }

允许用户使用特定 KMS 密钥进行加密和解密

以下 IAM policy 允许用户使用 Resource 元素中指定的两个 KMS 密钥来加密和解密数据。在 IAM policy 语句中指定 KMS 密钥时,必须使用 KMS 密钥的密钥 ARN

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "kms:Encrypt", "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 密钥

以下 IAM policy 阻止用户禁用或删除任何 KMS 密钥,即使其他 IAM policy 或密钥策略允许这些权限时也是如此。以显式方式拒绝权限的策略将覆盖所有其他策略,甚至包括那些以显式方式允许相同权限的策略。有关更多信息,请参阅 密钥访问故障排除

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