RBAC 权限管理 | 大装置帮助中心
跳到主要内容

RBAC 权限管理

在弹性算力池中,权限管理可以分为集群层面和集群内部两个层次:

集群层面的权限:包括集群的创建、升级、节点关联、证书签发等操作。这些操作由 IAM 统一管理,也就是说,只有在 IAM 中被授予相应权限的用户,才能对集群执行这些全局操作。

集群内部的权限:针对集群内部各种资源(如 Pod、命名空间、训练任务等)的操作控制。这一部分遵循 Kubernetes 的 RBAC(Role-Based Access Control,基于角色的访问控制)模型。在 RBAC 中,权限是通过 角色(Role/ClusterRole)角色绑定(RoleBinding/ClusterRoleBinding) 来实现的。管理员可以为不同的用户或用户组分配不同的角色,从而精确地控制他们在集群中的操作范围。

当新建集群时,租户管理员和集群创建者 会自动被授予 cluster-admin 角色,从而拥有管理集群内所有资源的最高权限。若需让其他用户使用同一个集群,租户管理员或集群创建者可以根据需要为他们分配相应的 RBAC 权限。

在弹性算力池中,您可以通过以下两种方式进行 RBAC 管理:

  1. 控制台 UI 化授权
  • 提供直观、可视化的操作界面,适合日常管理或对命令行不熟悉的用户。
  • 用户可以在控制台上完成授权、编辑、删除和角色管理操作。
  1. Kubernetes 原生 RBAC 配置
  • 通过 kubectl 命令或 YAML 文件进行配置,功能更灵活,适合有经验的用户。
  • 支持批量修改、自动化脚本等复杂场景。

控制台 UI 化授权

预置角色

参考Kubernetes常见用法,平台内置了以下面向用户的ClusterRole,参考面向用户的角色

默认 ClusterRole默认 ClusterRoleBinding描述
cluster-admin预置同名ClusterRoleBinding,预绑定集群创建人允许用户在平台上的任何资源上执行所有操作,建议采用最小化授权的原则,审慎的为用户绑定此角色
admin预置同名ClusterRoleBinding,不预绑定用户对命名空间中的大多数资源的读/写权限,包括创建命名空间级内的角色(role)和角色绑定(roleBinding)的能力。此角色不允许对资源配额或者命名空间本身进行写操作。
edit预置同名ClusterRoleBinding,不预绑定用户允许对命名空间的大多数对象进行读/写操作。
view预置同名ClusterRoleBinding,不预绑定用户允许对命名空间的大多数对象的只读权限

权限授予

在控制台中,进入 集群详情 > 授权管理 页面,可以为 IAM 用户配置资源管理权限。

在授权管理列表中,您可以:

  • 查看当前已有的授权信息
  • 按命名空间、用户(组)名称、用户(组)ID、绑定角色等条件进行检索和分类。

添加授权

  1. 点击 【添加授权】 打开侧边配置面板;
  2. 在面板中依次选择 授权范围、绑定角色、授权用户
  • 授权范围
    • 选择 Role 时,仅能绑定到指定命名空间;
    • 选择 ClusterRole 时,可授权跨所有命名空间.
  • 绑定角色:一次授权只能绑定一个角色;
  • 授权用户:一次最多支持为 20 个用户(或用户组)进行授权操作。

编辑与删除授权

  • 编辑:若需调整某条授权记录的用户范围,可通过 编辑 功能在侧边面板中增减授权用户。
  • 查看 YAML:可直接查看对应授权在 Kubernetes 中的 YAML 定义。
  • 删除:具备删除权限的管理员可删除授权记录,删除后,用户将立即失去对应命名空间的相关权限。

提示:当用户尝试执行无权限的操作(编辑/删除/YAML 查看)时,界面会给出 权限不足的提示,如有需要,请联系管理员获得相应权限。

角色管理

在 Kubernetes 中,权限规则通常通过 RoleClusterRole 定义。ECP控制台提供了可视化的角色管理功能,支持用户查看、创建、编辑和删除角色。

Role 与 ClusterRole 的区别

  • Role:命名空间级别,仅在指定命名空间中生效。
  • ClusterRole:集群级别,可作用于所有命名空间,或针对集群范围内的资源生效。

提示:RBAC 的权限为累加关系,您可以为同一用户授予多个角色,以组合出所需的权限范围。

使用场景

  • Role:用于定义某命名空间内资源对象的访问权限。例如:限制用户仅能管理 namespace-a 中的 Pod。
  • ClusterRole:常见应用场景包括:
    • 定义命名空间内资源权限,并在多个命名空间中复用;
    • 定义跨命名空间的访问权限;
    • 定义集群级资源的访问权限。

