全局权限

权限 是你在为用户选择自定义权限时可以分配的个人访问权限。

全局权限定义用户在任何特定集群之外的授权。Rancher 提供四种开箱即用的默认全局权限:Administrator (管理员)、Restricted Admin (受限管理员)、Standard User (标准用户) 和 User-Base 用户。

  • 管理员:可以完全控制整个 Rancher 系统和其中的所有集群。

  • 受限管理员:可以完全控制下游集群,但不能更改本地 Kubernetes 集群。

  • 普通用户:可以创建新集群并使用它们。普通用户还可以在自己的集群中向其他用户分配集群权限。

  • User-Base 用户:只有登录权限。

你无法更新或删除内置的全局权限。

分配全局权限

本地用户的全局权限分配与使用外部认证登录 Rancher 的用户不同。

新本地用户的全局权限

在创建新本地用户时,请在填写添加用户表单时为他分配全局权限。

如果需要查看新用户的默认权限:

  1. 在左上角,单击 ☰ > 用户 & 认证

  2. 在左侧导航栏中,单击角色

  3. 角色页面有按范围分组的角色选项卡。每个表都列出了范围内的角色。在全局选项卡的新用户的默认角色列中,默认授予新用户的权限用复选标记表示。

使用外部认证登录的用户的全局权限

当用户首次使用外部认证登录 Rancher 时,他们会自动分配到新用户的默认角色的全局权限。默认情况下,Rancher 为新用户分配 Standard User 权限。

如果需要查看新用户的默认权限:

  1. 在左上角,单击 ☰ > 用户 & 认证

  2. 在左侧导航栏中,单击角色

  3. 角色页面有按范围分组的角色选项卡。每个表都列出了范围内的角色。在每个页面的新用户的默认角色列中,默认授予新用户的权限用复选标记表示。

你可以按照步骤操作来将权限分配给单个用户。

如果外部认证服务支持组,你可以同时为组中的每个成员分配角色

自定义全局权限

使用自定义权限可以为用户提供 Rancher 中更为受限或特定的访问权限。

当来自外部认证的用户首次登录 Rancher 时,他们会自动分配到一组全局权限(以下简称权限)。默认情况下,用户第一次登录后会被创建为用户,并分配到默认的用户权限。标准的用户权限允许用户登录和创建集群。

但是,在某些组织中,这些权限可能会被认为权限过大。你可以为用户分配一组更具限制性的自定义全局权限,而不是为用户分配 AdministratorStandard User 的默认全局权限。

默认角色(管理员和标准用户)都内置了多个全局权限。系统管理员角色包括所有全局权限,而默认用户角色包括三个全局权限,分别是创建集群、使用应用商店模板和 User Base(登录 Rancher 的最低权限)。换句话说,自定义全局权限是模块化的,因此,如果你要更改默认用户角色权限,你可以选择需要包括在新的默认用户角色中的全局权限子集。

管理员可以通过多种方式强制执行自定义全局权限:

结合内置的全局角色

Rancher 提供了多个全局角色,它们为某些常见的用户场景授予了精细的权限。下表列出了每个内置的全局角色(Administrator, Standard UserUser-Base)以及它包含的默认全局权限

自定义全局权限 Administrator Standard User User-Base

创建集群

创建 RKE 模板

管理认证

管理应用商店

管理集群驱动

管理主机驱动

管理 PodSecurityPolicy 模板

管理角色

管理设置

Manage Users

使用应用商店模板

User-Base (基本登录访问)

如果需要查看每个全局权限对应哪些 Kubernetes 资源:

  1. 在左上角,单击 ☰ > 用户 & 认证

  2. 在左侧导航栏中,单击角色

  3. 如果单击单个角色的名称,表格会显示该角色授权的所有操作和资源。

注意事项:
  • 上面列出的每个权限都包含多个未在 Rancher UI 中列出的权限。如果需要获取完整权限列表以及组成权限的规则,请通过 /v3/globalRoles API 进行访问。

  • 在查看 Rancher 创建的默认角色关联的资源时,如果在一行上有多个 Kubernetes API 资源,则该资源将带有 (Custom) 标识。这不代表这个资源是自定义资源,而只是表明多个 Kubernetes API 资源作为一个资源。

自定义全局角色

当内置的全局角色无法直接满足你的需求时,可以创建自定义全局角色。

通过 UI 或自动化(例如 Rancher Kubernetes API) 创建自定义全局角色,你可以指定使用与上游角色和集群角色相同的规则。

Escalate 与 Bind

当授予全局角色权限时,请注意 Rancher 遵循 escalatebind,其方式类似于 Kubernetes

在全局角色提供的这两项配置,都可以授予用户绕过 Rancher 提升校验的权限。这可能允许用户成为管理员。由于这有着极高的安全风险,因此应非常谨慎地将 bindescalate 权限分发给用户。

escalate 允许用户更改全局角色并添加任何授权,即使用户没有当前或新版本的全局角色权限。

bind 允许用户对指定的全局角色进行授权(创建 ClusterRoleBinding),即使该用户没有访问全局角色的权限。

通配符动词 也包括 bindescalate。这意味着为用户的全局角色设置 也会提供 escalatebind

自定义全局角色示例

仅为名称为 test-gr 的全局角色授予 escalate 权限:

rules:
  - apiGroups:
      - "management.cattle.io"
    resources:
      - "globalroles"
    resourceNames:
      - "test-gr"
    verbs:
      - "escalate"

为所有的全局角色授予 escalate 权限:

rules:
  - apiGroups:
      - "management.cattle.io"
    resources:
      - "globalroles"
    verbs:
      - "escalate"

仅为名称为 test-gr 的全局角色授予创建角色绑定(绕过 escalation 检查)的权限

rules:
  - apiGroups:
      - "management.cattle.io"
    resources:
      - "globalroles"
    resourceNames:
      - "test-gr"
    verbs:
      - "bind"
  - apiGroups:
      - "management.cattle.io"
    resources:
      - "globalrolebindings"
    verbs:
      - "create"

授予 * 权限(同时包含 escalatebind

rules:
  - apiGroups:
      - "management.cattle.io"
    resources:
      - "globalroles"
    verbs:
      - "*"

下游集群的全局角色权限

全局角色可以通过 inheritedClusterRoles 字段在每个下游集群上授予一个或多个 RoleTemplate。此字段中引用的值必须是集群级别的 RoleTemplate 并且在集群 context 中存在。

通过此字段,用户将获取当前或未来的所有下游集群的指定权限,例如以下的全局角色示例:

apiVersion: management.cattle.io/v3
kind: GlobalRole
displayName: All Downstream Owner
metadata:
  name: all-downstream-owner
inheritedClusterRoles:
  - cluster-owner

任何具有此权限的用户都将是所有下游集群的所有者(cluster-owner)。如果添加了新的集群,无论是什么类型的集群,用户也将是这个集群的所有者。

默认的全局角色中使用此字段可能会导致用户获得过多的权限。

配置默认的全局权限

如果你想限制新用户的默认权限,你可以删除作为默认角色的用户权限,然后分配多个单独的权限作为默认权限。你也可以在一组其他标准权限之上添加管理权限。

默认角色仅分配给从外部认证登录的用户。对于本地用户,在将用户添加到 Rancher 时,必须显式分配全局权限。你可以在添加用户时自定义这些全局权限。

要更改在外部用户首次登录时分配给他们的默认全局权限,请执行以下步骤:

  1. 在左上角,单击 ☰ > 用户 & 认证

  2. 在左侧导航栏中,单击角色。在角色页面上,确保选择了全局选项卡。

  3. 查找要添加或删除的默认权限集。然后,通过选择 ⋮ > 编辑配置来编辑权限。

  4. 如果要将权限添加为默认权限,请选择是:新用户的默认角色,然后单击保存。如果要删除默认权限,请编辑该权限并选择

结果:默认全局权限已根据你的更改配置。分配给新用户的权限会在新用户的默认角色列中显示为复选标记。

为单个用户配置全局权限

要为单个用户配置权限:

  1. 在左上角,单击 ☰ > 用户 & 认证

  2. 在左侧导航栏中,单击用户

  3. 找到要更改访问级别的用户,然后单击 ⋮ > 编辑配置

  4. 全局权限内置角色部分中,选中你希望用户拥有的权限的复选框。如果你在角色页面创建了角色,这些角色将出现在自定义部分,你也可以选择这些角色。

  5. 单击保存

结果:用户的全局权限已更新。

为组配置全局权限

如果你有一组需要在 Rancher 中有相同访问权限的用户,你可以一次性将权限分配给整个组来节省时间。这样,组中的用户在第一次登录 Rancher 时能拥有相应级别的访问权限。

将自定义全局角色分配给组后,该角色将在组中用户登录 Rancher 时分配给用户。

对于现有用户,新权限将在用户退出 Rancher 并重新登录时,或当管理员刷新用户组成员名单时生效。

对于新用户,新权限在用户首次登录 Rancher 时生效。除了新用户的默认角色全局权限外,来自该组的新用户还将获得自定义全局角色的权限。默认情况下,新用户的默认角色权限等同于 Standard User 全局角色,但默认权限可以配置。

如果从外部认证服务中将用户从组中删除,该用户将失去分配给该组的自定义全局角色的权限。他们将继续拥有分配给他们的其他剩余角色,这通常包括标记为新用户的默认角色的角色。Rancher 将在用户登出或管理员刷新用户组成员名单时删除与组关联的权限。

先决条件:

只有在以下情况下,你才能将全局角色分配给组:

  • 你已设置外部认证

  • 外部认证服务支持用户组

  • 你已使用外部认证服务设置了至少一个用户组。

要将自定义全局角色分配给组,请执行以下步骤:

  1. 在左上角,单击 ☰ > 用户 & 认证

  2. 在左侧导航栏中,单击

  3. 转到你要分配自定义全局角色的组,然后单击 ⋮ > 编辑配置

  4. 全局权限自定义和/或内置角色部分中,选择该组应具有的权限。

  5. 单击创建

结果:自定义全局角色会在组内用户登录 Rancher 时生效。

刷新用户组成员名单

当管理员更新组的全局权限时,更改将在组成员退出 Rancher 并重新登录后生效。

如果要让更改立即生效,管理员或集群所有者可以刷新用户组成员名单。

如果用户已经从外部认证服务中的组中删除,管理员也需要刷新用户组成员名单。在这种情况下,刷新操作会让 Rancher 知道用户已从组中删除。

要刷新用户组成员名单:

  1. 在左上角,单击 ☰ > 用户 & 认证

  2. 在左侧导航栏中,单击用户

  3. 单击刷新用户组成员名单

结果:对组成员权限的所有更改都会生效。

受限管理员

已弃用

受限管理员角色已弃用,并将在未来的 Rancher 版本(2.10 或更高版本)中删除。你应该创建具有所需权限的自定义角色,而不是依赖此项内置角色。

Rancher 2.5 创建了一个新的 restricted-admin 角色,以防止本地 Rancher Server Kubernetes 集群的权限提升。此角色对 Rancher 管理的所有下游集群具有完全管理员权限,但没有更改本地 Kubernetes 集群的权限。

restricted-admin 可以创建其他具有同样访问权限的 restricted-admin 用户。

Rancher 还增加了一个新设置,来将初始启动的管理员设置为 restricted-admin 角色。该设置适用于 Rancher Server 首次启动时创建的第一个用户。如果设置了这个环境变量,则不会创建全局管理员,也就无法通过 Rancher 创建全局管理员。

要以 restricted-admin 作为初始用户来启动 Rancher,你需要使用以下环境变量来启动 Rancher Server:

CATTLE_RESTRICTED_DEFAULT_ADMIN=true

受限管理员 的权限列表

下表列出了 受限管理员全局管理员普通用户 角色相比应具有的权限和操作:

类别 操作 全局管理员 普通用户 受限管理员 受限管理员的注意事项

本地集群功能

管理本地集群(列出、编辑、导入主机)

创建项目/命名空间

添加集群/项目成员

全局 DNS

访问 CRD 和 CR 的管理集群

另存为 RKE 模板

安全

启用认证

配置认证

角色

创建/分配 GlobalRoles

否(可列出)

认证 Webhook 允许为已经存在的权限创建 globalrole

创建/分配 ClusterRoles

否(可列出)

不在本地集群中

创建/分配 ProjectRoles

否(可列出)

不在本地集群中

用户

添加用户/编辑/删除/停用用户

将全局角色分配给组

在 Webhook 允许的范围内

刷新组

PSP

管理 PSP 模板

否(可列出)

与 PSP 的全局管理员权限相同

工具

管理 RKE 模板

管理全局应用商店

无法编辑/删除内置系统应用商店。可以管理 Helm 库

集群驱动

主机驱动

GlobalDNS 提供商

是(自己)

GlobalDNS 条目

是(自己)

设置

管理设置

否(可列出)

否(可列出)

用户

管理 API 密钥

是(管理所有)

是(管理自己的)

是(管理自己的)

管理节点模板

是(管理自己的)

是(管理自己的)

只能管理自己的节点模板,不能管理其他用户创建的节点模板。

管理云凭证

是(管理自己的)

是(管理自己的)

只能管理自己的云凭证,不能管理其他用户创建的云凭证。

下游集群

创建集群

编辑集群

轮换证书

立即创建快照

恢复快照

另存为 RKE 模板

运行 CIS 扫描

添加成员

创建项目

自 2.5 起的功能 Chart

安装 Fleet

无法在本地集群中运行 Fleet

部署 EKS 集群

部署 GKE 集群

部署 AKS 集群

将全局管理员更改为受限管理员

在之前的版本中,文档建议如果管理员角色正在使用中,应将所有用户都更改为受限管理员。现在鼓励用户使用集群权限的功能构建自定义的全局角色,并将受限管理员迁移到新的自定义角色使用。

你可以前往安全  用户,并将所有管理员角色转为受限管理员。

已登录的用户可以根据需要将自己更改为 restricted-admin,但这应该是他们的最后一步操作,否则他们将没有进行该操作的权限。