

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

# 将 IAM 策略与配合使用 Amazon KMS
<a name="iam-policies"></a>

您可以使用 IAM 策略以及[密钥策略](key-policies.md)、[授权](grants.md)和 [VPC 终端节点策略](https://docs.amazonaws.cn/vpc/latest/privatelink/interface-endpoints.html#edit-vpc-endpoint-policy)来控制对您 Amazon KMS keys 的 in 的访问权限 Amazon KMS。

**注意**  
要使用 IAM policy 控制对 KMS 密钥的访问，KMS 密钥的密钥政策必须授予账户使用 IAM policy 的权限。具体而言，密钥策略必须包含[启用 IAM policy 的策略语句](key-policy-default.md#key-policy-default-allow-root-enable-iam)。  
本节介绍如何使用 IAM 策略来控制对 Amazon KMS 操作的访问权限。有关 IAM 的更多一般信息，请参阅 [IAM 用户指南](https://docs.amazonaws.cn/IAM/latest/UserGuide/)。

所有 KMS 密钥都必须具有密钥策略。IAM policy 是可选的。要使用 IAM policy 控制对 KMS 密钥的访问，KMS 密钥的密钥政策必须授予账户使用 IAM policy 的权限。具体而言，密钥策略必须包含[启用 IAM policy 的策略语句](key-policy-default.md#key-policy-default-allow-root-enable-iam)。

IAM 策略可以控制对任何 Amazon KMS 操作的访问权限。与密钥策略不同，IAM 策略可以控制对多个 KMS 密钥的访问权限，并为多个相关 Amazon 服务的操作提供权限。但是，IAM 策略对于控制对操作的访问特别有用 [CreateKey](https://docs.amazonaws.cn/kms/latest/APIReference/API_CreateKey.html)，例如无法由密钥策略控制的操作，因为它们不涉及任何特定的 KMS 密钥。

如果您 Amazon KMS 通过亚马逊虚拟私有云 (Amazon VPC) 终端节点进行访问，则还可以在使用终端节点时使用 VPC 终端节点策略来限制对 Amazon KMS 资源的访问。例如，在使用 VPC 终端节点时，您可能只允许您的委托人 Amazon Web Services 账户 访问您的客户托管密钥。有关详细信息，请参阅 [VPC 端点策略](https://docs.amazonaws.cn/vpc/latest/privatelink/interface-endpoints.html#edit-vpc-endpoint-policy)。

有关编写和格式化 JSON 策略文档的帮助，请参阅 *IAM 用户指南*中的 [IAM JSON 策略参考](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies.html)。

您可以通过以下方式使用 IAM policy：
+ **将权限策略附加到角色以启用联合身份验证或跨账户权限** – 您可以将 IAM policy 附加到 IAM 角色以启用联合身份验证，允许跨账户权限，或者向运行在 EC2 实例上的应用程序授予权限。有关 IAM 角色各种使用场景的更多信息，请参阅 *IAM 用户指南*中的 [IAM 角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles.html)。
+ **将权限策略附加到用户或组** – 您可以附加允许某个用户或用户组调用 Amazon KMS 操作的策略。但是，IAM 最佳实践建议您尽可能使用具有临时凭证的身份，例如 IAM 角色。

以下示例显示了具有 Amazon KMS 权限的 IAM 策略。此策略允许附加到其上的 IAM 身份获取列出所有 KMS 密钥和别名。

------
#### [ JSON ]

****  

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

------

与所有 IAM policy 一样，此策略没有 `Principal` 元素。将 IAM policy 附加到 IAM 身份时，该身份将获取策略中指定的权限。

有关显示所有 Amazon KMS API 操作及其适用的资源的表格，请参阅[权限参考](kms-api-permissions-reference.md)。

## 允许多个 IAM 主体访问 KMS 密钥
<a name="key-policy-modifying-multiple-iam-users"></a>

IAM 组不是密钥策略中的有效委托人。要允许多个 IAM 用户和角色访问 KMS 密钥，请执行下列操作中的一种：
+ 将 IAM 角色作为密钥策略中的主体。多个授权用户可以根据需要代入该角色。有关详细信息，请参阅《IAM 用户指南》中的 [IAM 角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles.html)**。

  虽然您可以在密钥策略中列出多个 IAM 用户，但不建议采用这种做法，因为这将要求您在每次授权用户列表发生变化时更新密钥策略。此外，IAM 最佳实践也不鼓励使用具有长期凭证的 IAM 用户。有关更多信息，请参阅《IAM 用户指南》中的 [IAM 安全最佳实践](https://docs.amazonaws.cn/IAM/latest/UserGuide/best-practices.html)**。
+ 使用 IAM policy 向 IAM 组授予权限。要执行此操作，请确保密钥策略包含一个 [启用 IAM policy 以允许访问 KMS 密钥](key-policy-default.md#key-policy-default-allow-root-enable-iam) 的语句，[创建一个 IAM policy](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_managed-using.html#create-managed-policy-console) 以允许访问该 KMS 密钥，然后 [将该策略附加到 IAM 组](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_managed-using.html#attach-managed-policy-console)（其中包含授权 IAM 用户）。使用此方式，您不需要在授权用户列表发生更改时更改任何策略。相反，您只需在相应的 IAM 组中添加或删除这些用户。有关详细信息，请参阅《IAM 用户指南》中的 [IAM 用户组](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_groups.html)**。

有关 Amazon KMS 密钥策略和 IAM 策略如何协同工作的更多信息，请参阅[Amazon KMS 权限疑难解答](policy-evaluation.md)。