View a markdown version of this page

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

使用 IAM policy simulator 测试 IAM 策略

使用 IAM 策略模拟器,您可以测试您提供的基于身份的策略、IAM 权限边界、服务控制策略(SCP)和基于资源的策略。您可以模拟 Amazon 如何根据这些策略评估请求,而不会向任何 Amazon 服务发送真实请求。每次模拟都会为测试的每个操作和资源返回一个二进制授权结果:操作要么被允许,要么被拒绝。当结果为允许或显式拒绝时,模拟器还会显示产生此结果的策略,以便您了解并修复原因。

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

重要

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

以下屏幕截图显示了 IAM 策略模拟器,您可以在其中选择身份及其策略,并在运行模拟之前选择要测试的操作和资源。

主体模式下的 IAM 策略模拟器控制台。

策略模拟器模式

策略模拟器有两种模式。请根据您的需求选择相应模式:是测试账户中已存在的策略,还是测试仍在起草中的策略。

主体模式

在主体模式下,您可以测试已附加到现有 IAM 用户、角色或组的策略。为模拟选择一个身份,模拟器将评估附加到此身份的策略。您还可以在模拟中包含或排除自定义身份策略或权限边界。这些新增内容将模拟为附加到主体,而不会实际附加到 IAM 中,因此您的账户保持不变。

自定义模式

在自定义模式下,您可以测试一个或多个自行编写或粘贴的策略。要在附加策略之前检查策略,这非常有用。自定义策略将单独进行模拟,不会保存到您的账户中。

有关选择模式和运行模拟的详细分步说明,请参阅如何模拟策略

您可以使用策略模拟器执行的操作

以下是您可以使用策略模拟器执行的一些常见操作。请参阅如何模拟策略,了解更详细的分步指南以及 API 与控制台行为之间的区别。

  • 测试基于身份的策略,无论这些策略是已附加到 IAM 用户、组或角色的策略,还是您编写或粘贴的新策略,都能测试。对于附加了多个策略的身份,您可以同时测试所有策略,也可以选择单个策略,然后查看特定资源的允许或拒绝的操作。新策略的评估方式与附加到身份时相同,不会实际附加到账户中;策略仅在模拟中使用,不会保存到您的账户中。

  • 测试限制性控制对访问权限的效果。一次只能模拟一个权限边界。如果您的 Amazon Web Services 账户是 Amazon Organizations 中某个组织的成员,则您还可以测试服务控制策略(SCP)对基于身份的策略的影响。模拟器会告知您 SCP 是允许还是拒绝某项操作,但出于安全考虑,模拟器不会像处理其他策略类型那样显示 SCP 的匹配语句。

  • 测试您提供的基于资源的策略的效果。模拟器不会为您检索资源的策略,但在控制台中检索除外。要在模拟中包含基于资源的策略,您需要同时提供策略与资源。

  • 在真实条件下测试特定服务、操作和资源,并确定影响结果的因素。例如,您可以测试策略是否允许在 Amazon S3 中对特定存储桶执行 ListAllMyBucketsCreateBucketDeleteBucket 操作,并提供上下文键,例如所测试策略的 Condition 元素中引用的 IP 地址或日期。对于每个结果,模拟器都会识别允许或拒绝了访问的特定语句;匹配的语句可能来自您提供的基于身份的策略和基于资源的策略。

IAM policy simulator 的工作方式

当您运行模拟时,策略模拟器会针对请求来评估范围内的策略、范围内的任何 SCP 以及您提供的输入,例如操作、资源和上下文键值。在自定义模式下,您可以直接提供策略。在主体模式下,模拟器使用附加到所选身份的策略,您可以在模拟中包含或排除更多策略。每个操作和资源的结果是一个二进制结果:允许或拒绝。

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

  • 策略模拟器不会发出真实的 Amazon 服务请求,因此您可以安全地测试那些在真实 Amazon 环境中可能会产生意外更改的请求。模拟器不使用生产环境中的真实上下文键值,且因为操作实际上并未运行,所以不会返回任何服务响应。唯一的结果是每个请求的操作是被允许还是被拒绝。

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

  • 策略模拟器会评估 SCP,包括拒绝语句中的条件键和资源范围限定,但模拟器不支持资源控制策略(RCP)。对于某些高级配置,例如 VPC 端点策略、角色链或单个资源上的多个基于资源的策略,模拟结果仍可能与实际行为有所不同。

  • 跨账户模拟会在 EvalDecisionDetails 中返回按策略类型(身份策略和资源策略)划分的决策。

IAM 策略模拟器中的条件键评估的工作原理

许多策略使用依赖条件键的 Condition 元素,例如 aws:RequestedRegionaws:MultiFactorAuthPresent。运行模拟时,策略模拟器会从两个来源获取条件键的值:模拟器自动填充的值和您作为模拟输入提供的值。如果某个值不满足条件,则操作将被拒绝。

模拟器自动填充的上下文

模拟器为评估填充以下主体和组织上下文键:

  • 主体上下文:aws:PrincipalAccountaws:PrincipalIdaws:PrincipalTypeaws:Typeaws:UserIdaws:UserName

  • 组织上下文:aws:PrincipalOrgIDaws:PrincipalOrgMasterAccountIdaws:PrincipalOrgPaths

由于这些键已自动填充,使用主体或组织条件的 SCP 及其他策略均可正确评估。您需要为策略引用的所有其他条件键提供值。查看您正在测试的策略中的 Condition 元素,并为不在上述列表中的任何键提供值。

全局条件键和服务支持

对于基于身份的策略和基于资源的策略,模拟器不会确定哪些服务支持将给定的全局条件键用于授权。例如,策略模拟器不会识别某个服务不支持 aws:TagKeys。相比之下,服务控制策略(SCP)使用服务感知逻辑进行评估,包括 aws:RequestedRegionaws:PrincipalAccount 等全局条件键。有关条件键的更多信息,请参阅 Amazon 全局条件上下文键

服务控制策略(SCP)中的条件键

模拟器会评估 SCP 中的条件键和资源范围。如何为这些条件键提供值取决于模拟的运行方式:

  • 使用 Amazon CLI 或 Amazon API,您可以为 SCP 引用的条件键提供值。

  • 在 IAM 控制台中,您只能为基于身份的策略、权限边界或基于资源的策略中出现的条件键设置值。如果条件键仅由 SCP 引用,则无法在控制台中为其设置值。但是,如果同一条件键也出现在其他某个策略中,则您设置的值将在整个评估过程中使用,包括 SCP。

出于安全考虑,SCP 评估不会返回缺失的上下文值。您仍会收到相关请求的允许或拒绝决策。