role和roleBinding

Role资源定义了哪些操作可以在哪些资源上执行。也可以直接控制访问的url的权限,下面的cluster也是这样。

查询所有service的demo:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
# role的命名空间,如果没有则默认为当前命名空间
namespace: foo
name: service-reader
rules:
# service是核心apiGroup的资源,所以没有apiGroup的名,就是“”
- apiGroups: [""]
# 允许查询和返回所有允许的服务
verbs:
- "get"
- "list"
# 说明这条规则和服务有关
resources:
- "services"

注意: 在指定资源时,必须采用复数形式!如:services

角色定义了哪些操作可以执行,但没有指定谁可以执行这些操作。要做到这一

点,必须将角色绑定到一个主体,它可以是一个user (用户)、 一个ServiceAccount或一个组(用户或 ServiceAccount 组)。

也就是说RoleBinding就是一个中间表,主要负责维护"角色"和用户的关系。而这里的用户可以使user、serviceAccount或者serviceAccount group

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
namespace: foo
name: test
# 绑定的role
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: service-reader
# 绑定的用户
subjects:
- kind: ServiceAccount
name: foo
namespace: default

上面的配置中给service-reader的角色绑定了default命名空间中名称为foo的ServiceAccount,也就是说在foo命名空间中的pod,只要

引用了foo的ServiceAccount,就拥有了service-reader的角色权限。

同样的,如果将service-reader的角色绑定到其他的命名空间的ServiceAccount,那么其他命名空间的pod,也可以拥有service-reader的

角色权限,也就是访问foo中的service资源。

ClusterRole和ClusterRoleBinding

上面通过Role我们可以获得了部分操作命名空间的权限。但是有些资源不属于命名空间自身,如:pv、role、或者namespace自身。

这个时候就需要用到了ClusterRole和ClusterRoleBinding。

集群级别的资源访问ClusterRole必须和ClusterRoleBinding绑定才会生效。因为这些资源本身就不属于命名空间之内的,而roleBinding

都是针对命名空间内的资源生效的。

可以查看k8s内置的一个clusterRole

kubectl get clusterrole system:discovery -o yaml

