为了给您提供更优质的服务,请您先完善以下信息:
确认提交

扫码关注

爱数技术支持中心公众号

请选择:

请选择咨询类型

AnyShare
AnyBackUp
AnyRobot

扫码关注

爱数技术支持中心公众号

contact us

提交成功!

我们将在 24 小时之内联系你。

性能爆表
AnyShare
如何购买
我已是Anyshare 客户
AnyRobot
如何购买
购买 AnyRobot 订阅服务
我已是 AnyRobot 客户
一对一在线咨询
我是 AnyRobot 新客户
一对一在线咨询

爱数博客

全部 AnyBackup AnyShare AnyRobot AnyDATA AnyFabric

AnyRobot 账号权限控制你知多少

2023-06-19 1325 0
       在AnyRobot环境中,存在众多账号,AnyRobot采用Kubernetes集群架构,采用Kubernetes RBAC来控制,本文重点来讲讲,RBAC是如何进行账号权限控制的。
一、Kubernetes 的权限管理
    Kubernetes 主要通过 API Server 对外提供服务,Kubernetes 对于访问 API 的用户提供了相应的安全控制:认证和授权。认证解决用户是谁的问题,授权解决用户能做什么的问题。只有通过合理的权限控制,才能够保证整个集群系统的安全可靠。 API 访问需要经过的三个步骤,它们分别是:认证、授权和准入。

Kubernetes 提供了以下 4 种鉴权模式:
  • Node:一种特殊的授权模块,基于 Node 上运行的 Pod 为 Kubelet 授权
  • ABAC:基于属性的访问控制
  • RBAC:基于角色的访问控制
  • Webhook:HTTP 请求回调,通过一个 WEB 应用鉴定是否有权限进行某项操作本文主要是讲解RBAC鉴权模式。


二、Kubernetes权限管理相关概念
    要认识Kubernetes中权限管理,需了解以下几个概念:

  • apiGroups:资源所属的API组:"" 缺省为 core 组资源,如:extensions、apps、batch等。
  • resources:资源,如: pods、deployments、services、secrets 等。
  • verbs:动作,如: get、list、watch、create、delete、update 等。
  • Rule:规则,一组属于不同 API Group 的操作集合;
  • Role:角色,用于定义一组对 Kubernetes API 对象操作的一组规则,范围限定在 namespace。
  • ServiceAccount(服务账号)为pod调用api server 准备的账号。
  • User account(用户账号)为用户调用api server 准备的。
  • ClusterRole:集群角色,该角色不受 namespace 的限制。
  • Subject:对象,也就是规则作用的对象。
  • RoleBinding:将角色和对象进行绑定,范围限定在 namespace。
  • ClusterRoleBinding:将集群角色和对象进行绑定,不受 namespace 限制。

    让一个用户(Users)扮演一个角色(Role),角色拥有权限,从而让用户拥有这样的权限,随后在授权机制当中,只需要将权限授予某个角色,此时用户将获取对应角色的权限,从而实现角色的访问控制,在 Kubernetes的授权机制当中,采用 RBAC 的方式进行授权,其工作逻辑是,把对对象的操作权限定义到一个角色当中,再将用户绑定到该角色,从而使用户得到对应角色的权限。如果通过 rolebinding 绑定 role,只能对 rolebingding 所在的名称空间的资源有权限。另外,Kubernetes 为此还有一种集群级别的授权机制,就是定义一个集群角色(ClusterRole),对集群内 的所有资源都有可操作的权限,从而将 User2 通过 ClusterRoleBinding 到 ClusterRole,从而使 User2 拥有集群的操作权限,他们之间的关系如下图所示:

三、具体应用示例
    我们以AnyRobot中, nginx-ingress-serviceaccount-nginx SA账号为示例,并将nginx-ingress-role-nginx和nginx-ingress-serviceaccount-nginx进行绑定
1、创建nginx-ingress-serviceaccount-nginx SA账号
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  name: nginx-ingress-serviceaccount-nginx
  namespace: anyrobot
secrets:
- name: nginx-ingress-serviceaccount-nginx-token-kv2vf
2、创建nginx-ingress-role-nginx Role权限
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  name: nginx-ingress-role-nginx
  namespace: anyrobot
rules:
- apiGroups:  
  - ""  #core api组
  resources:
  - namespaces
  verbs:
  - get #具备的权限
- apiGroups:
  - ""
  resources:
  - configmaps
  - pods
  - secrets
  - endpoints
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - services
  verbs:
  - get
  - list
  - update
  - watch
- apiGroups:
  - extensions
  - networking.k8s.io
  resources:
  - ingresses
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - extensions
  - networking.k8s.io
  resources:
  - ingresses/status
  verbs:
  - update
- apiGroups:
  - networking.k8s.io
  resources:
  - ingressclasses
  verbs:
  - get
  - list
  - watch
- apiGroups:
  - ""
  resourceNames:
  - ingress-controller-leader-nginx
  resources:
  - configmaps
  verbs:
  - get
  - update
- apiGroups:
  - ""
  resources:
  - configmaps
  verbs:
  - create
- apiGroups:
  - ""
  resources:
  - endpoints
  verbs:
  - create
  - get
  - update
- apiGroups:
  - ""
  resources:
  - events
  verbs:
  - create
  - patch
- apiGroups:
  - discovery.k8s.io
  resources:
  - endpointslices
  verbs:
  - list
  - get
  - watch
- apiGroups:
  - coordination.k8s.io
  resources:
  - leases
  verbs:
  - create
  - get
  - update
3、将sa nginx-ingress-serviceaccount-nginx与nginx-ingress-role-nginx role 进行绑定
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  creationTimestamp: "2023-06-14T10:42:18Z"
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  name: nginx-ingress-role-nisa-binding-nginx
  namespace: anyrobot    #授权的命名空间为anyrobot
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: nginx-ingress-role-nginx  # 绑定nginx-ingress-role-nginx role
subjects:
- kind: ServiceAccount
  name: nginx-ingress-serviceaccount-nginx  # 绑定nginx-ingress-serviceaccount-nginx sa
  namespace: anyrobot
4、以上步骤完成后,sa账号nginx-ingress-serviceaccount-nginx即具备nginx-ingress-role-nginx role权限了,同时,AnyRobot也通过同样的方式,实现了其他账号权限细粒度控制。

请就本文对您的益处进行评级:

标签

产品技术

相关文章

热门标签

版本发布 在线教学
ai-assistant
chat
support
trial
需求助手 (内容由 AI 大模型生成,请仔细甄别)