使用AWS API:获取IAM用户当前生效的IAM策略文档

6
我在寻找正确的API调用来回答这个问题:给定一个IAM用户,它所遵循的有效IAM策略文档是什么?
看起来我可以通过在客户端连接各种API调用来完成上述操作:
1. aws iam list-groups-for-user --user-name my-user 2. 对于每个返回的组:aws iam list-attached-group-policies --group-name my-group 3. aws iam list-attached-user-policies --user-name my-user 4. 将第2步和第3步返回的策略连接起来。 5. 对于每个策略:aws iam get-policy --policy-arn my-policy-arn 6. 对于每个策略再次调用:aws iam get-policy-version --policy-arn my-policy-arn -version-id my-version 这至少需要5个API调用,最多需要无限次调用。我不愿意实现这样的逻辑,因为一个用户属于多个组,并且那些组可能包含数十个或数百个策略。
肯定有一个单一的API端点可以满足我的需求,但我不知道是否存在这样的接口,比如:aws iam get-effective-user-policy --user-name my-user

你能否澄清什么是有效的 IAM 策略文档? - jellycsc
你的六个步骤并不能提供完全有效的权限,最多只能涵盖一些常见情况。你仍然缺少任何可能的SCP、权限边界以及账户内外每个资源的基于资源的策略。 - Marcin
我相信你正在尝试查找应用于用户的合成IAM策略,类似于所有策略(IAM用户、组、边界、KMS密钥、S3 RBAC等)的组合...如果是这种情况:它不存在。对于每个API调用,它们都会重新进行整个授权过程。你能够接近的是https://aws.amazon.com/about-aws/whats-new/2019/12/introducing-aws-identity-and-access-management-access-analyzer/。 - Clément Duveau
4个回答

2
这在AWS中并不是真正支持的,因为IAM主体可以执行的操作分布在AWS中;它们没有存储在任何一个地方。访问决策在发出请求时应用,因此您应该根据发出请求来考虑IAM策略。
当AWS API接收到请求时,高层次上的内容会介入以确定调用是否被授权:
  • 基于身份的策略(附加到用户、他们的组或角色的策略)
  • 基于资源的策略(附加到用户请求的资源上;例如S3存储桶或EC2实例)
  • IAM权限边界
  • 服务控制策略(SCP)(通过AWS组织定义)
  • 会话策略(在使用临时凭证和AssumeRole创建会话时应用)
以上每个都需要Allow用户访问操作。
所以,你可以看到,实际授权的访问权限分散在很多地方。上面的列表仅适用于单个帐户。跨帐户访问甚至更加分散。
如果您只对基于身份的策略感兴趣,那么您正在进行的 API 调用已经涵盖了它,但是任何其他调用都可能具有拒绝效果,即使基于身份的策略允许该操作,因此您将只能获得部分信息。
根据您使用此功能的目的,我建议不要提前获取用户的完整访问权限,因为您实质上将查询每个用户的每个 AWS 服务。唯一的例外是安全审计,在这种情况下,有一系列工具可以尝试为您完成此操作,但请注意:IAM 是一个复杂的问题,对其进行审计是一个棘手的问题。

1
我对你的使用情况没有深入了解,但根据我的经验,大多数情况下可以回滚。为了检查策略是否符合要求,请检查用户是否具有关键权限...... 这可能不适用于您的情况,但我仍然想分享一下。
为了检查这些内容,可以使用AWS Config来评估用户是否具有调用特定动作的权限。可以使用AWS IAM策略模拟器API来完成此操作。

https://docs.aws.amazon.com/IAM/latest/APIReference/API_SimulatePrincipalPolicy.html


1

不必只有一个有效的用户策略。实际上,应用的策略是直接或通过组分配给IAM用户的所有策略的总和。根据您的实际用例,它可能是单个策略文档,也可能不是。

请记住,如果一个规则允许执行某个操作,而另一个规则禁止该操作,则拒绝规则将获胜。

您可以在IAM控制台中模拟用户是否能够执行某个操作。


是的,我认为我想要的是一个包含所有规则总和的响应,就像你说的那样。但听起来可能不存在这样的东西。 - Daniel Patrick
我还没有遇到过这种情况。只需查看IAM用户的个人资料,您就可以直接了解应用于该用户及其所在组的策略。这是我现在能提供的所有帮助。 - Oscar De León

1
如果您只对某些AWS服务的权限感兴趣,您也可以考虑使用下面的命令。但是,我认为您不会找到一个“一站式商店”来获取所有权限的API调用。 aws iam list-policies-granting-service-access

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接