首页 > 其他分享 >RBAC认证授权策略

RBAC认证授权策略

时间:2023-01-08 07:11:18浏览次数:53  
标签:rbac kind 角色 认证 RBAC io 授权 k8s authorization

RBAC介绍

在Kubernetes中,所有资源对象都是通过API进行操作,他们保存在etcd里。

而对etcd的操作我们需要通过访问 kube-apiserver 来实现,上面的Service Account其实就是APIServer的认证过程,而授权的机制是通过RBAC:基于角色的访问控制实现。

RBAC有四个资源对象

  • Role
  • ClusterRole
  • RoleBinding
  • ClusterRoleBinding

Role:角色

https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/rbac/

一组权限的集合,在一个命名空间中,可以用其来定义一个角色,只能对命名空间内的资源进行授权

如果是集群级别的资源,则需要使用ClusterRole。


例如:定义一个角色用来读取Pod的权限

vim role.yaml

---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: pod-read
  namespace: rbac
rules:
- apiGroups:
  - ""
  resources:
  - pods
  verbs:
  - get
  - list
  - watch
  resourceNames:
  - pod-test

rules中的参数说明:
1、apiGroups:支持的API组列表"" 表示核心 API 组,* 表示所有 API 组。例如:"apiVersion: apps/v1"中的apps或者rbac.authorization.k8s.io/v1中的rbac.authorization.k8s.io等
2、resources:支持的资源对象列表,例如pods、deployments、jobs等
3、resourceNames: 指定resource中的可使用项,例如上面的resources是pods,设置了resourceNames,就表示可操作resourceNames匹配到的pod,不设置(忽略)这个字段,则表示匹配所有的
4、verbs:对资源对象的操作方法列表。例如"update", "get", "watch", "list","create", "delete", "deletecollection", "patch","bind","get", "post"

ClusterRole:集群角色

具有和角色一致的命名空间资源的管理能力,还可用于以下特殊元素的授权
1、集群范围的资源,例如 Node
2、非资源型的路径,例如:/healthz
3、包含全部命名空间的资源,例如Pods


例如:定义一个集群角色可让用户访问任意secrets

vim clusterrole.yaml

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: secrets-clusterrole
rules:
- apiGroups:
  - ""
  resources:
  - secrets
  verbs:
  - list
  - get
  - watch

RoleBinding:角色绑定、ClusterRolebinding:集群角色绑定

角色绑定和集群角色绑定用于把一个角色绑定在一个目标上

可以是UserGroupServiceAccount,使用RoleBinding为某个命名空间授权,使用ClusterRoleBinding为集群范围内授权。


例如:将在rbac命名空间中把pod-read角色授予用户es

---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: pod-read-bind
  namespace: rbac
subjects:
- kind: User
  name: es
  apiGroup: rbac.authorization.k8s.io
roleRef:
- kind: Role
  name: pod-read
  apiGroup: rbac.authorizatioin.k8s.io

RoleBinding也可以引用ClusterRole,对属于同一命名空间内的ClusterRole定义的资源主体进行授权

例如:es能获取到集群中所有的资源信息

---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: es-allresource
  namespace: rbac
subjects:
- kind: User
  name: es
  apiGroup: rbac.authorization.k8s.io
roleRef:
- apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
  • subjects: 指定被绑定的资源,上面被绑定的对象是User
    • kind是资源的类型 UserGroupServiceAccount
    • apiGroup 是资源所属的apiversion组
    • namespace 用户名空间。如果对象类型kindUserGroup时,一定不要配置namespace,否则会报错。
  • roleRef:指定绑定的角色或集群角色 这里是集群角色
    • kind 是角色的类型
    • apiGroup 是角色所属的apiversion组 一般都是`rbac.authorization.k8s.io

标签:rbac,kind,角色,认证,RBAC,io,授权,k8s,authorization
From: https://www.cnblogs.com/guangdelw/p/17034053.html

相关文章