使用 IAM 策略模拟器测试 IAM 策略
Posted cloudrivers
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 IAM 策略模拟器测试 IAM 策略相关的知识,希望对你有一定的参考价值。
使用 IAM 策略模拟器,您可以通过以下方式对 IAM 和基于资源的策略进行测试和问题排查:
-
测试附加到您 AWS 账户中的 IAM 用户、组或角色的策略。如果多个策略附加到用户、组或角色,您可以测试所有策略,也可以选择单个策略进行测试。您可以测试为特定资源所选的策略允许或拒绝哪些操作。
-
测试附加到 AWS 资源(如 Amazon S3 存储桶、Amazon SQS 队列、Amazon SNS 主题或 Amazon S3 Glacier 文件库)的策略。
-
如果您的 AWS 账户是 AWS Organizations 中的组织的成员,则您可以测试服务控制策略 (SCP) 对您的 IAM 策略和资源策略的影响。
-
通过将尚未附加到用户、组或角色的新策略键入或复制到模拟器中,对这些新策略进行测试。这些仅在模拟中使用,不会保存。请注意:您不能将基于资源的策略键入或者复制到模拟器中。要在模拟器中使用基于资源的策略,您必须将相关资源包含在模拟中,并且选中复选框将该资源的策略包含在模拟中。
-
使用所选服务、操作和资源测试策略。例如,您可以通过测试确保策略允许某个实体在 Amazon S3 服务中对特定存储桶执行
ListAllMyBuckets
、CreateBucket
和DeleteBucket
操作。 -
通过提供上下文键 (如 IP 地址或日期,包含在被测试策略的
Condition
元素中) 模拟真实方案。 -
识别策略中导致允许或拒绝访问特定资源或操作的特定语句。
-
IAM 策略模拟器的工作方式
模拟器评估您选择的策略,为您指定的每项操作确定有效权限。模拟器使用真实 AWS 服务请求期间所用的同一策略评估引擎。只是在以下几方面与真实 AWS 环境不同:
-
模拟器不发出真实 AWS 服务请求,因此,您可以安全地测试在真实 AWS 环境中会进行不需要的更改的请求。
-
因为模拟器不模拟运行所选操作,所以它不能报告对模拟请求的任何响应。返回的唯一结果是请求的操作是被允许还是被拒绝。
-
如果您在模拟器内编辑策略,所做的更改只影响模拟器。您的 AWS 账户中的相应策略保持不变。
使用 IAM 策略模拟器(AWS CLI 和 AWS API)
策略模拟器命令通常需要调用 API 操作以执行两项操作:
-
评估策略并返回策略引用的上下文键的列表。您需要了解引用了哪些上下文键,以便在下一个步骤中提供它们的值。
-
模拟策略,在模拟过程中提供操作、资源和上下文键的列表。
出于安全原因,API 操作已分为两个组:
-
只对以字符串形式直接传递给 API 的策略进行模拟的 API 操作。此组包括 GetContextKeysForCustomPolicy 和 SimulateCustomPolicy。
-
对附加到指定 IAM 用户、组、角色或资源的策略进行模拟的 API 操作。因为这些 API 操作可以获得分配给其他 IAM 实体的权限的详细信息,所以您应考虑限制对这些 API 操作的访问。此组包括 GetContextKeysForPrincipalPolicy 和 SimulatePrincipalPolicy。有关限制对 API 操作的访问的更多信息,请参阅示例策略:AWS Identity and Access Management (IAM)。
在这两种情况下,API 操作都将模拟一个或多个策略对操作和资源的列表的影响。每个操作都与每个资源配对,模拟将确定策略对该资源是允许还是拒绝该操作。您还可以为您的策略引用的任何上下文键提供值。通过首先调用
GetContextKeysForCustomPolicy
或GetContextKeysForPrincipalPolicy
,可以获取策略引用的上下文密钥的列表。如果不提供上下文键值,模拟仍会运行。但结果可能不可靠,这是因为模拟器无法在评估中包含该上下文键。获取上下文密钥的列表(AWS CLI、AWS API)
使用以下命令评估策略列表,返回策略中使用的上下文键的列表。
-
以上是关于使用 IAM 策略模拟器测试 IAM 策略的主要内容,如果未能解决你的问题,请参考以下文章
AWS IAM 策略模拟器:如果至少有一个区域允许操作,如何返回 true
Cloudformation 的最低权限 AWS IAM 策略
使用 Pulumi 将 IAM 托管策略附加到 IAM 用户不起作用
创建附加到用户的 IAM 策略,限制用户使用某些操作创建自定义托管策略
使用 IAM 策略创建堆栈时出现 InsufficientCapabilitiesException [CAPABILITY_NAMED_IAM]