AWS-EKS-10--EKS权限管理(上)向其他 IAM 用户授予权限
摘要
-
本文介绍EKS集群如何向其他 IAM 用户授予权限
-
参考资料:
EKS权限管理
-
创建EKS集群后,默认只有创建集群的 IAM 主体可以访问并管理EKS集群,实际业务中,我们需要将EKS的全部或部分权限分配给指定的用户,就需要对该用户进行授权。
-
对于 AWS EKS 的权限管理,主要有以下三个方面内容
- IAM 用户、Role 或者 Account 访问 EKS 相关资源。这里的资源是指 EKS 集群本身的 AWS 资源。比如,EKS 集群信息配置,EC2 节点等等,这里不包括 K8s 中的资源。这部分直接在AWS IAM中进行授权即可。
- IAM 用户、Role 或者 Account 访问 EKS K8s 资源,这里的资源是指 K8s 内部的资源,比如,K8s 内部的 service account、deployment、service 等等。本章重点讲这部分内容。
- K8s 内部 Pod 调用 AWS 的资源。比如,通过创建 Ingress 来创建 AWS ALB。这部分在EKS权限管理(下)Pod 是如何调用 AWS 资源的中介绍。
-
与IAM用户授权相关的是头两条,即要使 IAM 用户能够访问 EKS 集群本身的 AWS 资源,又要能够访问 K8s 内部的资源。
创建 IAM 用户并授权其访问EKS资源
-
关于如何在IAM中创建用户并授予相应的策略属于AWS IAM权限管理的范畴,不是本文的重点,作者默认读者已掌握这些内容,重点理解用户、组、角色和策略之间的关系。读者也可以参考一文搞懂 AWS IAM 权限 基础篇上 理论
-
在AWS控制台中创建一个用户
ekstest
,为了保证最小权限原则,这里只为其分配一个内联策略(只针对关联用户),同时为其创建访问密钥。注意必须为用户至少分配如下策略,以保证IAM用户有权限查看 EKS 集群,否则使用密钥无法通过命令行连通EKS。
1 | { |
向 IAM 用户授予访问K8s资源的权限
-
创建集群的 IAM 主体是唯一可以访问集群的主体。向其他 IAM 主体授予权限,以便它们可以访问您的集群。
-
ConfigMap aws-auth 在我们向 EKS 添加 node 时就自动创建了,它的作用是允许 node 加入集群。
-
aws-auth 的另一个作用是控制 AWS 用户或者 role 访问 K8s 内部的资源(准确的说是把外部 IAM 用户与 K8s 内部用户做映射)。
-
现在 aws-auth 中只有一个 mapRoles,这里的 rolearn 就是我们之前创建EKS时自动创建的,为 EC2 提供权限。
1 | # 通过eksctl查看 ConfigMap 中的aws-auth映射 |
-
授权–1.角色与组绑定
1 | # 所有命名空间中的 Kubernetes 资源,文件中的组名称为 eks-console-dashboard-full-access-group |
-
查看上面的yaml文件,可以看到里面定义了
ClusterRole
和ClusterRoleBinding
以及Role
和RoleBinding
,这是K8s中的RBAC(Role-based access control )
授权模块中的4个对象:Role
:设置对 K8s 资源访问的具体权限,与某个 namesapce 相关联ClusterRole
:与Role
类似,区别是不与某个 namepsace 相关联,针对整个 ClusterRoleBinding
:把User|Group|ServiceAccount
和Role
绑定,使其获得具体权限ClusterRoleBinding
:与RoleBinding
类似,把User|Group|ServiceAccount
和ClusterRole
绑定,区别是不与某个 namepsace 相关联
1 | # 查看集群角色及其绑定 |
-
授权–2.用户与组绑定
1 | # 为用户添加映射,这里为用户 ekstest 添加权限策略 |
-
此时使用 ekstest 的访问密钥就可以通过命令行访问eks了
1 | # 配置aws访问密钥 |
-
此时 ekstest 还不能通过aws控制台中访问eks资源,还需要为其在IAM中授予必要的EKS策略,下面的策略是授予IAM用户对EKS的完全访问权限。
1 | { |
取消授权
1 | $ eksctl delete iamidentitymapping \ |