如何列出AWS账户中IAM用户的所有权限及对应可访问资源?
如何列出IAM用户的所有权限及可访问资源(含跨账户场景)
嘿,这个问题确实戳中了IAM管理的痛点——直接手动梳理IAM策略、资源策略,尤其是跨账户的情况,简直像在解一团乱麻。不过AWS提供了几个原生工具和方法,能帮你高效理清用户的有效权限和对应的资源,我给你详细拆解下:
一、用IAM Access Analyzer生成权限报告(最推荐)
IAM Access Analyzer能综合评估IAM策略、资源策略、组织SCP、权限边界等所有影响权限的因素,包括跨账户的资源访问权限,生成直观的权限报告。
操作步骤:
- 登录AWS控制台,进入IAM服务,找到左侧菜单的「Access Analyzer」
- 点击「创建分析器」(如果还没创建的话),选择分析器类型为「账户分析器」
- 进入分析器后,切换到「权限报告」标签,点击「生成报告」
- 在报告配置里选择「IAM用户」,可以单选或批量选择需要分析的用户
- 报告生成后,就能看到每个用户被允许的操作列表、对应的资源范围(包括跨账户资源的ARN),甚至能看到是哪条策略(IAM策略/资源策略)赋予的权限
这个工具的优势是自动处理跨账户场景——比如用户能访问另一个账户的S3桶,报告里会直接显示该桶的ARN,以及双方策略的匹配逻辑,不用你手动来回核对两个账户的策略。
二、用AWS CLI批量获取并解析策略
如果你需要自动化批量处理所有用户的权限,可以结合AWS CLI和脚本工具(比如jq)来实现:
- 先列出账户内所有IAM用户:
aws iam list-users --query 'Users[*].UserName' --output text
- 对每个用户,获取其关联的内联策略和托管策略:
- 获取内联策略列表:
aws iam list-user-policies --user-name <USER_NAME>
- 获取托管策略列表:
aws iam list-attached-user-policies --user-name <USER_NAME>
- 获取具体策略内容:
- 内联策略内容:
aws iam get-user-policy --user-name <USER_NAME> --policy-name <POLICY_NAME>
- 托管策略内容:
aws iam get-policy-version --policy-arn <POLICY_ARN> --version-id v1
- 解析策略:
你可以用jq来提取策略里的Effect、Action、Resource字段,比如:
aws iam get-user-policy --user-name <USER_NAME> --policy-name <POLICY_NAME> | jq '.PolicyDocument.Statement[] | {Effect, Action, Resource}'
⚠️ 注意:这种方法只能获取本账户的IAM策略,跨账户的资源策略需要结合Access Analyzer的结果,或者手动去目标账户查看资源策略(如果你有权限的话)。
三、用IAM Policy Simulator验证特定权限
如果你想验证某个用户是否能访问特定资源(比如跨账户的EC2实例或S3桶),可以用IAM Policy Simulator:
- 登录IAM控制台,进入「策略模拟器」
- 选择要测试的IAM用户,添加要测试的服务(比如S3、EC2)和操作(比如
s3:GetObject) - 在「资源」栏输入目标资源的ARN(包括跨账户的ARN,比如
arn:aws:s3:::another-account-bucket/*) - 点击「运行模拟」,就能看到该操作是否被允许,以及拒绝/允许的原因(来自哪条策略)
这个工具适合针对性验证,而不是批量导出所有权限。
跨账户场景的额外提示
跨账户权限的生效需要满足两个条件:
- 本账户的IAM策略允许用户执行该操作并访问目标资源
- 目标账户的资源策略允许该用户(或其所在账户)访问资源
IAM Access Analyzer会自动检查这两个条件,所以是处理跨账户权限最省心的工具。
内容的提问来源于stack exchange,提问作者Arun
相关产品推荐
相关产品推荐

