使用 IAM policy simulator 测试 IAM 策略 - Amazon Identity and Access Management
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 IAM policy simulator 测试 IAM 策略

有关如何以及为何使用 IAM policy 的更多信息,请参阅。Amazon Identity and Access Management 中的策略和权限

您可以在以下位置访问 IAM policy simulator 控制台:https://policysim.aws.amazon.com/

重要

策略模拟器的结果可能与您的实时 Amazon 环境不同。我们建议您在使用策略模拟器进行测试后,根据真实 Amazon 环境检查您的策略,以确认您获得了预期的结果。有关更多信息,请参阅 IAM policy simulator 的工作方式

使用 IAM policy simulator,您可以测试和排除基于身份的策略和 IAM 权限边界的故障。以下是您可以使用策略模拟器执行的一些常见操作:

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

  • 测试权限边界对 IAM 实体的影响并进行故障排除。一次只能模拟一个权限边界。

  • 测试基于资源的策略对附加到 Amazon 资源(例如 Amazon S3 存储桶、Amazon SQS 队列、Amazon SNS 主题或 Amazon S3 Glacier 文件库)的 IAM 用户的影响。要在 IAM 用户的策略模拟器中使用基于资源的策略,必须在模拟中包含该资源。还必须选中该复选框以将该资源的策略包括在模拟中。

    注意

    IAM 角色不支持基于资源的策略模拟。

  • 如果您的 Amazon Web Services 账户 是 Amazon Organizations 中的组织的成员,则您可以测试服务控制策略(SCP)对您的基于身份的策略的影响。

    注意

    策略模拟器不会评估具有任何条件的 SCP。

  • 通过将尚未附加到用户、用户组或角色的基于身份的新策略键入或复制到策略模拟器中,对这些新策略进行测试。这些仅在模拟中使用,不会保存。您不能将基于资源的策略键入或者复制到策略模拟器中。

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

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

    注意

    如果模拟中基于身份的策略没有显式检查标签的 Condition 元素,则策略模拟器不会模拟作为输入提供的标签。

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

IAM policy simulator 的工作方式

策略模拟器会评估基于身份的策略中的语句以及您在模拟期间提供的输入。策略模拟器的结果可能与您的实时 Amazon 环境不同。我们建议您在使用策略模拟器进行测试后,根据真实 Amazon 环境检查您的策略,以确认您获得了预期的结果。

策略模拟器在以下几方面与真实 Amazon 环境不同:

  • 策略模拟器不发出真实 Amazon 服务请求,因此,您可以安全地测试在真实 Amazon 环境中会进行不需要的更改的请求。策略模拟器不考虑生产中的实际上下文键值。

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

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

  • 您不能测试具有任何条件的服务控制策略(SCP)。

  • 策略模拟器不支持资源控制策略(RCP)的模拟。

  • 策略模拟器不支持针对 IAM 角色和用户进行跨账户存取的模拟。

注意

IAM policy simulator 无法确定哪些服务支持全局条件键进行授权。例如,策略模拟器无法识别某个服务不支持 aws:TagKeys

使用 IAM policy simulator 所需的权限

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

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

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

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

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

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

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

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

在策略中包含以下操作:

  • iam:GetGroupPolicy

  • iam:GetPolicy

  • iam:GetPolicyVersion

  • iam:GetUser

  • iam:GetUserPolicy

  • iam:ListAttachedUserPolicies

  • iam:ListGroupsForUser

  • iam:ListGroupPolicies

  • iam:ListUserPolicies

  • iam:ListUsers

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