这个cluterRole提供了对一些公共的url访问的权限,如:healthz、version等

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
annotations:
rbac.authorization.kubernetes.io/autoupdate: "true"
creationTimestamp: "2020-04-29T06:32:17Z"
labels:
kubernetes.io/bootstrapping: rbac-defaults
name: system:discovery
resourceVersion: "42"
selfLink: /apis/rbac.authorization.k8s.io/v1/clusterroles/system%3Adiscovery
uid: 406bba95-3344-4650-8b00-1afb55d7321f
rules:
- nonResourceURLs:
- /api
- /api/*
- /apis
- /apis/*
- /healthz
- /livez
- /openapi
- /openapi/*
- /readyz
- /version
- /version/
verbs:
- get

注意:对于URL权限的控制,要使用普通的HTTP动词,如:post、get、patch等,必须使用小写。而不是create或者update

非资源型URL clusterRole和集群级别的资源一样,只能与clusterRoleBinding结合使用。

查看官方中此clusterRole对应的clusterRoleBinding

kubectl get clusterrolebinding system:discovery -o yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
annotations:
rbac.authorization.kubernetes.io/autoupdate: "true"
creationTimestamp: "2020-04-29T06:32:17Z"
labels:
kubernetes.io/bootstrapping: rbac-defaults
name: system:discovery
resourceVersion: "93"
selfLink: /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/system%3Adiscovery
uid: cc81c481-e70b-406b-bde8-c25c811102cd
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: system:discovery
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: Group
name: system:authenticated

可以看到上面的ClusterRoleBinding,赋予了所有已登录的用户system:discovery的ClusterRole的权限。

ClusterRole与RoleBinding

ClusterRole不是必须与ClusterRoleBinding结合使用。当需要访问命名空间级别的资源时,可以使用ClusterRole定义这些权限,

然后使用RoleBinding与具体的命名空间中的serviceAccount绑定。然后这个命名空间下的pod,应用了这个serviceAccount后,就

获得了访问所有命名空间中的资源的权限。如:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: view
rules:
apiGroups:
- ""
# 指定可以访问的资源的权限,注意:这里全部都是命名空间中的资源
resources:
- configmaps
- endpoints
- persistenvolumeclaims
- pods
- replicationcontrollers
- replicationcontrollers/scale
- serviceaccounts
- services
# 指定权限为查看
verbs:
- get
- list
- watch

为了防止权限扩散,建议为每个pod或一组pod,创建一个特定的serviceAccount,并且把它和一个定制的role或者clusterRole通过roleBinding

联系起来(不使用clusterRoleBinding是因为这样做会给其他命名空间的pod对资源的访问权限,只要他们指定这个命名,这样做是很危险的)

Kubernetes的RBAC权限控制的更多相关文章

  1. Kubernetes-16:一文详解ServiceAccount及RBAC权限控制

    一.ServiceAccount 1.ServiceAccount 介绍 首先Kubernetes中账户区分为:User Accounts(用户账户) 和 Service Accounts(服务账户) ...

  2. yii2 rbac权限控制详细操作步骤

    作者:白狼 出处:http://www.manks.top/article/yii2_rbac_description本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出 ...

  3. yii2 rbac权限控制之菜单menu详细教程

    作者:白狼 出处:http://www.manks.top/article/yii2_rbac_menu本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则 ...

  4. yii2搭建完美后台并实现rbac权限控制实例教程

    1.安装yii2 未安装的请参考yii2史上最简单式安装教程,没有之一 或者参考yii2实战教程之详细安装步骤 已安装的请继续看下一步操作 2.配置数据库 2.1 配置数据库 修改common/con ...

  5. yii2搭建完美后台并实现rbac权限控制案例教程

    作者:白狼 出处:www.manks.top/article/yii2_frame_rbac_template 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连 ...

  6. 基于thinkphp的RBAC权限控制

    RBAC  Role-Based Access Control 权限控制在后台管理中是十分常见的,它的模型大体上是下面这张图的形式 我用的字段和上面不一样,图只是个示例 一个简易的权限控制模型只需要3 ...

  7. 转:RBAC权限控制

    名词解释: RBAC:Role-Based Access Control,基于角色的访问控制   关键词: RBAC,Java Shiro,Spring Security,   一. RBAC 要解决 ...

  8. PHP RBAC权限控制,基于CI框架(版本3.1.9)

    2018年11月7日更新:目前功能已做到事件级别权限控制,如:后台用户的添加操作.删除操作和保存操作等具体到事件级的操作方法有权限则展示相应的操作菜单,没权限则隐藏相应菜单或提示无权限到目前算是真正做 ...

  9. Yii2搭建后台并实现rbac权限控制完整实例教程

    .安装yii2 未安装的请参考yii2史上最简单式安装教程,没有之一 已安装的请继续看下一步操作 2.配置数据库 2.1 配置数据库 修改common/config/main-local.php 实际 ...

  10. 基于SpringSecurity实现RBAC权限控制(待完善)

    Spring Security是一个为企业应用系统提供声明式的安全访问控制功能,减少为了企业应用系统安全控制而编写的大量重复代码. 认证: spring security的原理就是使用很多的拦截器对U ...

随机推荐

  1. 读博期间的宿舍 && 行李打包 —— 大连开发区校区

    =============================================

  2. 【转载】 Mobaxterm 中文输入Backspace按键问题

    版权声明:本文为CSDN博主「Flynnsin」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net/qq_45830 ...

  3. mindspore-gpu-2.2.0版本学习笔记

    docker镜像拉取: docker pull swr.cn-south-1.myhuaweicloud.com/mindspore/mindspore-gpu-cuda11.6:2.2.0   使用 ...

  4. 白鲸开源CEO郭炜在2024 DataOps发展大会上获聘专家

    2024年5月15日,白鲸开源CEO郭炜在2024 DataOps发展大会上被正式聘任为DataOps专家,并获得了荣誉证书.本次大会由中国通信标准化协会主办,中关村科学城管委会提供支持,大数据技术标 ...

  5. [学习笔记] 单调队列优化DP - DP

    单调队列优化DP 简单好想的DP优化 真正的教育是把学过的知识忘掉后剩下的东西 -- *** 对于一个转移方程类似于 \(dp[i]=max(min)\{dp[j]+b[j]+a[i]\}\ \ x_ ...

  6. Ubuntu16.04换成清华大学源

    第一:备份源文件 # 源文件sources.list 在/etc/apt/目录下 # 备份源文件 sudo cp sources.list sources.list.bak 第二步:替换源文件 # 清 ...

  7. One-for-All:上交大提出视觉推理的符号化与逻辑推理分离的新范式 | ECCV 2024

    通过对多样化基准的严格评估,论文展示了现有特定方法在实现跨领域推理以及其偏向于数据偏差拟合方面的缺陷.从两阶段的视角重新审视视觉推理:(1)符号化和(2)基于符号或其表示的逻辑推理,发现推理阶段比符号 ...

  8. 【Appium】之自动化定位总结

    一.同级定位时,先定位上级 我想定位[必填]框,我先定位[姓名]的同一个上级 self.driver.find_element(MobileBy.XPATH,"//*[contains(@t ...

  9. POA:已开源,蚂蚁集团提出同时预训练多种尺寸网络的自监督范式 | ECCV 2024

    论文提出一种新颖的POA自监督学习范式,通过弹性分支设计允许同时对多种尺寸的模型进行预训练.POA可以直接从预训练teacher生成不同尺寸的模型,并且这些模型可以直接用于下游任务而无需额外的预训练. ...

  10. Python 潮流周刊#67:uv 的重磅更新(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...