Kubernetes集群授权管理
  4Txe79BjyroE 2023年12月12日 15 0

当客户端发起API Server调用时,API Server内部要先进行用户认证,然后执行用户授权流程,即通过授权策略来决定一个API调用是否合法。对合法用户进行授权并且随后在用户访问时进行鉴权,是权限与安全系统的重要一环。简单地说,授权就是授予不同的用户不同的访问权限。

API Server目前支持以下几种授权策略(通过API Server的启动参数“--authorization mode”设置)。

(1)AlwaysDeny:表示拒绝所有请求,一般用于测试。

(2)AlwaysAllow:允许接收所有请求,如果集群不需要授权流程,则可以采用该策略,这也是Kubernetes的默认配置。

(3)ABAC(Attribute-based Access Control,基于属性的访问控制):使用用户配置的授权规则对用户请求进行匹配和控制。

(4)Webhook:通过调用外部REST服务对用户进行授权。

(5)RBAC(Role-Based Access Control):基于角色的访问控制,是实施面向企业安全策略的一种有效的访问控制方式。

(6)Node:一种专用模式,用于对kubelet发出的请求进行访问控制。

RBAC是k8s提供的一种授权策略,也是新版集群默认启用的方式。RBAC将角色和角色绑定分开,角色是指一组定义好的操作集群资源的权限,而角色绑定是将角色和用户、组或者服务账号实体绑定,从而赋予这些实体权限。

RBAC这种授权方式十分灵活,要赋予某个实体权限,只需要绑定相应的角色即可。针对RBAC机制,k8s提供了4种API资源:Role、ClusterRole、RoleBinding和ClusterRoleBinding。

(1)Role:只能用于授予对某一单一命名空间中资源的访问权限,因此在定义时必须指定namespace。

kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""] #空字符串""表明使用core API group
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

(2)ClusterRole:针对集群范围的角色,能访问整个集群的资源。

ClusterRole定义可用于授予用户对某一特定命名空间,或者所有命名空间中的secret(取决于其绑定方式)的读访问权限。

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  #鉴于ClusterRole是集群范围对象,所以这里不需要定义"namespace"字段
  name: secret-reader
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "watch", "list"]

(3)RoleBinding:将Role和用户实体绑定,从而赋予用户实体命名空间内的权限,同时也支持ClusterRole和用户实体的绑定。

定义的RoleBinding对象在default命名空间中将pod-reader角色授予用户jane。这一授权将允许用户jane从default命名空间中读取pod。

#以下角色绑定定义将允许用户"jane"从"default"命名空间中读取pod

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: read-pods
  namespace: default
subjects:
- kind: User
  name: jane
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

(4)ClusterRoleBinding:将ClusterRole和用户实体绑定,从而赋予用户实体集群范围的权限。

定义的ClusterRoleBinding允许在用户组manager中的任何用户都可以读取集群中任何命名空间中的secret。

#以下"ClusterRoleBinding"对象允许在用户组"manager"中的任何用户都可以读取集群中任何命

 名空间中的secret。

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
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
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月12日 0

暂无评论

推荐阅读
  ApTxpH0CpnLS   2023年11月13日   21   0   0 sedhtmljavaAPI
  zNxK8cIqmu7p   2023年11月19日   17   0   0 ServerAPIPod
  jLXKB6vexBrB   2023年11月13日   19   0   0 API