AWS Identity and Access Management
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

使用 IAM 策略模拟器测试 IAM 策略

有关如何以及为何使用 IAM 策略的更多信息,请参阅 IAM 策略

您可以在以下位置访问 IAM 策略模拟器控制台:https://policysim.amazonaws.cn/

下面的视频介绍如何使用 IAM 策略模拟器。

使用 IAM 策略模拟器,您可以通过以下方式对 IAM 和基于资源的策略进行测试和故障排除:

  • 测试附加到您 AWS 账户中的 IAM 用户、组或角色的策略。如果多个策略附加到用户、组或角色,您可以测试所有策略,也可以选择单个策略进行测试。您可以测试为特定资源所选的策略允许或拒绝哪些操作。

  • 测试附加到 AWS 资源 (如 Amazon S3 存储桶、Amazon SQS 队列、Amazon SNS 主题或 Amazon Glacier 文件库) 的策略。

  • 如果您的 AWS 账户是 AWS 组织的成员,您可以在 IAM 策略和资源策略上测试组织控制策略的影响。

  • 通过将尚未附加到用户、组或角色的新策略键入或复制到模拟器中,对这些新策略进行测试。这些仅在模拟中使用,不会保存。请注意:您不能将基于资源的策略键入或者复制到模拟器中。要在模拟器中使用基于资源的策略,您必须将相关资源包含在模拟中,并且选中复选框将该资源的策略包含在模拟中。

  • 使用所选服务、操作和资源测试策略。例如,您可以通过测试确保策略允许某个实体在 Amazon S3 服务中对特定存储桶执行 ListAllMyBucketsCreateBucketDeleteBucket 操作。

  • 通过提供上下文键 (如 IP 地址或日期,包含在被测试策略的 Condition 元素中) 模拟真实场景。

  • 识别策略中导致允许或拒绝访问特定资源或操作的特定语句。

IAM 策略模拟器的工作方式

模拟器评估您选择的策略,为您指定的每项操作确定有效权限。模拟器使用真实 AWS 服务请求所用的策略评估引擎。只是在以下几方面与真实 AWS 环境不同:

  • 模拟器不发出真实 AWS 服务请求,因此,您可以安全地测试在真实 AWS 环境中会进行不需要的更改的请求。

  • 因为模拟器不模拟运行所选操作,所以它不能报告对模拟请求的任何响应。返回的唯一结果是请求的操作是被允许还是被拒绝。

  • 如果您在模拟器内编辑策略,所做的更改只影响模拟器。您的 AWS 账户中的相应策略保持不变。

使用 IAM 策略模拟器所需的权限

您可以使用策略模拟器控制台或策略模拟器 API 来测试策略。默认情况下,控制台用户可以通过将尚未挂载到用户、组或角色的策略键入或复制到模拟器中来对其进行测试。这些策略仅在模拟中使用,不会揭露敏感信息。API 用户必须具有测试未附加策略的权限。要允许控制台或 API 用户测试挂载到您 AWS 账户中的 IAM 用户、组或角色的策略,您必须向用户提供检索这些策略的权限。要测试基于资源的策略,用户必须有权检索相关资源的策略。

有关允许用户模拟策略的控制台和 API 策略示例,请参阅示例策略:AWS Identity and Access Management (IAM)

使用策略模拟器控制台所需的权限

要允许用户测试附加到您 AWS 账户中的 IAM 用户、组或角色的策略,您必须向用户提供检索这些策略的权限。要测试基于资源的策略,用户必须有权检索相关资源的策略。

要查看允许为挂载到用户、组或角色的策略使用策略模拟器控制台的示例策略,请参阅 IAM:访问策略模拟器控制台

要查看只允许具有特定路径的用户使用策略模拟器控制台的示例策略,请参阅 IAM:基于用户路径访问策略模拟器控制台

要创建只允许为一种实体类型使用策略模拟器控制台的策略,请按照以下步骤操作。

允许控制台用户模拟用户的策略

