AWS SSO权限集配置问题:允许全量操作但限制特定IAM角色操作后出现iam:GetAccountSummary显式拒绝错误
解决AWS SSO权限集的显式拒绝问题
咱们先拆解你遇到的核心矛盾:你的自定义策略明明允许了所有操作,但执行iam:GetAccountSummary时却收到了显式拒绝——而你的Deny语句里根本没包含这个操作。这说明肯定有其他地方的Deny策略在起作用,毕竟AWS权限逻辑里显式拒绝的优先级最高,哪怕有Allow语句也会被直接覆盖。
下面是一步步排查和解决的思路:
1. 检查权限集附加的所有策略
你的AWS SSO权限集可能除了自己写的自定义策略,还附加了其他策略(比如AWS托管策略、其他团队共享的自定义策略)。要确认是否有其他策略包含了Deny iam:GetAccountSummary的语句:
- 登录AWS管理控制台,进入IAM Identity Center(原SSO)
- 找到你的目标权限集,查看「权限」标签下的所有附加策略
- 逐一检查每个策略的内容,重点找是否存在针对
iam:GetAccountSummary的Deny规则
2. 排查会话策略(如果有配置)
如果你的权限集在分配给用户/组时,额外配置了会话策略(Session Policy),这个策略会进一步缩小权限范围。如果会话策略里有Denyiam:GetAccountSummary的语句,也会触发显式拒绝:
- 在IAM Identity Center的权限集分配页面,查看是否设置了会话策略
- 检查会话策略的具体内容,确认是否包含相关Deny规则
3. 优化自定义策略(可选,避免潜在冲突)
虽然当前问题不是来自你的自定义策略,但可以优化一下你的Deny语句,确保它只精准作用于目标角色的修改操作,不会意外干扰其他全局操作:
- 你的Deny语句里的
Resource范围是特定角色(AWSReservedSSO_SK-*和AWSServiceRole*),而iam:GetAccountSummary是全局操作(资源为*),所以你的自定义策略不会影响它。但如果你想明确排除这个操作被其他规则干扰,可以在自定义策略里添加一个单独的Allow语句放在Deny之前:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*" }, { "Effect": "Allow", "Action": "iam:GetAccountSummary", "Resource": "*" }, { "Effect": "Deny", "Action": [ "iam:UpdateAssumeRolePolicy", "iam:DetachRolePolicy", "iam:DeleteRolePolicy", "iam:PutRolePermissionsBoundary", "iam:DeleteRole", "iam:AttachRolePolicy", "iam:DeleteServiceLinkedRole", "iam:PutRolePolicy", "iam:DeleteRolePermissionsBoundary" ], "Resource": [ "arn:aws:iam::XXXXXX:role/AWSReservedSSO_SK-*", "arn:aws:iam::XXXXXX:role/AWSServiceRole*" ] } ] }
注意:这个额外的Allow语句主要是为了覆盖其他可能存在的Deny,但核心还是要找到触发显式拒绝的根源策略。
4. 用IAM Access Analyzer快速诊断
AWS的IAM Access Analyzer可以帮你一键定位权限冲突:
- 打开IAM Access Analyzer控制台
- 选择「分析权限」,输入你的用户ARN和
iam:GetAccountSummary操作 - 工具会列出所有影响该操作的策略,包括导致显式拒绝的具体规则
最后再敲个重点:显式拒绝一定来自某个策略的Deny语句,所以优先找到那个隐藏的规则,再针对性调整,比盲目修改自定义策略更高效。
内容的提问来源于stack exchange,提问作者TheDataGuy
相关产品推荐
相关产品推荐

