如何查看AWS特定IAM访问密钥关联权限及控制台未显示问题排查
别着急,这俩问题都是AWS日常管理里经常碰到的场景,我给你拆解一下解决方案:
首先得明确:IAM访问密钥是和IAM用户(或不推荐使用的根用户)绑定的,所以要查权限/角色,得先找到密钥对应的用户,再顺藤摸瓜:
第一步:用CLI定位密钥所属用户
如果你有管理员权限,直接运行下面的命令(把AKIAXXXXXXXXXXXXXX替换成你的目标访问密钥ID):aws iam get-access-key-last-used --access-key-id AKIAXXXXXXXXXXXXXX输出里的
UserName字段就是这个密钥的所属用户——如果是根用户的密钥,UserName会显示为你的根账户ID(比如123456789012)。第二步:查看该用户的权限
找到用户后,就能查它的所有权限了:- 查看附加的托管策略:
这个会列出所有直接绑定到用户的AWS官方托管策略(比如aws iam list-attached-user-policies --user-name <你的用户名>AmazonS3FullAccess这类)。 - 查看内联策略:
先列出用户的内联策略名称:
再用下面的命令查看具体策略内容:aws iam list-user-policies --user-name <你的用户名>aws iam get-user-policy --user-name <你的用户名> --policy-name <策略名称> - 查看用户所属组的权限:
如果用户属于某个IAM组,组的权限会自动继承给用户,先查用户所属组:
再对每个组运行aws iam list-groups-for-user --user-name <你的用户名>aws iam list-attached-group-policies --group-name <组名>查看组的托管策略。
- 查看附加的托管策略:
第三步:查看关联的角色
注意:访问密钥本身不直接绑定角色,而是IAM用户可以扮演角色。要查用户能扮演哪些角色,可以:- 用命令模拟用户权限,检查是否有
sts:AssumeRole权限:aws iam simulate-principal-policy --policy-source-arn arn:aws:iam::<账户ID>:user/<用户名> --action-names sts:AssumeRole - 或者在IAM控制台找到该用户,切换到权限标签,查看所有直接/间接权限,里面会包含可扮演的角色信息。
- 用命令模拟用户权限,检查是否有
这种情况大概率是你没找对地方,或者权限限制了你的视野,按下面的步骤排查:
先确认密钥所属账户和用户
不管控制台能不能看到,先运行这个命令(需要管理员权限):aws iam get-access-key-last-used --access-key-id AKIAXXXXXXXXXXXXXX输出里的
UserName和Account会直接告诉你密钥属于哪个用户、哪个账户——很多时候是你漏看了某个命名比较隐蔽的IAM用户。检查是否是根账户密钥
如果UserName显示为你的根账户ID,那这是根账户的访问密钥。别去IAM控制台找,要去我的安全凭证页面(点击控制台右上角的账户名→我的安全凭证),在访问密钥部分查看——根密钥平时很少用,容易被忽略。排查IAM用户的可见性问题
如果返回的是某个IAM用户名,但你在控制台搜不到,可能是你的管理员账户被限制了权限?比如缺少iam:ListUsers或iam:GetUser权限。这时候需要用拥有完整IAM管理权限的账户来排查。确认是否属于跨账户/组织成员账户
运行aws sts get-caller-identity用该密钥直接调用,返回的Account字段就是密钥所属的账户ID——如果和你当前操作的账户不一致,那它属于Organizations里的其他成员账户,或者完全独立的另一个AWS账户。排除临时凭证的可能
你说密钥被定期使用,临时凭证(比如角色的临时密钥)最长有效期只有12小时,所以大概率是长期IAM密钥。但如果是临时的,aws sts get-caller-identity返回的Arn会是arn:aws:sts::<账户ID>:assumed-role/<角色名>/<会话名>,这时候要找对应的角色即可。
内容的提问来源于stack exchange,提问作者marcodv

