从CodeBuild访问EKS集群未授权 配置权限后仍无法解决求助
排查与解决方案
核心问题点
CodeBuild执行aws eks update-kubeconfig时默认会在kubeconfig的认证参数里添加--role标记,触发STS角色代入后生成的ARN为会话格式(arn:aws:sts::账号ID:assumed-role/角色名/会话名),与aws-auth ConfigMap中配置的CodeBuild服务角色原生ARN不匹配,导致EKS鉴权失败。
验证步骤
在buildspec.yml的pre_build阶段新增如下命令,输出当前调用者身份确认ARN格式:
aws sts get-caller-identity
若返回ARN为assumed-role开头的会话格式即可确认问题匹配。
修复方案
方案1(优先推荐)
修改buildspec.yml中的kubeconfig更新命令,禁用自动添加--role参数:
aws eks --region eu-west-2 update-kubeconfig --name <你的集群名称> --role-arn ""
该方案保持aws-auth ConfigMap原有配置不变,仅调整认证逻辑,权限范围可控。
方案2
检查CodeBuild服务角色的信任策略,确认已允许codebuild.amazonaws.com服务代入角色,信任策略示例如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "codebuild.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
方案3(不推荐生产使用)
在aws-auth ConfigMap的mapRoles中添加对会话ARN前缀的匹配规则,该方式会放宽权限范围,仅建议测试环境临时验证使用。
效果验证
修改配置后重新运行CodeBuild任务,kubectl get svc命令正常返回集群服务列表即为修复成功。
内容的提问来源于stack exchange,提问作者Lucas Scheepers
相关产品推荐
相关产品推荐

