AWS SSO授权EKS调用sts:AssumeRole失败问题排查
问题根因
你当前已经通过AWS SSO获取了AWSReservedSSO_DeveloperReadonly_a6a1426b0fdf9f87角色的有效凭证,但~/.kube/config中配置了--role参数,导致aws eks get-token命令会主动尝试用当前已生效的角色凭证,再次Assume同名称角色,而SSO默认生成的角色没有配置自身Assume自己的权限,因此触发AccessDenied报错。
解决步骤
- 修改kubeconfig配置,删除多余的--role参数
打开~/.kube/config,找到users.ro.user.exec.args段,删除--role和对应的角色ARN两行,修改后配置如下:
args: - --region - us-east-2 - eks - get-token - --cluster-name - foo
修改完成后可先手动执行命令验证token生成是否正常:aws eks get-token --cluster-name foo --region us-east-2
如果能正常返回token结构体,再执行kubectl get pods验证即可。
- (可选)如果删除参数后仍报EKS权限错误,检查aws-auth ConfigMap配置
你当前aws-auth中配置的roleARN没有带SSO角色的默认路径前缀,请登录IAM控制台找到对应AWSReservedSSO_DeveloperReadonly_a6a1426b0fdf9f87角色,复制完整的ARN(格式为arn:aws:iam::<账号ID>:role/aws-reserved/sso.amazonaws.com/<区域>/AWSReservedSSO_DeveloperReadonly_a6a1426b0fdf9f87),替换aws-auth ConfigMap中mapRoles段对应的rolearn值即可。
补充说明
该问题通常是生成kubeconfig时额外添加了--role-arn参数导致,后续如果使用当前已登录的SSO身份直接访问EKS,执行aws eks update-kubeconfig --name <集群名>时不需要加--role-arn参数,生成的配置就不会携带多余的--role字段。
内容的提问来源于stack exchange,提问作者austin327
相关产品推荐
相关产品推荐