控制台操作

  • 查看与编辑:在控制台中,可直接查看现有角色,并通过 YAML 编辑器修改权限规则(需具备编辑权限)。
  • 创建:新建角色时需基于 YAML 定义,示例可参考 Kubernetes 官方 Role 示例
  • 删除:对于不再需要的角色,可直接删除,避免冗余权限配置。

Kubernetes内原生RBAC权限管理

预置角色

集群预置角色

参考Kubernetes常见用法,平台内置了以下面向用户的clusterrole,参考面向用户的角色

默认 ClusterRole默认 ClusterRoleBinding描述
cluster-admin预置同名clusterrolebinding,预绑定集群创建人允许用户在平台上的任何资源上执行所有操作,建议采用最小化授权的原则,审慎的为用户绑定此角色
admin预置同名clusterrolebinding,不预绑定用户对命名空间中的大多数资源的读/写权限,包括创建命名空间级内的角色(role)和角色绑定(rolebind)的能力。此角色不允许对资源配额或者命名空间本身进行写操作。
edit预置同名clusterrolebinding,不预绑定用户允许对命名空间的大多数对象进行读/写操作。
view预置同名clusterrolebinding,不预绑定用户允许对命名空间的大多数对象的只读权限

AI训练引擎预置角色

面向AI业务场景的典型作业,随集群创建预置了AI训练引擎,安装组件时创建如下预置角色。

默认 ClusterRole默认 ClusterRoleBinding描述
ate-admin允许用户在控制台或kubectl命令下,对训练任务(vcjob)进行增删改查,此角色的权限点,会默认聚合至集群预置的edit clusterrole。
ate-guest允许用户查看训练任务和相关的其它资源,此角色的权限点,会默认聚合至集群预置的view clusterrole

各角色详细的权限点,可通过 kubectl describe clusterrole <clusterrole Name>查看,示例如下:

Kubernetes权限授予

Kubernetes的权限授予,通常通过编辑RoleBinding 和 ClusterRoleBinding来完成,详见RoleBinding 和 ClusterRoleBinding

针对IAM用户,弹性算力池创建的Kubernetes集群中,会以IAM用户ID标识。如下图中“9f942a39-1be0-4d86-831c-ffe3d6c9a1ce”:

在Kubernetes中识别为:

以此能力为基础,通过编辑RoleBinding 和 ClusterRoleBinding中的用户(subjects)信息,即可完成授权或移除授权操作。

示例1:为上述用户在集群范围内绑定view权限

为用户授权可以通过三种方式实现:Kubernetes dashboard、Kubectl命令、终端命令

方式一:通过Kubernetes 仪表盘的UI操作:

需要访问到Kubernetes仪表盘,详见通过kubectl port-forward命令实现本机可访问dashboard
编辑预置的name为view的clusterrolebind。其中授权角色为clusterrole/view不用调整,编辑subjects中的name为用户id。

方式二:kubectl编辑或clusterrolebind文件:

执行命令kubectl edit clusterrolebinding view
在弹出的文件编辑器中编辑name字段为待授权用户的id
保存并关闭后将自动提交至kubernetes集群,操作及客户端如下返回:


方式三:等效命令:
执行以下命令以授权上述用户具备view权限:
kubectl patch clusterrolebinding view --type='json' -p='[{"op": "add", "path": "/subjects/-", "value": {"apiGroup": "rbac.authorization.k8s.io", "kind": "User", "name": "9f942a39-1be0-4d86-831c-ffe3d6c9a1ce"}}]'

授权后,此用户增加了kubernetes原生资源的查看权限,效果如下:

授权前授权后

示例2:为上述用户在命名空间:jackson中绑定edit角色

Kubernetes通过命名空间对训练任务等大多数工作负载进行了隔离。为避免不同用户误操作彼此的训练任务等工作负载,推荐为每个用户分配独立的命名空间。示例由cluster-admin创建命名空间jackson,并将此命名空间内使用权限授予上述用户。

创建命名空间
kubectl create ns jackson

将上述用户授权在此命名空间的edit角色权限
kubectl create rolebinding ate-ns-admin --clusterrole=edit --user=9f942a39-1be0-4d86-831c-ffe3d6c9a1ce --namespace=jackson

在命名空间jackson中创建了一个名为ate-ns-admin的rolebinding,为上述用户授予了此命名空间内的edit角色关联的权限

由于前述ate-admin权限点已经聚合至了默认的edit角色中,上述用户在命名空间jackson中已具备vcjob的创建权限
kubectl can-i create vcjob -n jackson --as 9f942a39-1be0-4d86-831c-ffe3d6c9a1ce