使用 IAM policy simulator 测试 IAM 策略
使用 IAM 策略模拟器,您可以测试您提供的基于身份的策略、IAM 权限边界、服务控制策略(SCP)和基于资源的策略。您可以模拟 Amazon 如何根据这些策略评估请求,而不会向任何 Amazon 服务发送真实请求。每次模拟都会为测试的每个操作和资源返回一个二进制授权结果:操作要么被允许,要么被拒绝。当结果为允许或显式拒绝时,模拟器还会显示产生此结果的策略,以便您了解并修复原因。
有关如何以及为何使用 IAM policy 的更多信息,请参阅。Amazon Identity and Access Management 中的策略和权限
重要
策略模拟器的结果可能与您的实时 Amazon 环境不同。我们建议您在使用策略模拟器进行测试后,根据真实 Amazon 环境检查您的策略,以确认您获得了预期的结果。有关更多信息,请参阅 IAM policy simulator 的工作方式。
以下屏幕截图显示了 IAM 策略模拟器,您可以在其中选择身份及其策略,并在运行模拟之前选择要测试的操作和资源。
策略模拟器模式
策略模拟器有两种模式。请根据您的需求选择相应模式:是测试账户中已存在的策略,还是测试仍在起草中的策略。
主体模式
在主体模式下,您可以测试已附加到现有 IAM 用户、角色或组的策略。为模拟选择一个身份,模拟器将评估附加到此身份的策略。您还可以在模拟中包含或排除自定义身份策略或权限边界。这些新增内容将模拟为附加到主体,而不会实际附加到 IAM 中,因此您的账户保持不变。
自定义模式
在自定义模式下,您可以测试一个或多个自行编写或粘贴的策略。要在附加策略之前检查策略,这非常有用。自定义策略将单独进行模拟,不会保存到您的账户中。
有关选择模式和运行模拟的详细分步说明,请参阅如何模拟策略。
您可以使用策略模拟器执行的操作
以下是您可以使用策略模拟器执行的一些常见操作。请参阅如何模拟策略,了解更详细的分步指南以及 API 与控制台行为之间的区别。
-
测试基于身份的策略,无论这些策略是已附加到 IAM 用户、组或角色的策略,还是您编写或粘贴的新策略,都能测试。对于附加了多个策略的身份,您可以同时测试所有策略,也可以选择单个策略,然后查看特定资源的允许或拒绝的操作。新策略的评估方式与附加到身份时相同,不会实际附加到账户中;策略仅在模拟中使用,不会保存到您的账户中。
-
测试限制性控制对访问权限的效果。一次只能模拟一个权限边界。如果您的 Amazon Web Services 账户是 Amazon Organizations 中某个组织的成员,则您还可以测试服务控制策略(SCP)对基于身份的策略的影响。模拟器会告知您 SCP 是允许还是拒绝某项操作,但出于安全考虑,模拟器不会像处理其他策略类型那样显示 SCP 的匹配语句。
-
测试您提供的基于资源的策略的效果。模拟器不会为您检索资源的策略,但在控制台中检索除外。要在模拟中包含基于资源的策略,您需要同时提供策略与资源。
-
在真实条件下测试特定服务、操作和资源,并确定影响结果的因素。例如,您可以测试策略是否允许在 Amazon S3 中对特定存储桶执行
ListAllMyBuckets、CreateBucket和DeleteBucket操作,并提供上下文键,例如所测试策略的Condition元素中引用的 IP 地址或日期。对于每个结果,模拟器都会识别允许或拒绝了访问的特定语句;匹配的语句可能来自您提供的基于身份的策略和基于资源的策略。
IAM policy simulator 的工作方式
当您运行模拟时,策略模拟器会针对请求来评估范围内的策略、范围内的任何 SCP 以及您提供的输入,例如操作、资源和上下文键值。在自定义模式下,您可以直接提供策略。在主体模式下,模拟器使用附加到所选身份的策略,您可以在模拟中包含或排除更多策略。每个操作和资源的结果是一个二进制结果:允许或拒绝。
策略模拟器在以下几方面与真实 Amazon 环境不同:
-
策略模拟器不会发出真实的 Amazon 服务请求,因此您可以安全地测试那些在真实 Amazon 环境中可能会产生意外更改的请求。模拟器不使用生产环境中的真实上下文键值,且因为操作实际上并未运行,所以不会返回任何服务响应。唯一的结果是每个请求的操作是被允许还是被拒绝。
-
如果您在策略模拟器中编辑策略,所做的更改只会影响模拟。您的 Amazon Web Services 账户 中的相应策略保持不变。
-
策略模拟器会评估 SCP,包括拒绝语句中的条件键和资源范围限定,但模拟器不支持资源控制策略(RCP)。对于某些高级配置,例如 VPC 端点策略、角色链或单个资源上的多个基于资源的策略,模拟结果仍可能与实际行为有所不同。
-
跨账户模拟会在
EvalDecisionDetails中返回按策略类型(身份策略和资源策略)划分的决策。
IAM 策略模拟器中的条件键评估的工作原理
许多策略使用依赖条件键的 Condition 元素,例如 aws:RequestedRegion 或 aws:MultiFactorAuthPresent。运行模拟时,策略模拟器会从两个来源获取条件键的值:模拟器自动填充的值和您作为模拟输入提供的值。如果某个值不满足条件,则操作将被拒绝。
模拟器自动填充的上下文
模拟器为评估填充以下主体和组织上下文键:
-
主体上下文:
aws:PrincipalAccount、aws:PrincipalId、aws:PrincipalType、aws:Type、aws:UserId、aws:UserName -
组织上下文:
aws:PrincipalOrgID、aws:PrincipalOrgMasterAccountId、aws:PrincipalOrgPaths
由于这些键已自动填充,使用主体或组织条件的 SCP 及其他策略均可正确评估。您需要为策略引用的所有其他条件键提供值。查看您正在测试的策略中的 Condition 元素,并为不在上述列表中的任何键提供值。
全局条件键和服务支持
对于基于身份的策略和基于资源的策略,模拟器不会确定哪些服务支持将给定的全局条件键用于授权。例如,策略模拟器不会识别某个服务不支持 aws:TagKeys。相比之下,服务控制策略(SCP)使用服务感知逻辑进行评估,包括 aws:RequestedRegion 和 aws:PrincipalAccount 等全局条件键。有关条件键的更多信息,请参阅 Amazon 全局条件上下文键。
服务控制策略(SCP)中的条件键
模拟器会评估 SCP 中的条件键和资源范围。如何为这些条件键提供值取决于模拟的运行方式:
-
使用 Amazon CLI 或 Amazon API,您可以为 SCP 引用的条件键提供值。
-
在 IAM 控制台中,您只能为基于身份的策略、权限边界或基于资源的策略中出现的条件键设置值。如果条件键仅由 SCP 引用,则无法在控制台中为其设置值。但是,如果同一条件键也出现在其他某个策略中,则您设置的值将在整个评估过程中使用,包括 SCP。
出于安全考虑,SCP 评估不会返回缺失的上下文值。您仍会收到相关请求的允许或拒绝决策。