配置RAM用户或RAM角色RBAC权限

RBAC(Role-Based Access Control)是基于角色的访问控制。通过RBAC授权,您可以将权限与集群角色相关联,从而为不同角色成员配置不同的Kubernetes资源操作权限,降低账号安全风险。本文介绍如何为RAM用户(子账号)或RAM角色配置对应的Kubernetes集群内RBAC权限。

配置说明

配置项

说明

默认权限

  • 默认情况下,仅阿里云账号(主账号)和集群创建者账号拥有集群内Kubernetes资源的管理员权限。

  • 默认情况下,RAM用户或RAM角色(非集群创建者)没有集群内任何Kubernetes资源的访问权限。

授权方式

  • 方式一:使用容器计算服务提供的预置角色,即管理员(拥有集群内全部Kubernetes资源访问权限)、运维人员、开发人员、受限用户和自定义角色,来对目标RAM用户或RAM角色进行授权。具体操作,请参见RAM用户或RAM角色授予RBAC权限

  • 方式二:在所有集群维度为RAM用户或RAM角色进行一键授权,后续新创建的集群也会为被授权的RAM用户或RAM角色自动绑定已经授权的预置角色。具体操作,请参见RAM用户或RAM角色授予RBAC权限

  • 方式三:通过RAM用户或RAM角色给其他RAM用户或RAM角色进行RBAC授权。授权时,控制台会过滤其可以授权的集群和命名空间的资源范围,仅当RAM用户或RAM角色有指定集群或命名空间的管理员或cluster-admin角色权限时,才可以给其他RAM用户或RAM角色进行RBAC授权。具体操作,请参见RAM用户或RAM角色设置为权限管理员通过RAM用户或RAM角色为其他账号授予RBAC权限

说明

开始授权前,请先确保目标RAM用户或RAM角色在RAM管理控制台中已被授予指定集群的RAM只读权限。

授权模式

支持对多个目标RAM用户或RAM角色进行单个和批量授权。

说明

由于阿里云RAM的安全限制,当您通过容器计算服务控制台修改RAM用户或RAM角色的RAM授权时,请按照页面提示的参考策略内容和操作说明在RAM控制台为目标RAM用户或RAM角色进行手动授权。

RAM用户或RAM角色授予RBAC权限

  1. 登录容器计算服务控制台,在左侧导航栏选择授权管理

  2. 授权管理页面为RAM用户或RAM角色配置管理权限。

    重要

    因为ACS集群是ACK Serverless类型集群之一,所以如果您已经或者将通过ACK控制台对RAM用户或RAM角色授予“所有集群”RBAC权限,那么“所有集群”中包括ACS集群,您将无法再通过容器计算服务ACS产品控制台对ACS集群做单独授权,默认继承“所有集群”授权策略。

    1. RAM用户授权

      单击子账号页签,在RAM用户列表,单击目标RAM用户右侧的管理权限,进入权限管理弹窗页面。

    2. RAM角色授权

      单击RAM 角色页签,输入RAM 角色名称后单击管理权限,进入权限管理弹窗页面。

  3. 权限管理弹窗页面中单击+添加权限,为目标RAM用户或RAM角色添加集群命名空间级别的权限配置,并选择相应的预置角色,然后单击提交授权

    预置角色

    集群内RBAC权限

    管理员

    对所有命名空间下所有资源的读写权限。

    运维人员

    对所有命名空间下控制台可见Kubernetes资源的读写权限,对集群存储卷、命名空间、配额的只读权限。

    开发人员

    对所有命名空间或所选命名空间下控制台可见Kubernetes资源的读写权限。

    受限用户

    对所有命名空间或所选命名空间下控制台可见Kubernetes资源的只读权限。

    自定义

    权限由您所选择的ClusterRole决定,请在确定所选ClusterRole对各类资源的操作权限后再进行授权,以免RAM用户或RAM角色获得不符合预期的权限。您可以参考下文,展开查看如何查看自定义权限。

    重要

    RAM用户或RAM角色被授予cluster-admin权限后,在该集群内可视为与阿里云账号有相同权限的超级账号,拥有操作集群内所有资源的任意权限,请务必谨慎授权。

  4. 配置完成后,您可以使用目标RAM用户或RAM角色登录容器计算服务控制台,并进行相关操作。

    说明
    • 请确保您需要使用的RAM用户或RAM角色已完成集群的RAM授权,同时已被授予集群内RBAC管理员权限或cluster-admin角色。详细操作,请参见RAM用户或RAM角色授予RAM权限

    • ACS预置角色包括管理员、运维人员、开发人员和受限用户四种标准的访问权限,可满足大部分用户的使用需求。如果您想自由定义集群的访问权限,可选择ACS内置的自定义角色,使用自定义权限功能。

    • 在一个目标集群或命名空间中为RAM用户或RAM角色的授权时,支持配置一个预置角色和多个自定义角色。

    • 如果您希望在所有集群维度为RAM用户或RAM角色进行一键授权,使得后续新创建的集群也会为被授权的RAM用户或RAM角色自动绑定已经授权的预置角色,您可以选择集群所有集群

    展开查看如何查看自定义权限

    1. 单击自定义,然后单击右侧的查看,查看对应自定义权限的详情。

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

      kubectl get clusterrole

      预期输出:

      NAME                                                                   CREATED AT
      acs:view                                                               2024-12-31T06:18:06Z
      admin                                                                  2024-12-31T06:17:53Z
      alibaba-log-controller                                                 2024-12-31T06:25:03Z
      alicloud-csi-provisioner                                               2024-12-31T06:19:23Z
      aliyun-eci-pod-clusterrole                                             2024-12-31T06:18:52Z
      arms-aliyunserviceroleforarms-clusterrole                              2024-12-31T06:25:03Z
      cluster-admin                                                          2024-12-31T06:17:53Z
      ebs-token-controller                                                   2024-12-31T06:19:00Z
      edit                                                                   2024-12-31T06:17:53Z
      o11y:addon-controller:role                                             2024-12-31T06:24:32Z
      system:aggregate-to-admin                                              2024-12-31T06:17:53Z
      system:aggregate-to-edit                                               2024-12-31T06:17:53Z
      ...
      system:volume-scheduler                                                2024-12-31T06:17:53Z
      tenant-webhook-clusterrole                                             2024-12-31T06:19:45Z
      view                                                                   2024-12-31T06:17:53Z
    3. 以超级管理员cluster-admin为例,执行以下命令,查看其权限详情。

      重要

      RAM用户或RAM角色被授予cluster-admin权限后,在该集群内可视为与阿里云账号有相同权限的超级账号,拥有操作集群内所有资源的任意权限。请谨慎授予。

      kubectl get clusterrole cluster-admin -o yaml

      预期输出:

      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        annotations:
          rbac.authorization.kubernetes.io/autoupdate: "true"
        creationTimestamp: "2024-12-31T06:17:53Z"
        labels:
          kubernetes.io/bootstrapping: rbac-defaults
        name: cluster-admin
        resourceVersion: "70"
        uid: 759xxxxx-5ad2-42ce-872d-fbce117xxxxx
      rules:
      - apiGroups:
        - '*'
        resources:
        - '*'
        verbs:
        - '*'
      - nonResourceURLs:
        - '*'
        verbs:
        - '*'

