如何模拟策略
您可以在 IAM 控制台中运行模拟,也可以使用 AWS CLI 和 AWS API 运行模拟。如需有关模拟器评估的内容、两种模式以及如何得出结果的概述,请参阅使用 IAM policy simulator 测试 IAM 策略。有关所需权限,请参阅使用策略模拟器所需的权限。
模拟策略(控制台)
您可以通过 IAM 控制台
注意
https://policysim.aws.amazon.com/
主体模式
选择身份
首先,您需要选择身份。您可以在该账户中选择 IAM 用户、角色或组。选择后,侧面板将填充附加到这些身份的策略。
包含或排除策略
侧面板列出了模拟范围内的策略,包括内联策略、AWS 托管式策略和客户管理型策略,以及任何权限边界。您可以排除某个策略,以查看无此策略时结果会如何变化,然后再将其重新包含策略。排除授予了访问权限的策略会将结果更改为隐式拒绝。
添加操作和资源
在左侧面板中选择身份和策略后,添加要测试的操作。对于支持资源选择的操作,可以针对所有资源进行测试,也可以输入一个或多个特定的资源 ARN。多项操作使用相同的资源类型时,您可以将一个资源同时应用于所有这些操作,也可以将其范围限定为一项操作。
某些操作需要一组相关的资源类型,模拟器才能对其进行评估。例如,在模拟 ec2:RunInstances 时,控制台会提示您同时指定映像、实例和安全组,并指定子网或卷(取决于使用场景)。
提供条件键值
如果您测试的策略包含条件键,模拟器会列出相关的键,并允许您在运行模拟之前设置值。显示的键反映了当前选择的策略,因此选择或取消选择策略,都会相应地添加或移除其键。如果某个值不满足条件,则操作将被拒绝。
模拟器在两个位置提供条件键的值。全局请求条件适用于整个模拟请求。这些键以 aws: 开头,例如 aws:MultiFactorAuthPresent 或 aws:PrincipalServiceNamesList,您只需在全局条件区域中设置其值一次即可。选择或清除策略会添加或移除其全局键,您输入的值在调整范围内策略时将予以保留。特定于服务的条件适用于单项操作。每个操作行都会显示其引用的条件数量,您可以打开该行,为该操作设置特定于服务的键,例如 cloudwatch:namespace 用于 cloudwatch:PutMetricData,或 ram:PermissionResourceType 用于 ram:ListPermissionAssociations。操作行可以同时包含全局键和特定于服务的键,如果任何值不满足条件,则该操作将被拒绝。
IAM 策略模拟器会自动为您填充部分主体和组织上下文键,其余键的值则需由您提供。有关自动填充的键列表以及条件键评估方式的更多信息,请参阅 IAM 策略模拟器中的条件键评估的工作原理。
要了解如何使用条件键,请参阅 AWS 全局条件上下文键。
测试权限边界
身份具有权限边界时,权限边界将显示在侧面板中,并默认包含在内。如果您想确定边界是否是某项操作被拒绝的原因,也可以排除该边界,然后再次运行模拟。
例如,假设您针对其边界不允许 iam:DeleteRole 的身份运行模拟。结果是拒绝,归因于权限边界。如果您随后添加了允许该操作且排除边界的策略,结果将变为允许。这证实了边界是阻止该操作的唯一控制因素。
包含服务控制策略
如果您的账户是某个组织的成员,则可以通过侧面板将服务控制策略(SCP)包含在模拟中。模拟器会在确定结果时评估 SCP 中自动填充的条件键和资源范围。当 SCP 明确拒绝某项操作时,结果为归因于 AWS Organizations 的显式拒绝,且其他策略中的允许无法覆盖该拒绝。关闭该控制因素再重新运行模拟,以查看不受组织控制因素影响时的结果。有关自动填充的条件键列表,请参阅 IAM 策略模拟器中的条件键评估的工作原理。
注意
出于安全考虑,模拟器不会显示 SCP 评估的详细信息。仅供 SCP 引用的条件键不会列出来供您设置值,且针对某一结果返回的匹配语句也不包含来自 SCP 的语句。键和匹配语句来自附加到身份的基于身份的策略,以及您提供的任何策略。
测试基于资源的策略
要在控制台模拟中加入基于资源的策略,请输入特定的资源 ARN,然后选择可包含资源策略的选项。基于资源的策略会显示在侧面板中,并在结果中进行评估。在控制台中,此功能适用于 Amazon S3 存储桶、Amazon SQS 队列、Amazon SNS 主题和 Amazon Glacier 保管库。
注意
IAM 角色不支持基于资源的策略模拟。
查看结果
结果表中的每一行均显示操作是被允许、隐式拒绝还是显示拒绝,并附有对结果的简短说明。使用说明来确定由哪个策略或控制因素决定了结果,例如显示允许、缺少匹配语句、权限边界或组织控制因素。
自定义模式
在自定义模式下,您可以使用 IAM 策略编辑器编写或粘贴基于身份的策略和权限边界。这些策略不会附加到任何身份,可在应用之前对其进行评估。您可以包含多个基于身份的策略,但只能包含一个用于模拟的权限边界。
注意
在自定义模式下,控制台不支持传入自定义 SCP 或模拟基于资源的策略。要模拟自定义 SCP 或基于资源的策略,请使用 AWS CLI 或 AWS API。
模拟策略(AWS CLI 和 AWS API)
使用 AWS CLI 或 AWS API 模拟策略通常需要两个步骤:
-
评估策略并返回策略引用的上下文键列表,以便您了解需要提供哪些上下文键值。此为可选步骤。
-
模拟策略,在模拟过程中提供要使用的操作、资源和上下文键值。
每个操作都与每个资源配对,模拟将确定策略对该资源是允许还是拒绝该操作。您还可以为策略引用的任何上下文键提供值。如果没有为上下文键提供值,模拟仍会运行并返回隐式拒绝,缺少的键将在 missingContextValues 中返回,以便您了解需要添加哪些值。如果缺少的上下文键仅供 SCP 引用,则出于安全原因,该键不会返回,但您仍会收到决策结果。
API 操作分为两组:
-
仅模拟以字符串形式直接传递给 API 的策略的操作:GetContextKeysForCustomPolicy 和 SimulateCustomPolicy。
-
模拟附加到指定 IAM 用户、用户组、角色或资源的策略的操作:GetContextKeysForPrincipalPolicy 和 SimulatePrincipalPolicy。这些操作可能会显示分配给其他 IAM 实体的权限,因此建议限制可以使用这些操作的用户。
这些操作还支持:
-
SimulateCustomPolicy 上的
OrderedOrganizationPolicyInputList,您可以在不使用实际主体的情况下模拟组织 SCP 层次结构的效果。 -
SimulatePrincipalPolicy 上的
PolicyExclusionList,您可以测试“如果我删除此策略会怎样?” 的使用场景,无需更改附加到主体的策略。 -
响应会为每个操作返回一个
EvaluationResult,顶层为汇总决策,ResourceSpecificResults中为每个资源的详细信息。
AWS CLI 和 AWS API 参考
有关模拟策略的 AWS CLI 命令示例,请参阅以下内容: