IAM 策略示例 - AWS Key Management Service

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

IAM 策略示例

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

重要

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

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

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

以下 IAM policy 允许用户对 AWS KMS 控制台进行只读访问。具有这些权限的用户可以查看其 AWS 账户 中的所有 KMS 密钥,但它们不能创建或更改任何 KMS 密钥。

要在 AWS 托管式密钥Customer managed keys(客户托管式密钥)页面上查看 KMS 密钥,即使密钥没有标签或别名,主体也需要 kms:ListKeyskms:ListAliasestag:GetResources 权限。要在 KMS 密钥详细信息页面上查看可选的 KMS 密钥表列和数据,需要余下的权限,特别是 kms:DescribeKey。要在默认视图中不出错误的显示密钥策略,需要 iam:ListUsersiam:ListRoles 权限。要查看 Custom key stores(自定义密钥存储)页面上的数据以及有关自定义密钥存储中的 KMS 密钥的详细信息,委托人还需要 kms:DescribeCustomKeyStores 权限。

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

此策略包含两个策略语句。第一个策略语句中的 Resource 元素允许对示例 AWS 账户 的所有区域中的所有 KMS 密钥的指定权限。控制台查看器不需要额外的访问权限,因为 AWS KMS 控制台仅显示委托人账户中的 KMS 密钥。即使他们有权查看其他 AWS 账户 中的 KMS 密钥也是如此。余下的 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 密钥,请使用 kms:KeySpeckms:KeyUsagekms:KeyOrigin 条件键。

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

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

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

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

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

除了 kms:CreateKey 之外,以下 IAM policy 提供对 AWS 账户 中的所有 KMS 密钥的 kms:TagResource 权限以及对该账户中所有别名的 kms:CreateAlias 权限。它还包括一些只能在 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": "*" } ] }

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

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

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

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

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

{ "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 或密钥策略允许这些权限时也是如此。以显式方式拒绝权限的策略将覆盖所有其他策略,甚至包括那些以显式方式允许相同权限的策略。有关更多信息,请参阅 排除 AWS KMS 权限故障

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