如何为同VPC内无角色密钥的EC2实例启用EKS集群kubectl访问权限
是的,你可以通过创建IAM身份(用户或角色)并添加到aws-auth ConfigMap的方式完成EKS身份认证,实现同VPC EC2实例访问集群的需求。针对你的场景,直接使用绑定到EC2的IAM角色配置会比创建IAM用户更简便,不需要额外生成和管理访问密钥。
步骤1:获取EC2实例绑定的IAM角色ARN
登录到EC2实例后执行以下命令,即可获得当前实例正在使用的IAM角色ARN:aws sts get-caller-identity
输出中的Arn字段格式一般为arn:aws:iam::[你的AWS账号ID]:role/[角色名],记录该值备用。
步骤2:更新EKS的aws-auth ConfigMap
使用拥有EKS集群管理员权限的身份执行以下命令,编辑ConfigMap:kubectl edit configmap aws-auth -n kube-system
在mapRoles列表下新增你的EC2角色配置,参考如下:
请替换<>包裹的内容为你的实际值,原有配置不要修改或删除
mapRoles: | - groups: - system:masters rolearn: arn:aws:iam::<AWS账号ID>:role/<EC2绑定的IAM角色名> username: ec2-admin # 原有其他role配置保留
如果不需要给该实例授予集群全权限,可以自定义Kubernetes RBAC规则后替换system:masters为你自定义的权限组即可。
步骤3:验证集群访问
回到EC2实例执行以下命令生成kubeconfig配置:aws eks update-kubeconfig --name <你的EKS集群名> --region <集群所在区域>
执行kubectl get nodes验证访问是否正常,能正常返回节点信息即配置成功。
你之前给EC2角色授予的AWS管理员权限属于IAM层面的权限,EKS的RBAC权限体系独立于AWS IAM,必须通过aws-auth ConfigMap完成IAM身份到Kubernetes权限的映射后才能生效。
如果使用SSM会话登录EC2,可执行aws sts get-caller-identity确认当前使用的身份ARN是否和你添加到aws-auth的角色ARN一致,避免SSM会话身份覆盖EC2实例角色的情况。
内容的提问来源于stack exchange,提问作者ravi pratap