在策略中包含以下操作:

  • iam:GetGroupPolicy

  • iam:GetPolicy

  • iam:GetPolicyVersion

  • iam:GetUser

  • iam:GetUserPolicy

  • iam:ListAttachedUserPolicies

  • iam:ListGroupsForUser

  • iam:ListGroupPolicies

  • iam:ListUserPolicies

  • iam:ListUsers

允许控制台用户模拟组的策略

在策略中包含以下操作:

  • iam:GetGroup

  • iam:GetGroupPolicy

  • iam:GetPolicy

  • iam:GetPolicyVersion

  • iam:ListAttachedGroupPolicies

  • iam:ListGroupPolicies

  • iam:ListGroups

允许控制台用户模拟角色的策略

在策略中包含以下操作:

  • iam:GetPolicy

  • iam:GetPolicyVersion

  • iam:GetRole

  • iam:GetRolePolicy

  • iam:ListAttachedRolePolicies

  • iam:ListRolePolicies

  • iam:ListRoles

要测试基于资源的策略,用户必须有权检索相关资源的策略。

允许控制台用户在 Amazon S3 存储桶中测试基于资源的策略

在策略中包含以下操作:

  • s3:GetBucketPolicy

  • s3:GetObject

例如,下面的策略使用上述操作来允许控制台用户在特定的 Amazon S3 存储桶中模拟基于资源的策略。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetBucketPolicy", "s3:GetObject" ], "Effect": "Allow", "Resource":"arn:aws:s3:::<BUCKET-NAME>/*" } ] }

允许控制台用户测试 AWS Organizations 策略

在策略中包含以下操作:

  • organizations:DescribePolicy

  • organizations:ListPolicies

  • organizations:ListPoliciesForTarget

  • organizations:ListTargetsForPolicy

使用策略模拟器 API 所需的权限

策略模拟器 API 操作 GetContextKeyForCustomPolicySimulateCustomPolicy 允许用户将策略以字符串形式传递给 API,以测试尚未挂载到用户、组或角色的策略。这些策略仅在模拟中使用,不会揭露敏感信息。要允许 API 用户测试挂载到您 AWS 账户中的 IAM 用户、组或角色的策略,您必须向用户提供调用 GetContextKeyForPrincipalPolicySimulatePrincipalPolicy 的权限。

要查看允许为未附加策略和已挂载到当前 AWS 账户中用户、组或角色的策略使用策略模拟器 API 的示例策略,请参阅 IAM:访问策略模拟器 API

要创建只允许为一种策略类型使用策略模拟器 API 的策略,请按照以下步骤操作。

允许 API 用户模拟作为字符串直接传递到 API 的策略

在策略中包含以下操作:

  • iam:GetContextKeysForCustomPolicy

  • iam:SimulateCustomPolicy

允许 API 用户模拟挂载到 IAM 用户、组、角色或资源的策略

在策略中包含以下操作:

  • iam:GetContextKeysForPrincipalPolicy

  • iam:SimulatePrincipalPolicy

例如,要向名为“Bob”的用户提供模拟已分配到名为“Alice”的用户的策略的权限,请向 Bob 提供访问以下资源的权限:arn:aws:iam::777788889999:user/alice

要查看只允许具有特定路径的用户使用策略模拟器 API 的示例策略,请参阅 IAM:基于用户路径访问策略模拟器 API

使用 IAM 策略模拟器 (AWS 管理控制台)

默认情况下,用户可以通过将尚未挂载到用户、组或角色的策略键入或复制到策略模拟器控制台中来对其进行测试。这些策略仅在模拟中使用,不会揭露敏感信息。

使用策略模拟器控制台测试未挂载到用户、组或角色的策略:

  1. 在以下位置打开 IAM 策略模拟器控制台:https://policysim.amazonaws.cn/

  2. 在页面顶部的 Mode: 菜单中,选择 New Policy

  3. Policy Sandbox 中,选择 Create New Policy

  4. 将策略键入或复制到模拟器中,按照以下步骤中所述使用模拟器。

获得使用 IAM 策略模拟器控制台所需的权限后,可以使用该模拟器测试 IAM 用户、组、角色或资源策略。

使用策略模拟器控制台:

  1. 在以下位置打开 IAM 策略模拟器控制台:https://policysim.amazonaws.cn/

    注意

    要作为 IAM 用户登录策略模拟器,请使用您的唯一登录 URL 登录 AWS 管理控制台。然后转到 https://policysim.amazonaws.cn/。有关以 IAM 用户身份登录的更多信息,请参阅 IAM 用户如何登录到 AWS

    模拟器将以 Existing Policies 模式打开,并在 Users, Groups, and Roles 下列出您的账户中的 IAM 用户。

  2. 选择适合于您的任务的选项:

    测试目的: 请执行此操作:
    附加到用户的策略 Users, Groups, and Roles 列表中,选择 Users。然后选择用户。
    附加到组的策略 Users, Groups, and Roles 列表中,选择 Groups。然后选择组。
    附加到角色的策略 Users, Groups, and Roles 列表中,选择 Roles。然后选择角色。
    附加到资源的策略 请参阅步骤 8
    自定义策略 从顶部的模式列表中选择 New Policy。然后,在左侧的 Policy Sandbox 窗格中,选择 Create New Policy,输入或粘入策略,再选择 Apply

    提示

    要测试挂载到组的策略,您可以直接从 IAM 控制台启动 IAM 策略模拟器:在导航窗格中,选择 Groups。选择要对其测试策略的组的名称,然后选择 Permissions 选项卡。在 Inline PoliciesManaged Policies 部分,找到要测试的策略。在该策略的 Actions 列中,选择 Simulate Policy

    要测试挂载到用户的客户托管策略,请在导航窗格中选择 Users。选择要对其测试策略的用户的名称。然后选择 Permissions 选项卡,并展开您要测试的策略。在最右端,选择 Simulate policyIAM Policy Simulator 将在新窗口中打开,并在 Policies 窗格中显示所选的策略。

  3. (可选) 如果您的账户是 AWS 组织的成员,则影响模拟用户账户的所有组织控制策略 (OCP) 将与 IAM policiesResource policies 共同出现在 Policies 窗格中。这些策略基本上属于筛选条件,限制受影响账户的用户、组或角色可以使用的权限。如果 OCP 阻止服务或操作,则该账户中的所有实体都无法访问该服务或执行该操作。即使管理员使用 IAM 或资源策略明确地为该服务或操作授予权限,也依然如此。要从模拟中删除 OCP,请清除 OCP 名称旁的复选框。要查看 OCP 内容,请选择 OCP 的名称。

    如果您的账户不是组织的成员,则没有要模拟的 OCP。

  4. (可选) 如果只测试挂载到用户、组或角色的策略的子集,请在 Policies 窗格中,取消选中要排除的每个策略旁的复选框。

  5. Policy Simulator 下,选择 Select service,然后选择要测试的服务。然后选择 Select actions,选择一个或多个要测试的操作。尽管菜单一次只为一项服务显示可用选择,不过 Action Settings and Results 中会显示所选择的全部服务和操作。

  6. (可选) 如果在 步骤 2步骤 4 中选择的任一策略包含具有 AWS 全局上下文键的条件,请为这些键提供值。为此,可以展开 Global Settings 部分,为其中显示的键名称键入值。

    警告

    如果将某个条件键的值留空,则模拟过程会忽略该键。在某些情况下,这会导致错误,使模拟无法运行。在另一些情况下,模拟可以运行,但结果可能不可靠,这是因为模拟过程与条件密钥或变量包含值的真实条件不相符。

  7. (可选) 所选的每个操作均显示在 Action Settings and Results 列表中,在实际运行模拟前,Permission 列中显示 Not simulated。在运行模拟前,您可以使用资源配置每个操作。要为特定场景配置单独的操作,请选择箭头展开相应操作的行。如果该操作支持资源级权限,您可以键入要测试其访问权限的特定资源的 Amazon 资源名称 (ARN)。默认情况下,每个资源都设置为一个通配符 (*)。您还可以为任意条件上下文键指定值。如前所述,系统会忽略值为空的密钥,从而导致模拟失败或结果不可靠。

    1. 单击操作名称旁的箭头展开每一行,可以配置准确模拟场景中的操作所需的任何其他信息。如果操作需要任何资源级权限,您可以键入要模拟访问的特定资源的 Amazon 资源名称 (ARN)。默认情况下,每个资源都设置为一个通配符 (*)。

    2. 如果操作支持但未设置资源级权限,可以选择 Add Resource,从而选择要添加到模拟中的资源类型。

    3. 如果所选任一策略包含的 Condition 元素引用该操作的服务的上下文键,则该操作下会显示相应键名称。您可以指定在对指定的资源模拟该操作的过程中将使用的值。

    需要不同资源类型组的操作

    某些操作在不同情况下需要不同的资源类型。每个资源类型组都与一个场景相关联。如果其中一个适用于您的模拟,则选择它,模拟器需要适合该场景的资源类型。下表列出了每个受支持的场景选项,以及为运行模拟您必须定义的资源。

    以下每个 Amazon EC2 场景都需要指定 instanceimagesecurity-group 资源。如果场景包含某个 EBS 卷,您必须指定该 volume 作为资源。如果 Amazon EC2 场景包含 Virtual Private Cloud (VPC),则必须提供 network-interface 资源。如果它包含 IP 子网,您必须指定 subnet 资源。有关 Amazon EC2 场景选项的更多信息,请参阅 AWS EC2 用户指南 中的支持的平台

    • EC2-Classic-InstanceStore

      实例、映像、安全组

    • EC2-Classic-EBS

      实例、映像、安全组、卷

    • EC2-VPC-InstanceStore

      实例、映像、安全组、网络接口

    • EC2-VPC-InstanceStore-Subnet

      实例、映像、安全组、网络接口、子网

    • EC2-VPC-EBS

      实例、映像、安全组、网络接口、卷

    • EC2-VPC-EBS-Subnet

      实例、映像、安全组、网络接口、子网、卷

  8. (可选) 如果要在模拟中包含基于资源的策略,必须首先在 步骤 5 中选择要对资源模拟的操作。展开所选操作的行,对要模拟的策略键入该资源的 ARN。然后选择 ARN 文本框旁边的 Include Resource PolicyIAM 策略模拟器当前仅支持来自以下服务的基于资源的策略:Amazon S3(仅限基于资源的策略;当前不支持 ACL)、Amazon SQS、Amazon SNS 和未锁定的 Amazon Glacier 文件库(当前不支持锁定的文件库)。

  9. 选择右上角的 Run Simulation

    Action Settings and Results 每行中的 Permission 列显示对指定资源模拟该操作的结果。

  10. 要查看策略中的哪个语句显式允许或拒绝操作,请在 Permission 列中,选择 N matching statement(s) 链接,展开该行,然后选择 Show statement 链接。Policies 窗格显示其语句会影响突出显示的模拟结果的相关策略。

    注意

    如果操作被隐式 拒绝,也就是说,如果只是因为没有显式允许操作而将其拒绝,则不会显示 ListShow statement 选项。

IAM 策略模拟器控制台消息故障排除

下表列出了在使用 IAM 策略模拟器时可能遇到的告知性和警告性消息。表中还提供了解决消息所示问题的操作步骤。

消息 解决步骤
This policy has been edited. Changes will not be saved to your account.

无需操作。

此为告知性消息。如果在 IAM 策略模拟器中编辑现有策略,所做的更改不会影响您的 AWS 账户。通过模拟器,您可以仅出于测试目的对策略进行更改。

无法获取资源策略。原因:详细错误消息 模拟器无法访问所请求的基于资源的策略。确保指定的资源 ARN 正确,并且运行模拟的用户有权读取该资源的策略。
One or more policies require values in the simulation settings. The simulation might fail without these values.

如果您测试的策略中包含条件键或变量,但未在 Simulation Settings 中为这些键或变量输入任何值,则会显示此消息。

要取消显示此消息,请选择 Simulation Settings,然后为每个条件键或变量键入值。

You have changed policies. These results are no longer valid.

若您在 Results 窗格中显示结果的同时更改了所选策略,则会显示此消息。Results 窗格中显示的结果不会动态更新。

要取消显示此消息,请再次选择 Run Simulation,以根据 Policies 窗格中所做的更改显示新的模拟结果。

The resource you entered for this simulation does not match this service.

如果在 Simulation Settings 窗格中输入的 Amazon 资源名称 (ARN) 与为当前模拟选择的服务不相符,则会显示此消息。例如,如果为 Amazon DynamoDB 资源指定一个 ARN,但选择 Amazon Redshift 作为要模拟的服务。

要取消显示此消息,请执行下列操作之一:

  • Simulation Settings 窗格中的框中删除该 ARN。

  • 选择与在 Simulation Settings 中指定的 ARN 相符的服务。

此操作所属的服务除支持基于资源的策略之外,还支持特殊访问控制机制,如 S3 ACL 或 Glacier 文件库锁定策略。策略模拟器不支持这些机制,因此结果可能与您的生产环境不同。

无需操作。

此为告知性消息。在当前版本中,模拟器评估附加到用户和组的策略,可评估针对 Amazon S3、Amazon SQS、Amazon SNS 和 Amazon Glacier 的基于资源的策略。策略模拟器只支持其他 AWS 服务支持的部分访问控制机制。

DynamoDB FGAC is currently not supported.

无需操作。

该信息化消息指的是精细访问控制。这是通过 IAM 策略条件确定谁有权访问 DynamoDB 表和索引中各数据项目和属性,以及可以对它们执行哪些操作的功能。IAM 策略模拟器的当前版本不支持这类策略条件。有关 DynamoDB 访问权限精细控制的更多信息,请参阅 DynamoDB 访问权限的精细控制

You have policies that do not comply with the policy syntax. You can use the Policy Validator to review and accept the recommended updates to your policies.

如果策略不符合 IAM 策略语法,则会在策略列表的顶部显示此消息。为了模拟这些策略,请按照 验证 JSON 策略 中的说明操作,以找到并修复策略中的问题。

This policy must be updated to comply with the latest policy syntax rules.

如果您的策略不符合 IAM 策略语法,则会显示此消息。为了模拟这些策略,请按照 验证 JSON 策略 中的说明操作,以找到并修复策略中的问题。

使用 IAM 策略模拟器 (AWS CLI、Windows PowerShell 工具 和 AWS API)

策略模拟器命令通常需要调用 API 以执行两项操作:

  1. 评估策略并返回策略引用的上下文键的列表。您需要了解引用了哪些上下文键,以便在下一个步骤中提供它们的值。

  2. 模拟策略,在模拟过程中提供操作、资源和上下文键的列表。

出于安全原因,API 已分为两个组:

在这两种情况下,API 操作都将模拟一个或多个策略对操作和资源的列表的影响。每个操作都与每个资源配对,模拟将确定策略对该资源是允许还是拒绝该操作。您还可以为您的策略引用的任何上下文键提供值。通过首先调用 GetContextKeysForCustomPolicyGetContextKeysForPrincipalPolicy,可以获取策略引用的上下文键的列表。如果不提供上下文键值,模拟仍会运行,但结果可能不可靠,这是因为模拟器无法在评估中包含该上下文键。

获取上下文键的列表

使用这些命令评估策略列表,返回策略中使用的上下文键的列表。

模拟 IAM 策略

使用这些命令模拟 IAM 策略,以确定用户的有效权限。