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

配置说明

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

操作步骤

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击授权管理
  3. 授权管理页面的选择RAM用户页签配置管理权限。
    • 为RAM用户授权:

      选择RAM用户页签单击RAM用户页签,在需要授权的RAM用户右侧单击管理权限,进入集群RBAC配置页签。

    • 为RAM角色授权:

      选择RAM用户页签单击RAM 角色页签,输入RAM 角色名称后单击管理权限,进入集群RBAC配置页签。

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

自定义权限说明

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

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

查看自定义权限

  • 单击自定义权限右侧的查看,查看对应自定义权限的详情。
  • 登录集群节点,执行以下命令,查看自定义权限的详情。
    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为例,执行以下命令,查看其权限详情。

    说明 RAM用户或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:
      - '*'

无权限错误码说明

当您通过控制台或OpenAPI所做的部分操作缺少所需的RBAC权限时,控制台或OpenAPI将返回相应的无权限错误码。各个错误码对应操作所需的集群RBAC权限说明如下表所示。

错误码或错误信息所需的集群RBAC权限
ForbiddenCheckControlPlaneLog管理员或运维人员权限。
ForbiddenHelmUsage管理员权限。
ForbiddenRotateCert管理员权限。
ForbiddenAttachInstance管理员或运维人员权限。
ForbiddenUpdateKMSState管理员或运维人员权限。
Forbidden get trigger管理员、运维人员或开发人员权限。
ForbiddenQueryClusterNamespace管理员、运维人员、开发人员或受限用户权限。