kubernetes RBAC 鉴权简单介绍
1. 简介
基于角色(Role)的访问控制(RBAC)是一种基于企业中用户的角色来调节控制对计算机或网络资源的访问方法。
RBAC 使用 rbac.authorization.k8s.io
API 组 来驱动鉴权操作,允许管理员通过 Kubernetes API 动态配置策略。
在 1.8 版本中,RBAC 模式是稳定的并通过 rbac.authorization.k8s.io/v1
API 提供支持。
2. 角色 Role
角色有两种:
- Role
- 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
角色绑定也有两种:
- RoleBinding
- 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
5. 对资源的引用
即上面角色的示例中, rules
定义的那部分。
略。待补充。
6. 对主体的引用
即上面角色绑定的示例中, roleRef
定义的那部分。
RoleBinding
或者 ClusterRoleBinding
需要绑定角色到主体。 主体可以是组(Group
),用户(User
)或者服务账户(ServiceAccount
)。
自定义的用户和组不能使用 system:
作为前缀。
系统保留的一些账号和组:
system:serviceaccount:
服务账号的用户名前缀system:serviceaccounts:
服务账号的用户组名前缀system:authenticated
所有认证过的用户system:unauthenticated
所有未认证的用户