目录

kubernetes RBAC 鉴权简单介绍

本文内容截取自官方文档,用于备忘与快速理解,完整信息请参考官方文档。

参考资料:

1. 简介

基于角色(Role)的访问控制(RBAC)是一种基于企业中用户的角色来调节控制对计算机或网络资源的访问方法。

RBAC 使用 rbac.authorization.k8s.io API 组 来驱动鉴权操作,允许管理员通过 Kubernetes API 动态配置策略。

在 1.8 版本中,RBAC 模式是稳定的并通过 rbac.authorization.k8s.io/v1 API 提供支持。

2. 角色 Role

角色有两种:

  1. Role
  2. ClusterRole

Role 作用域为某个命名空间(namespace)上 。 而 ClusterRole 作用域为整个集群。

Role 定义示例

apiVersion: rbac.authorization.k8s.io/v1   # api 组
kind: Role                      # 类型
metadata:
  namespace: default            # 作用到 default 命名空间
  name: pod-reader              # 名称
rules:
- apiGroups: [""]               # "" 指定核心 API 组
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

ClusterRole 定义示例

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole               # 类型
metadata:
  # 此处的 "namespace" 被省略掉是因为 ClusterRoles 是没有命名空间的。
  name: secret-reader
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "watch", "list"]

3. 角色绑定 RoleBinding

角色绑定也有两种:

  1. RoleBinding
  2. ClusterRoleBinding

RoleBinding 用来在指定的命名空间中执行授权。它可以引用同一命名空间中的 Role ,也可以引用 ClusterRole 。 当 RoleBingding 引用 ClusterRole 时,可以允许管理者在整个集群中定义一组通用的角色,然后在多个命名空间中重用它们。

ClusterRoleBinding 用来在集群级别或对所有命名空间执行授权。它只可以引用 ClusterRole 。

RoleBinding 定义示例

# 此角色绑定使得用户 "jane" 能够读取 "default" 命名空间中的 Pods
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: default            # 作用到 default 命名空间
subjects:
- kind: User                    # 用户信息
  name: jane                    # 名称区分大小写
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role                    # 这里可以是 Role 或者 ClusterRole
  name: pod-reader              # 这里的名称必须与你想要绑定的 Role 或 ClusterRole 名称一致
  apiGroup: rbac.authorization.k8s.io

ClusterRoleBinding 定义示例

# 这个集群角色绑定允许 "manager" 组中的任何用户读取任意命名空间中 "secrets"。
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: read-secrets-global
subjects:
- kind: Group
  name: manager                 # 名称区分大小写
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: secret-reader
  apiGroup: rbac.authorization.k8s.io

注意: 你不能修改绑定对象所引用的 Role 或 ClusterRole 。 试图改变绑定对象的 roleRef 将导致验证错误。想要改变现有绑定对象中 roleRef 字段的内容,必须删除并重新创建绑定对象。

4. 聚合集群角色 Aggregated ClusterRoles

略。见官网 (https://kubernetes.io/zh/docs/reference/access-authn-authz/rbac/#aggregated-clusterroles)

5. 对资源的引用

即上面角色的示例中, rules 定义的那部分。

略。待补充。

6. 对主体的引用

即上面角色绑定的示例中, roleRef 定义的那部分。

RoleBinding 或者 ClusterRoleBinding 需要绑定角色到主体。 主体可以是组(Group),用户(User)或者服务账户(ServiceAccount)。

自定义的用户和组不能使用 system: 作为前缀。

系统保留的一些账号和组: