RBAC——基于角色的访问控制
Kubernets可通过RBAC实现权限控制,RBAC即基于角色的访问控制,使用“rbac.authorization.k8s.io API Group”实现授权,可动态配置。RBAC的授权规则是通过四种资源来进行配置:角色、集群角色、角色绑定和集群角色绑定,笔者下文将详细介绍这四个资源。
一、角色:Role
Role用来对某一命名空间中的资源赋予访问权限。样例如下:
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: myNs
name: pod-reader
rules:
- apiGroups: [""] #空字符串""表明使用core API group
resources: ["pods"]
verbs: ["get", "list", "watch"]
该样例定义了一个在myNs namespace下对pod拥有读取权限的名为pod-reader的角色。在Kubernets中一个角色包含多组相关权限的规则,权限可以累加,若需要多个权限,则定义多个规则。例如可以为示例在读取pod的权限基础上添加读取‘‘deployment’’的权限。
- apiGroups: ["apps"]
resources: ["deployments"]
verbs: ["get", "list", "watch"]
Kubernets中资源往往还有子资源,若要操作子资源还需要定义子资源的权限,子资源通过"/"划分。例如定义对pod的log资源的读取权限,则配置如下:
- apiGroups: [""]
resources: ["pods/log"]
verbs: ["get", "list", "watch"]
Kubernets支持对指定的资源配置权限,例如定义对名为‘‘my-pod’’的读取权限,配置如下:
- apiGroups: [""]
resources: ["pods"]
resourceNames: ["my-pod"]
verbs: ["get", "list", "watch"]
二、集群角色:ClusterRole
ClusterRole用来对集群内的资源赋予访问权限。样例如下:
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: cluster-pod-reader
rules:
- apiGroups:
resources: ["pods"]
verbs: ["get", "list", "watch"]
该样例定义了一个在集群范围内对pod拥有读取权限的名为cluster-pod-reader的集群角色。ClusterRole的可作用范围是整个集群,因此不需要定义namespace参数。
三、角色绑定:RoleBinding
下面我们通过绑定的形式将一个角色中定义的各种权限授予一个或者一组用户。RoleBinding可以引用在同一命名空间内定义的Role对象和集群内定义的ClusterRole对象,引用ClusterRole对象可以实现在集群内定义一组通用角色。样例如下:
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: read-pods
namespace:myNs
subjects: 角色绑定主体
- kind: User(Group给一组用户绑定)
name: dave
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
该样例表示将第一节定义的pod-reader权限赋予dave,dave获得在myNs namespace下读取pod的权限。
四、集群角色绑定:ClusterRoleBinding
ClusterRoleBinding可以引用在集群内定义的ClusterRole对象,应谨慎使用。
巧用这四种资源,就可以很好地实现对Kubernets集群的权限控制。
参考资料:
https://kubernetes.io/docs/reference/access-authn-authz/rbac/
- 点赞
- 收藏
- 关注作者
评论(0)