在策略中包含以下操作:

  • 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

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

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetBucketPolicy", "Resource":"arn:aws:s3:::bucket-name/*" } ] }

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

策略模拟器 API 操作 GetContextKeyForCustomPolicySimulateCustomPolicy 允许用户测试尚未附加到用户、用户组或角色的策略。要测试此类策略,请将策略以字符串形式传递给 API。这些策略仅在模拟中使用,不会揭露敏感信息。您还可以使用此 API 测试附加到 Amazon Web Services 账户 中的 IAM 用户、IAM 组或角色的策略。要执行此操作,您必须为用户提供调用 GetContextKeyForPrincipalPolicySimulatePrincipalPolicy 的权限。

要查看允许为当前 Amazon Web Services 账户 中已附加策略和未附加的策略使用策略模拟器 API 的示例策略,请参阅 IAM:访问策略模拟器 API

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

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

在策略中包含以下操作:

  • iam:GetContextKeysForCustomPolicy

  • iam:SimulateCustomPolicy

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

在策略中包含以下操作:

  • iam:GetContextKeysForPrincipalPolicy

  • iam:SimulatePrincipalPolicy

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

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

使用 IAM policy simulator(控制台)

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

测试未附加到用户、用户组或角色的策略(控制台)
  1. 在以下位置打开 IAM policy simulator 控制台:https://policysim.aws.amazon.com/

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

  3. Policy Sandbox 中,选择 Create New Policy

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

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

测试附加到用户、用户组或角色的策略(控制台)
  1. 在以下位置打开 IAM policy simulator 控制台:https://policysim.aws.amazon.com/

    注意

    要作为 IAM 用户登录策略模拟器,请使用您的唯一登录 URL 登录 Amazon Web Services Management Console。然后转到https://policysim.aws.amazon.com/。有关以 IAM 用户身份登录的更多信息,请参阅 IAM 用户如何登录 Amazon

    策略模拟器将以 Existing Policies(现有策略)模式打开,并在 Users, Groups, and Roles(用户、组和角色)下列出您的账户中的 IAM 用户。

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

    测试目的: 执行以下操作:
    附加到用户的策略 Users, Groups, and Roles 列表中,选择 Users。然后选择用户。
    附加到用户组的策略 Users, Groups, and Roles 列表中,选择 Groups。然后选择用户组。
    附加到角色的策略 Users, Groups, and Roles 列表中,选择 Roles。然后选择角色。
    附加到资源的策略 请参阅 步骤 9
    用户、用户组或角色的自定义策略 选择 Create New Policy (创建新策略)。在新的 Policies (策略) 窗格中,键入或粘贴策略,然后选择应用
    提示

    要测试附加到组的策略,您可以直接从 IAM 控制台启动 IAM policy simulator:在导航窗格中,选择 User groups(用户组)。选择要对其测试策略的组的名称,然后选择权限选项卡。选择 Simulate(模拟)。

    要测试附加到用户的客户托管策略,请执行以下操作:在导航窗格中选择 Users (用户)。选择要对其测试策略的用户的名称。然后选择 Permissions 选项卡,并展开您要测试的策略。在最右端,选择 Simulate policyIAM policy simulator在新窗口中打开,并在 Policies(策略)窗格中显示所选策略。

  3. (可选)如果您的账户是 Amazon Organizations 中某个企业的成员,则请选中 Amazon Organizations SCP 旁边的复选框以将 SCP 包含在模拟评估中。SCP 是指定组织或组织单元 (OU) 的最大权限的 JSON 策略。SCP 限制成员账户中实体的权限。如果 SCP 阻止某个服务或操作,则该账户中的所有实体均无法访问该服务或执行该操作。即使管理员使用 IAM 或资源策略明确地为该服务或操作授予权限,也依然如此。

    如果您的账户不是企业的成员,则不会显示该复选框。

  4. (可选)您可以测试为 IAM 实体(用户或角色,但不包括 IAM 组)设置为权限边界的策略。如果当前为实体设置了权限边界策略,则该策略将显示在 Policies (策略) 窗格中。您仅可为实体设置一个权限边界。要测试不同的权限边界,您可以创建自定义权限边界。为此,选择 Create New Policy (创建新策略)。将打开新的 Policies (策略) 窗格。在菜单中,选择 Custom IAM Permissions Boundary Policy (自定义 IAM 权限边界策略)。输入新策略的名称,然后在下面的空间中键入或复制策略。选择应用以保存策略。接下来,选择 Back (返回) 以返回原始 Policies (策略) 窗格。然后选中要用于模拟的权限边界旁边的复选框。

  5. (可选)您可以只测试附加到用户、用户组或角色的策略的子集。为此,请在 Policies (策略) 窗格中清除每个要排除的策略旁边的复选框。

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

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

    警告

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

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

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

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

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

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

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

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

    • EC2-VPC-InstanceStore

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

    • EC2-VPC-InstanceStore-Subnet

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

    • EC2-VPC-EBS

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

    • EC2-VPC-EBS-Subnet

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

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

  10. 选择右上角的 Run Simulation

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

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

    注意

    如果操作为隐式拒绝,意即,如果操作仅因未明确允许而被拒绝,则 List(列表)和 Show statement(显示语句)选项不会显示。

IAM policy simulator 控制台消息故障排除

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

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

无需操作。

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

无法获取资源策略。原因:详细错误消息 策略模拟器无法访问所请求的基于资源的策略。确保指定的资源 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 typed for this simulation does not match this service。

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

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

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

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

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

无需操作。

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

DynamoDB FGAC is currently not supported。

无需操作。

该信息性消息指的是精细访问控制。精细的访问控制是指使用 IAM policy 条件来确定谁可以访问 DynamoDB 表和索引中的各个数据项和属性的功能。它还指可以对这些表和索引执行的操作。IAM policy simulator 的当前版本不支持这类策略条件。有关 DynamoDB 访问权限精细控制的更多信息,请参阅 DynamoDB 访问权限的精细控制

You have policies that do not comply with the policy syntax。您可以使用策略模拟器查看您策略的推荐更新。

如果策略不符合 IAM policy 语法,则会在策略列表的顶部显示此消息。要模拟这些策略,请查看位于 IAM 策略验证 的策略验证选项来识别和修复这些策略。

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

如果您的策略不符合 IAM policy 语法,则会显示此消息。要模拟这些策略,请查看位于 IAM 策略验证 的策略验证选项来识别和修复这些策略。

使用 IAM policy simulator(Amazon CLI 和 Amazon API)

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

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

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

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

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

获取上下文密钥的列表(Amazon CLI、Amazon API)

使用以下命令评估策略列表,返回策略中使用的上下文密钥的列表。

模拟 IAM policy(Amazon CLI、Amazon API)

使用以下命令模拟 IAM policy,以确定用户的有效权限。