为其他用户授权使用已经创建的EKS
背景
使用用户或角色创建Amazon EKS 集群成功后,创建集群的 IAM 实体(用户或角色)将添加到 Kubernetes RBAC 授权表作为管理员(具有 system:master
权限),这也就意味着仅该 IAM 实体(用户或角色)可以使用 kubectl 调用 Kubernetes API(谁创建,谁就是管理员)。在生产环境上,偶尔我们研发需要定位生产上的问题,但是由于研发并不是EKS 的创建者,没有对应权限,所以他并不能通过kubectl 来操作已有的EKS,因此在本篇将介绍如何为其他用户授权使用已经创建的EKS
思路
有两种方式可以让非EKS创建者执行kubectl 访问EKS
方法一:给用户授权,让他变成k8s 的system:masters
方法二:创建角色,给角色授权,让角色成为system:masters,
通过创建角色,给角色授权,再将角色附加到EC2上,用户通过登录EC2 后可以执行kubectl 访问 EKS,这是一种比较安全的做法,限制用户只能在某一台机器上操作,推荐使用这个方法
示演
步骤一:使用创建者对目标用户或角色进行授权
由于只有创建者是EKS 的管理员,所以最开始只能通过创建者来进行授权。注意,这里的授权与IAM 中的授权不一样,IAM 中,我们是通过策略定义了对资源的操作权限,再将策略附加给用户或角色,使用户或角色有了对资源的操作权限,在EKS 中,我们需要将用户或角色添加到Kubernetes RBAC表中进行授权
在这里我们假设是用户A创建的EKS,在操作机器上已经配置用户A 的aksk到AWS CLI 中,通过下列命令将目标eks-test2 集群与操作机器关联
注:必须为用户分配eks-test2的 eks:DescribeCluster
IAM 权限
创建aws-auth.yaml文件,如果是给用户授权,则在mapUsers 下配置对应的用户ARN,然后在group下配置system:masters,如果是给角色授权,在mapRoles 下配置对应的角色ARN,然后在group下设置system:masters,代表这个角色可以控制eks
执行以下命令将用户或角色添加到Kubernetes RBAC中
验证权限已经添加到Kubernetes RBAC中
执行上面命令,我们可以看到前面配置的用户,角色已被添加到Kubernetes RBAC
步骤二:使用被授权的用户或角色进行操作eks
这里使用 test 用户来进行验证,首先将test aksk 配置在 cli 中, 配置后通过aws sts get-caller-identity查看当前用户是否配置正确
然后将eks 集群与test 用户操作的机器进行关联
执行kubectl 命令,看到可以通过
对比测试,我们使用另一个没有权限的 用户执行
如果用户没有被添加到Kubernetes RBAC ,执行kubectl 命令操作eks 时会提示 error: You must be logged in to the server (Unauthorized)
总结
EKS 创建成功后,只有创建者(用户或角色)有权限通过kubectl 操作eks
最开始,只能通过创建者对用户或角色进行授权操作eks
授权成功后,被授权用户需要在操作机器上执行
aws eks --region regioncode update-kubeconfig --name cluster-name
命令将集群与机器关联
推荐使用角色的方式授权,将角色附加在指定的EC2 上,控制用户只能通过这台EC2 操作eks
最后更新于