AWS EC2实例附加全权限角色后访问EKS触发AssumeRole访问拒绝错误
问题排查与解决步骤
1. 核心问题原因说明
报错本质是EC2当前绑定的dev-server-role没有权限调用sts:AssumeRole接口,扮演你在update-kubeconfig中指定的testrole,需要从两端配置验证:
- 首先验证
testrole的信任关系配置
常见错误:直接添加EC2实例ARN到角色信任策略是无效的,STS请求的主体是EC2所扮演的IAM角色,不是EC2实例本身
信任策略里的Principal应该填写dev-server-role的ARN,示例信任策略如下:
注意:如果两个角色属于同一个AWS账号,不需要额外配置外部ID等参数,跨账号才需要额外配置{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::769379794363:role/dev-server-role" }, "Action": "sts:AssumeRole" } ] } - 其次验证
dev-server-role的权限策略
需要给dev-server-role添加允许assumetestrole的权限,示例策略如下:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::XXXXXXXXXXXX:role/testrole" } ] }
2. 验证权限配置生效
配置修改完成后,等待1~2分钟权限生效,在EC2内执行如下命令验证assume角色是否正常:
aws sts assume-role --role-arn arn:aws:iam::XXXXXXXXXXXX:role/testrole --role-session-name test-eks-session
如果命令正常返回凭证信息,说明assume角色配置已经生效。
3. 重新生成kubeconfig并验证访问
执行如下命令重新生成kubeconfig:
aws eks update-kubeconfig --name eks-cluster-name --region aws-region --role-arn arn:aws:iam::XXXXXXXXXXXX:role/testrole
之后执行kubectl get nodes验证集群访问是否正常,如果仍然报错需要确认testrole是否已经被添加到EKS集群的aws-auth ConfigMap中,操作如下:
- 先使用集群创建者权限或者集群管理员权限查询当前aws-auth配置:
kubectl get configmap aws-auth -n kube-system -o yaml - 确认
mapRoles字段中已经添加了testrole的权限配置,示例如下:mapRoles: | - groups: - system:masters rolearn: arn:aws:iam::XXXXXXXXXXXX:role/testrole username: testrole
4. 可选简化配置方案
如果你的EC2绑定的dev-server-role本身已经有EKS相关的全量权限,不需要额外扮演testrole的话,可以去掉update-kubeconfig命令中的--role-arn参数,直接用dev-server-role访问EKS,只需要把dev-server-role添加到EKS的aws-auth ConfigMap中即可。
内容的提问来源于stack exchange,提问作者Vaishnav
相关产品推荐
相关产品推荐

