AWS Key Management Service
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

在 AWS KMS 中使用 IAM 策略

您可以在 AWS KMS 中结合使用 IAM 策略与密钥策略,以控制对客户主密钥 (CMK) 的访问。

注意

本节讨论如何在 AWS KMS 范围内使用 IAM。它不提供有关 IAM 服务的详细信息。有关完整的 IAM 文档,请参阅 IAM 用户指南

附加到 IAM 身份(即:用户、组和角色)的策略称为基于身份的策略(或IAM 策略),附加到 IAM 以外的资源的策略称为基于资源的策略。在 AWS KMS 中,必须将基于资源的策略附加到您的 CMK。这些策略称为密钥策略。所有 KMS CMK 都有一个密钥策略,您必须使用它控制对 CMK 的访问。IAM 策略本身不足以允许对 CMK 的访问,但您可以将它们与 CMK 的密钥策略配合使用。为此,请确保 CMK 的密钥策略包含可启用 IAM 策略的策略语句

IAM 策略概述

您可以通过以下方式使用 IAM 策略:

  • 将权限策略附加到用户或组 – 您可以附加允许一个 IAM 用户或一组用户(例如)创建新 CMK 的策略。

  • 将权限策略附加到角色以启用联合身份验证或跨账户权限 – 您可以将 IAM 策略附加到 IAM 角色以启用联合身份验证,允许跨账户权限,或者向运行在 EC2 实例上的应用程序授予权限。有关 IAM 角色的各种使用案例的更多信息,请参阅 IAM 用户指南 中的 IAM 角色

以下示例显示了一个具有 AWS KMS 权限的 IAM 策略。此策略允许附加到其上的 IAM 身份检索包含所有 CMK 和别名的列表。

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

此策略没有指定 Principal 元素,因为在 IAM 策略中,您未指定获取权限的委托人。附加了此策略的 IAM 用户即隐式委托人。向 IAM 角色附加此策略后,代入角色的用户 将获得权限。

有关显示所有 AWS KMS API 操作及其适用的资源的表,请参阅 AWS KMS API 权限参考

使用 AWS KMS 控制台所需要的权限

要使用 AWS KMS 控制台,用户必须拥有一组最低权限来允许他们使用 AWS 账户中的 AWS KMS 资源。除了这些 AWS KMS 权限以外,用户还必须拥有列出 IAM 用户和角色的权限。如果创建比必需的最低权限更为严格的 IAM 策略,对于附加了该 IAM 策略的用户,AWS KMS 控制台将无法按预期正常运行。

有关允许用户对 AWS KMS 控制台进行只读访问所需的最低权限,请参阅允许用户通过 AWS KMS 控制台对所有 CMK 进行只读访问

要允许用户使用 AWS KMS 控制台创建和管理 CMK,请向用户附加 AWSKeyManagementServicePowerUser 托管策略,如以下部分中所述。

您无需通过 AWS 开发工具包命令行工具为使用 AWS KMS API 的用户提供最低控制台权限,但您确实需要向这些用户授予使用 API 的权限。有关更多信息,请参阅AWS KMS API 权限参考

适用于 AWS KMS 的 AWS 托管(预定义)策略

AWS 通过提供由 AWS 创建和管理的独立 IAM 策略,满足许多常用案例的要求。这些策略称为 AWS 托管策略。AWS 托管策略为常用案例提供必要权限,因此,您不必调查需要哪些权限。有关更多信息,请参阅 IAM 用户指南 中的 AWS 托管策略

AWS 提供了一个适用于 AWS KMS 的 AWS 托管策略(名为 AWSKeyManagementServicePowerUser)。此策略提供以下权限:

  • 允许用户列出所有 CMK 和别名。

  • 允许用户检索有关每个 CMK 的信息,包括其标识符、创建日期、轮换状态、密钥策略等。

  • 允许用户创建他们可以管理或使用的 CMK。当用户创建 CMK 时,他们可以设置 CMK 密钥策略中的权限。这意味着,用户可以创建具有任何所需权限的 CMK,包括允许他们管理或使用 CMK 的权限。AWSKeyManagementServicePowerUser 策略不允许用户管理或使用任何其他 CMK,只允许管理或使用他们创建的 CMK。

客户托管策略示例

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

重要

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

允许用户通过 AWS KMS 控制台对所有 CMK 进行只读访问

以下策略允许用户对 AWS KMS 控制台进行只读访问。也就是说,用户可以使用控制台查看所有 CMK,但不能对任何 CMK 进行更改或创建新的 CMK。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "kms:ListKeys", "kms:ListAliases", "kms:DescribeKey", "kms:ListKeyPolicies", "kms:GetKeyPolicy", "kms:GetKeyRotationStatus", "iam:ListUsers", "iam:ListRoles" ], "Resource": "*" } }

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

以下策略允许用户成功请求 AWS KMS 使用 AWS 账户 111122223333 中的任何 CMK 来加密和解密数据。

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

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

以下策略允许用户成功请求 AWS KMS 使用 美国西部(俄勒冈) 区域中的 AWS 账户 111122223333 中的任何 CMK 来加密和解密数据。

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

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

以下策略允许用户成功请求 AWS KMS 使用策略的 Resource 元素中指定的两个 CMK 来加密和解密数据。

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

阻止用户禁用或删除任何 CMK

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

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