

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

# 检查 IAM policy
<a name="determining-access-iam-policies"></a>

除密钥策略和授权外，您还可以使用 [IAM policy](iam-policies.md) 来允许对 KMS 密钥的访问。有关 IAM policy 和密钥策略如何协同工作的更多信息，请参阅 [AWS KMS 权限疑难解答](policy-evaluation.md)。

要确定当前可通过 IAM policy 访问 KMS 密钥的委托人，可以使用基于浏览器的 [IAM policy simulator](https://policysim.aws.amazon.com/) 工具，也可以向 IAM API 发出请求。

**Contents**
+ [

## 使用 IAM policy simulator 检查 IAM policy
](#determining-access-iam-policy-simulator)
+ [

## 使用 IAM API 检查 IAM policy
](#determining-access-iam-api)

## 使用 IAM policy simulator 检查 IAM policy
<a name="determining-access-iam-policy-simulator"></a>

IAM policy simulator 有助于您了解哪些委托人可以通过 IAM policy 访问 KMS 密钥。

**使用 IAM policy simulator 确定对 KMS 密钥的访问权限**

1. 登录 AWS 管理控制台 并打开 IAM 策略模拟器，网址为[https://policysim.aws.amazon.com/](https://policysim.aws.amazon.com/)。

1. 在**用户、组和角色**窗格中，选择您要模拟其策略的用户、组或角色。

1. (可选) 清除您要从模拟中忽略的任何策略旁边的复选框。要模拟所有策略，则将所有策略保持选中状态。

1. 在**策略模拟器**窗格中，执行以下操作：

   1. 对于**选择服务**，请选择 **Key Management Service**。

   1. 要模拟特定 AWS KMS 动作，**请在 “选择动作”** 中选择要模拟的动作。要模拟所有 AWS KMS 动作，**请选择 “全选”**。

1. （可选）默认情况下，策略模拟器会模拟对所有 KMS 密钥的访问。要模拟对特定 KMS 密钥的访问，请选择 **Simulation Settings**（模拟设置），然后键入要模拟的 KMS 密钥的 Amazon Resource Name (ARN)。

1. 选择 **Run Simulation (运行模拟)**。

您可以在**结果**部分查看模拟的结果。对 AWS 账户中的每个用户、组和角色重复第 2 至 6 步。

## 使用 IAM API 检查 IAM policy
<a name="determining-access-iam-api"></a>

您可以使用 IAM API 以编程方式检查 IAM policy。以下步骤提供了如何执行该操作的一般概述：

1. 对于密钥策略中 AWS 账户 列为委托人的每个用户（即按以下格式指定的每个[AWS 账户委托人](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-accounts)：`"Principal": {"AWS": "arn:aws:iam::111122223333:root"}`），使用 IAM API 中的[ListUsers](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListUsers.html)和[ListRoles](https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListRoles.html)操作获取账户中的所有用户和角色。

1. 对于列表中的每个用户和角色，使用 IAM API 中的[SimulatePrincipalPolicy](https://docs.aws.amazon.com/IAM/latest/APIReference/API_SimulatePrincipalPolicy.html)操作，传入以下参数：
   + 对于 `PolicySourceArn`，指定列表中用户或角色的 Amazon Resource Name (ARN)。您只能为每个 `SimulatePrincipalPolicy` 请求指定一个 `PolicySourceArn`，因此必须多次调用此操作，针对列表中的每个用户和角色分别调用一次。
   + 在`ActionNames`列表中，指定要模拟的每 AWS KMS 个 API 操作。要模拟所有 AWS KMS API 操作，请使用`kms:*`。要测试各个 AWS KMS API 操作，请在每个 API 操作之前加上 `kms:` “”，例如 “`kms:ListKeys`”。有关 AWS KMS API 操作的完整列表，请参阅《AWS Key Management Service API 参考》中的 [操作](https://docs.aws.amazon.com/kms/latest/APIReference/API_Operations.html)**。
   + （可选）要确定用户或角色是否有权访问特定 KMS 密钥，请使用`ResourceArns`参数指定 KMS 密钥的 Amazon 资源名称 (ARNs) 列表。要确定用户或角色是否有权访问任何 KMS 密钥，请忽略 `ResourceArns` 参数。

IAM 通过以下评估决策来响应每个 `SimulatePrincipalPolicy` 请求：`allowed`、`explicitDeny` 或 `implicitDeny`。对于包含评估决策的每个响应`allowed`，该响应都包含允许的特定 AWS KMS API 操作的名称。它还包括评估中使用的 KMS 密钥的 ARN（如果有）。