RBAC——基于角色的访问控制

举报
我就随便取个名字 发表于 2020/08/31 15:50:04 2020/08/31
【摘要】 Kubernets可通过RBAC实现权限控制,RBAC即基于角色的访问控制,使用“rbac.authorization.k8s.io API Group”实现授权,可动态配置。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/

【版权声明】本文为华为云社区用户翻译文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容, 举报邮箱:cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。