如何授权联邦用户访问Azure DevOps Pipeline创建的EKS集群?
解决EKS集群kubectl未授权访问问题
一、给已存在的EKS集群添加你的角色权限
如果集群已经创建,你需要借助拥有集群管理员权限的实体(比如创建集群的Azure DevOps Pipeline角色)来配置RBAC:
先准备一个ClusterRoleBinding配置文件(命名为
add-federated-admin.yaml):apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: federated-admins-cluster-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: arn:aws:sts:************:assumed-role/admins/{accountname}注意:这里的
name必须是你STS返回的完整ARN,EKS会将IAM实体的ARN作为Kubernetes中的用户标识。让Pipeline执行这个配置(因为你无法直接访问代理,只能通过Pipeline操作):
在Azure DevOps Pipeline中添加步骤,运行kubectl apply -f add-federated-admin.yaml,确保Pipeline使用的是创建集群的IAM凭据(它拥有集群管理员权限)。配置本地kubectl使用你的角色:
本地执行以下命令更新kubeconfig,关联你的admins角色:aws eks update-kubeconfig --region <你的集群区域> --name <集群名称> --role-arn arn:aws:iam::************:role/admins这里用的是你角色的ARN(而非assumed-role的ARN),命令会自动处理STS角色扮演流程,之后你就能用kubectl访问集群了。
二、用Terraform重新创建集群时预先配置权限
如果要重新创建集群,直接在Terraform配置中添加IAM授权映射,避免后续权限问题:
使用aws_aws_auth_configmap资源(EKS专属的IAM-K8s授权配置),把你的admins角色加入system:masters组(拥有集群最高权限):
resource "aws_aws_auth_configmap" "eks_auth" { cluster_name = aws_eks_cluster.my_eks_cluster.name # 授权你的admins角色 role_mappings { rolearn = "arn:aws:iam::************:role/admins" username = "admin:{{SessionName}}" # SessionName会自动替换为你的accountname groups = [ "system:masters" ] } # 保留创建集群的角色权限,避免Pipeline失去访问权 role_mappings { rolearn = aws_iam_role.eks_cluster_creator_role.arn username = "eks-cluster-creator" groups = [ "system:masters" ] } }
这样集群创建完成后,你扮演admins角色时就能直接用kubectl访问,无需额外配置。
内容的提问来源于stack exchange,提问作者gklucard
相关产品推荐
相关产品推荐

