AWS CodeBuild执行eks update-kubeconfig时AssumeRole权限错误求助
AWS CodeBuild中EKS配置权限问题排查与解决
关于STS临时会话ARN的说明
arn:aws:sts::12345:assumed-role/CodeBuild-API-Build-service-role/AWSCodeBuild-99c25416-7046-416e-b5d9-4bff1f4992f3是AWS生成的临时会话ARN:CodeBuild-API-Build-service-role是你给CodeBuild项目配置的服务角色AWSCodeBuild-99c25416-7046-416e-b5d9-4bff1f4992f3是该角色被CodeBuild临时调用时生成的唯一会话ID,每次CodeBuild运行都会生成不同的ID,用来标识本次临时身份的会话周期
带--role-arn参数执行报错的原因
你当前的命令是让CodeBuild正在使用的角色(CodeBuild-API-Build-service-role)自己扮演自己,这不符合IAM角色的使用逻辑,且该角色未配置允许自身调用sts:AssumeRole的权限,因此触发AccessDenied错误。
正确逻辑是:无需在aws eks update-kubeconfig中指定--role-arn参数,只需确保CodeBuild使用的服务角色本身拥有访问EKS集群的权限。
解决kubectl认证失败的问题
不带--role-arn执行aws eks update-kubeconfig成功,但kubectl报错未认证,说明CodeBuild的服务角色未被EKS集群授权访问,需完成以下两步配置:
1. 给CodeBuild服务角色添加EKS访问权限
为CodeBuild-API-Build-service-role添加IAM权限策略,至少包含以下内容:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "eks:DescribeCluster", "eks:ListClusters" ], "Resource": "arn:aws:eks:us-west-1:12345:cluster/ticket-api" } ] }
2. 将CodeBuild服务角色加入EKS集群的认证配置
编辑EKS集群的aws-auth ConfigMap,把CodeBuild服务角色ARN加入mapRoles,让EKS认可该角色的访问权限:
apiVersion: v1 kind: ConfigMap metadata: name: aws-auth namespace: kube-system data: mapRoles: | - rolearn: arn:aws:iam::12345:role/service-role/CodeBuild-API-Build-service-role username: codebuild-api-build groups: - system:masters # 可根据需求替换为更严格的权限组,比如system:viewers
操作提示:先通过
kubectl get configmap aws-auth -n kube-system -o yaml导出当前配置,修改后再用kubectl apply -f <修改后的文件>提交。
验证配置
修改完成后,在CodeBuild的buildspec.yaml中保留以下命令即可:
aws eks update-kubeconfig --name ticket-api --region us-west-1 kubectl version
重新运行CodeBuild构建,即可正常完成kubeconfig配置与kubectl认证。
内容的提问来源于stack exchange,提问作者tmp dev
相关产品推荐
相关产品推荐