通过RAM用户或RAM角色为其他账号授予RBAC权限

默认情况下,RAM用户或RAM角色不具备对其他RAM用户或RAM角色进行RBAC授权的能力。如果您需要通过某个RAM用户或RAM角色为其他账号进行RBAC授权,您需要使用阿里云账号或具备所有集群RBAC管理员角色的RAM用户为该RAM用户或RAM角色授予所需的RAM权限和RBAC权限。

RAM权限

您需要给该RAM用户或RAM角色授予相应的RAM权限策略,策略包括以下内容:

  • 查看其他RAM账号。

  • 授予RAM权限策略。

  • 查看集群信息。

  • 查看RBAC权限配置。

  • RBAC授权能力。

  1. 登录RAM管理控制台,参考以下代码示例,为该RAM用户或RAM角色授予所需的RAM权限。更多信息,请参见RAM用户或RAM角色授予RAM权限

    重要

    请将xxxxxx替换为需要绑定的RAM策略的名称。替换为*,表示RAM用户或RAM角色拥有所有RAM策略的授权绑定能力。“Resource”:“*” 表示授权该uid下所有资源的鉴权Action操作,ACK OpenAPI (cs:*) 包括除ACS类型集群外所有ACK集群操作权限,请务必谨慎授权。

    {
        "Statement": [{
                "Action": [
                    "ram:Get*",
                    "ram:List*",
                    "cs:DescribeClustersV1",
                    "cs:GrantPermission"
                ],
                "Resource": "*",
                "Effect": "Allow"
            },
            {
                "Action": [
                    "ram:AttachPolicyToUser",
                    "ram:AttachPolicy"
                ],
                "Effect": "Allow",
                "Resource":  [
                    "acs:ram:*:*:policy/xxxxxx",
                    "acs:*:*:*:user/*"
                ]
            }
        ],
        "Version": "1"
    }
  2. 授权完成后,该RAM用户或RAM角色可以在指定策略范围内对其他RAM用户或RAM角色进行RAM授权。

RBAC权限

  1. 授予所需的RAM权限后,您还需要为该RAM用户或RAM角色在目标集群或命名空间上授予预置角色管理员或者自定义权限策略中的cluster-admin角色。具体操作,请参见授权对象为集群内应用的权限管理员

RAM用户或RAM角色设置为权限管理员

如果您不方便使用阿里云账号为RAM用户或RAM角色进行授权,您可以将某个RAM用户或RAM角色设置为权限管理员,随后使用该RAM用户或RAM角色进行授权操作。

  1. 登录RAM管理控制台,定位目标RAM用户或RAM角色。

    • RAM用户

      选择身份管理 > 用户,在用户列表的操作列,单击添加权限

    • RAM角色

      选择身份管理 > 角色,在角色列表的操作列,单击添加权限

  2. 新增授权弹窗页面中,点击权限策略中的搜索框,根据名称分别搜索AliyunRAMFullAccessAliyunACCFullAccess系统策略,然后勾选策略添加到右侧的已选择权限策略区域,接着单击确认新增授权关闭弹窗完成授权。

  3. 登录容器计算服务控制台为该RAM用户或RAM角色在所有集群维度授予预置角色管理员。具体操作,请参见RAM用户或RAM角色授予RBAC权限

  4. 完成上述步骤后,该RAM用户或RAM角色成为一个权限管理员,拥有给其他RAM用户或RAM角色进行RAM授权和RBAC授权的能力。

无权限错误码说明

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

错误码或错误信息

所需的集群RBAC权限

ForbiddenCheckControlPlaneLog

管理员或运维人员权限。

ForbiddenHelmUsage

管理员权限。

ForbiddenRotateCert

管理员权限。

ForbiddenQueryClusterNamespace

管理员、运维人员、开发人员或受限用户权限。

相关文档