如何理解授予用户的所有 AWS IAM 权限

How to understand all AWS IAM privileges given to users

我正在寻找一个解决方案(AWS 本机或第三方)来帮助我在拥有多个账户的大型 AWS 组织中解决问题"who can access what"。我知道如何在控制台中导航,但我发现理解每个用户拥有哪些权限非常复杂,尤其是当允许用户担任角色时。

例如:

使用 AWS 的大型受监管公司如何理解权限的授予方式?

这不是一个简单的问题,因为 AWS IAM 相当复杂。还假设您已经概述了涉及多个帐户的场景。如果这是使用 AWS 组织完成的,并牢记 AW​​S 最佳实践……用户将登录一个帐户,然后使用假定的角色访问通过组织或控制塔管理的其他帐户。

只有一个帐户可以检查和管理登录凭据,这样会有所帮助,然后您可以在其他帐户中使用可承担的角色来分发权限。这也使得在控制台内切换帐户变得容易。

没有解决方案 AFAIK 可以让您很好地了解授予特定 user/role 的权限。您必须使用不同的方法手动收集这些信息(例如,通过 AWS cli 编写脚本)。

您可以使用 IAM 访问顾问 API 自己编写解决方案脚本。 AWS 在博客 post [2] 中描述了如何确定身份可以访问哪些服务。但是,这对您的用例毫无用处,因为如 [2]:

中所述,仅支持直接策略评估

This operation does not use other policy types when determining whether a resource could access a service. These other policy types include resource-based policies, access control lists, AWS Organizations policies, IAM permissions boundaries, and AWS STS assume role policies. It only applies permissions policy logic.

另一种方法是使用 cli 命令 aws iam generate-service-last-accessed-details [3] 或使用 Access Advisor 查询 Access Advisor AWS 管理控制台 [4] 中的选项卡。但是,此解决方案也没有考虑 其他策略类型(AWS 对它们的称呼)。

我不确定为什么 AWS 不提供确定 "who can access what" 的命令,而是提供确定 "who did actually access what" 的命令。我想一个原因可能是,很容易找出谁通过什么策略访问了特定服务,但要确定用户可能访问的所有服务却非常困难。

如果您尝试使用 AWS cli 自己编写解决方案脚本,您会发现有许多边缘情况,例如在特定条件下可能承担的角色或可能递归承担的角色或基于资源的策略等等

也许将来某天 AWS 会提供一个命令来满足您的需求。也许他们已经这样做了,但它的存在并不广泛...
我知道他们正在开展一个名为 provable security [5] 的项目。它可能与这个话题有关。

参考资料

[1] https://aws.amazon.com/de/blogs/security/automate-analyzing-permissions-using-iam-access-advisor/
[2] https://docs.aws.amazon.com/cli/latest/reference/iam/list-policies-granting-service-access.html
[3] https://docs.aws.amazon.com/cli/latest/reference/iam/generate-service-last-accessed-details.html
[4] https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_access-advisor-view-data.html
[5] https://aws.amazon.com/de/security/provable-security/