RBAC(Role-Based Access Control)是基于角色的访问控制,通过RBAC可以将权限与集群角色相关联,从而为不同角色成员配置不同的权限策略。本文主要介绍如何配置RAM用户(子账号)对应的Kubernetes集群内RBAC权限。

配置说明

  • 默认情况下RAM用户(非集群创建者)没有集群内任何Kubernetes资源的访问权限。
  • 请先确保目标RAM用户在RAM管理控制台中至少已被授予指定集群的RAM只读权限。
  • 您可以使用容器服务提供的预置角色即管理员(拥有集群内全部Kubernetes资源访问权限)、运维人员、开发人员、受限用户、和自定义角色来对目标RAM用户进行授权。
  • 对于拥有全局权限的管理员RAM用户,可以在所有集群维度进行一键授权,后续新创建的集群也会自动绑定已经授权的ClusterRole。
  • 当运维管理RAM用户给其他RAM用户进行RBAC授权时,控制台会过滤其可以授权的集群和命名空间的资源范围,只有当运维管理RAM用户有指定集群或命名空间的管理员或cluster-admin角色时,才可以给其他RAM用户进行RBAC授权。
  • 支持对多个目标RAM用户进行批量授权。
  • 由于阿里云RAM的安全限制,当您通过容器服务控制台的授权配置涉及到RAM用户RAM授权的修改时,需要您按照页面上给出的参考策略内容和操作说明,在RAM控制台进行目标RAM用户的手动授权。

操作步骤

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击授权管理
  3. 授权管理页面中的选择子账号页签列表中选择需要授权的RAM用户,单击管理权限,进入集群RBAC配置页签。
    说明 如果您使用RAM用户授权,请先确保该RAM用户已完成集群RBAC配置 自定义RAM授权策略文档中的RAM授权,同时已被授予集群内RBAC管理员权限或cluster-admin角色。
  4. 单击集群RBAC配置页面的加号,添加集群或命名空间级别的权限配置,并选择相应的预置角色;也可以单击配置行首的减号删除目标角色,完成后单击下一步
    说明 当前针对RAM用户的授权,支持在一个目标集群或命名空间上授予一个预置角色和多个自定义角色。
    角色权限配置
    集群和命名空间的预置角色定义可查看下面的角色权限说明:
    表 1. 角色权限说明
    角色 集群内RBAC权限
    管理员 对所有命名空间下所有资源的读写权限。
    运维人员 对所有命名空间下控制台可见Kubernetes资源的读写权限,对集群节点、存储卷、命名空间、配额的只读权限。
    开发人员 对所有命名空间或所选命名空间下控制台可见Kubernetes资源的读写权限。
    受限用户 对所有命名空间或所选命名空间下控制台可见Kubernetes资源的只读权限。
    自定义 权限由您所选择的ClusterRole决定,请在确定所选ClusterRole对各类资源的操作权限后再进行授权,以免RAM用户获得不符合预期的权限。详情请参见容器服务自定义 RAM 授权策略
  5. 授权提交页签,如果出现授权成功,表示该RAM用户之前已被授予RAM权限,此时也已完成RBAC授权,操作结束。如果出现如图 1所示,表示该RAM用户未被授予RAM权限,请按照页面提示,通过RAM控制台对RAM用户授予指定集群的只读权限。
    1. 授权提交页面,单击复制后,再单击策略管理
      图 1. 授权管理
      授权管理
    2. 跳转到RAM控制台页面,选择权限管理 > 权限策略管理,单击创建权限策略
      新建权限策略
    3. 进入新建自定义权限策略页面,自定义策略名称,配置模式选择脚本配置,使用Ctrl+V,将5.i复制的内容粘贴到策略内容中,单击确定。详细的操作请参见自定义RAM授权策略
      自定义权限策略
    4. 选择人员管理 > 用户,在需要授权的用户的右侧,单击添加权限
      添加权限
    5. 在弹出的添加权限页面,设置授权范围,设置权限为自定义策略,搜索或者在下表中找到自定义的策略名称,单击策略名称,移动到右侧已选择区域。单击确定,完成对RAM用户在指定集群的只读能力的授权。
      授权
    6. 此时,返回容器服务控制台,在授权提交页面,单击授权提交,完成RAM用户RBAC的授权。
  6. 配置完成后,您可以使用目标RAM用户登录容器服务控制台,并进行相关操作。

自定义权限说明

阿里云容器服务预置了管理员、运维人员、开发人员和受限用户4种标准的访问权限,可满足大部分用户在容器服务控制台上的使用需求。如果您想自由定义集群的访问权限,可使用自定义权限功能。

阿里云容器服务内置了一些自定义权限。
说明 其中cluster-admin权限值得关注,属于集群超级管理员权限,对所有资源都默认拥有权限。
自定义权限

您可登录到集群节点,执行以下命令,查看自定义权限的详情。

kubectl get clusterrole

kubectl get clusterrole
NAME                                                                   AGE
admin                                                                  13d
alibaba-log-controller                                                 13d
alicloud-disk-controller-runner                                        13d
cluster-admin                                                          13d
cs:admin                                                               13d
edit                                                                   13d
flannel                                                                13d
kube-state-metrics                                                     22h
node-exporter                                                          22h
prometheus-k8s                                                         22h
prometheus-operator                                                    22h
system:aggregate-to-admin                                              13d
....  
system:volume-scheduler                                                13d
view                                                                   13d
            

以超级管理员cluster-admin为例,执行以下命令,查看其权限详情。

kubectl get clusterrole cluster-admin -o yaml

说明 RAM用户被授予该集群角色后,在该集群内,可视为与主账号有相同权限的超级账号,拥有操作集群内所有资源的任意权限,建议谨慎授予。
kubectl get clusterrole cluster-admin  -o yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
  creationTimestamp: 2018-10-12T08:31:15Z
  labels:
    kubernetes.io/bootstrapping: rbac-defaults
  name: cluster-admin
  resourceVersion: "57"
  selfLink: /apis/rbac.authorization.k8s.io/v1/clusterroles/cluster-admin
  uid: 2f29f9c5-cdf9-11e8-84bf-00163e0b2f97
rules:
- apiGroups:
  - '*'
  resources:
  - '*'
  verbs:
  - '*'
- nonResourceURLs:
  - '*'
  verbs:
  - '*'