OpenShift 4 - RBAC基于Role的访问授权
《OpenShift 4.x HOL教程汇总》
文章目录
- RBAC相关概念
- Role
- 隶属于集群的Role(Cluster Role)
- 隶属于项目的Role(Local Role)
- RoleBinding
- 查看RoleBinding
- 操作管理RoleBinding的2种方法
- 方法1
- 方法2
- 查看RBAC
- 查看当前用户的RBAC
- 查看哪些用户具备特定RBAC
- 参考
RBAC相关概念
在OpenShift中和RBAC(基于角色的访问控制)包括以下相关对象。
身份主体(Subject):一个user、group或serviceaccount。
规则(Rule):定义了对于指定object可以做的操作(操作包括:get, list, create, update, delete, deletecollection, watch)。注意:Rule定义的是许可类型的操作,而不能定义禁止类型的操作。
规则(Role):包括了一组Rule。
绑定(Binding):关联一个身份实体和Role。
Role
隶属于集群的Role(Cluster Role)
OpenShift中包括以下几种缺省的ClusterRole:
- admin:可管理除了项目quota外其它所有项目包括的资源对象。
- basic-user:可以获得项目和用户的基本信息。
- cluster-admin:可以对任何项目进行任何操作。
- cluster-status:可以获得集群状态信息的角色。
- edit:除了Role和Binding外,可以修改项目中其它对象。
- self-provisioner:可以创建属于自己的项目。
- view:不能对项目中的对象进行任何更改,但是可以查看项目中的对象。
- 查看集群范围包括的所有ClusterRole,其中有我们常用的admin、cluster-admin等ClusterRole。
$ oc get clusterrole
NAME AGE
admin 9d
advanced-cluster-management.v2.0.0-csbg7 2d6h
advanced-cluster-management.v2.0.0-cv7p2 2d6h
advanced-cluster-management.v2.0.0-lbf42 2d6h
advanced-cluster-management.v2.0.0-q7dxx 2d6h
aggregate-olm-edit 9d
aggregate-olm-view 9d
alertmanager-main 9d
applications.app.k8s.io-v1beta1-admin 2d6h
applications.app.k8s.io-v1beta1-crdview 2d6h
applications.app.k8s.io-v1beta1-edit 2d6h
applications.app.k8s.io-v1beta1-view 2d6h
basic-user 9d
channels.apps.open-cluster-management.io-v1-admin 2d6h
channels.apps.open-cluster-management.io-v1-crdview 2d6h
channels.apps.open-cluster-management.io-v1-edit 2d6h
channels.apps.open-cluster-management.io-v1-view 2d6h
checlusters.org.eclipse.che-v1-admin 9d
checlusters.org.eclipse.che-v1-crdview 9d
checlusters.org.eclipse.che-v1-edit 9d
checlusters.org.eclipse.che-v1-view 9d
cloud-credential-operator-role 9d
cluster-admin
。。。
- 查看名为cluster-admin的ClusterRole,可以看到其中的PolicyRule部分通过“通配符*”让该角色可以对所有资源进行所有操作。
$ oc describe clusterrole cluster-admin
Name: cluster-admin
Labels: kubernetes.io/bootstrapping=rbac-defaults
Annotations: rbac.authorization.kubernetes.io/autoupdate: true
PolicyRule:Resources Non-Resource URLs Resource Names Verbs--------- ----------------- -------------- -----*.* [] [] [*][*] [] [*]
隶属于项目的Role(Local Role)
- 查看一个项目中包含的本地Role。
$ oc new-project my-project
$ oc get role -n my-project
No resources found in my-project namespace.
- 在指定项目中创建一个新的Local Role。
$ oc create role podview --verb=get --resource=pod -n my-project
role.rbac.authorization.k8s.io/podview created
$ oc get role -n my-project
NAME AGE
podview 22s
$ oc describe role podview -n my-project
Name: podview
Labels: <none>
Annotations: <none>
PolicyRule:Resources Non-Resource URLs Resource Names Verbs--------- ----------------- -------------- -----pods [] [] [get]
- 查看所有项目中包含的本地Role。
$ oc get role -A
NAMESPACE NAME AGE
default prometheus-k8s 9d
kube-public system:controller:bootstrap-signer 9d
kube-system aws-creds-secret-reader 9d
kube-system extension-apiserver-authentication-reader 9d
kube-system prometheus-k8s 9d
kube-system system::leader-locking-kube-controller-manager 9d
kube-system system::leader-locking-kube-scheduler 9d
kube-system system:controller:bootstrap-signer 9d
kube-system system:controller:cloud-provider 9d
kube-system system:controller:token-cleaner 9d
kube-system system:openshift:leader-election-lock-kube-controller-manager 9d
kube-system system:openshift:leader-locking-openshift-controller-manager 9d
openshift-apiserver-operator prometheus-k8s 9d
openshift-apiserver prometheus-k8s 9d
openshift-authentication-operator prometheus-k8s 9d
openshift-authentication prometheus-k8s 9d
openshift-cloud-credential-operator prometheus-k8s 9d
openshift-cluster-machine-approver prometheus-k8s
。。。
- 查看以上结果中同属于openshift-machine-api项目的不同Role的PolicyRule。确认名为machine-api-operator的Role能查看相关资源,而名为machine-api-controllers的Role能创建和修改相关资源。
$ oc describe role -n openshift-machine-api machine-api-controllers
Name: machine-api-controllers
Labels: <none>
Annotations: include.release.openshift.io/self-managed-high-availability: trueinclude.release.openshift.io/single-node-developer: true
PolicyRule:Resources Non-Resource URLs Resource Names Verbs--------- ----------------- -------------- -----*.healthchecking.openshift.io [] [] [*]*.machine.openshift.io [] [] [*]events [] [] [create watch list patch]configmaps [] [] [get list watch create update patch delete]secrets [] [] [get list watch create update patch delete]leases.coordination.k8s.io [] [] [get list watch create update patch delete]baremetalhosts.metal3.io [] [] [get list watch update patch]baremetalhosts.metal3.io/finalizers [] [] [update]baremetalhosts.metal3.io/status [] [] [update]$ oc describe role -n openshift-machine-api machine-api-operator
Name: machine-api-operator
Labels: <none>
Annotations: include.release.openshift.io/self-managed-high-availability: trueinclude.release.openshift.io/single-node-developer: true
PolicyRule:Resources Non-Resource URLs Resource Names Verbs--------- ----------------- -------------- -----services [] [] [create watch get list patch]servicemonitors.monitoring.coreos.com [] [] [create watch get list patch]secrets [] [] [get create]configmaps [] [] [get list watch create update patch delete]daemonsets.apps [] [] [get list watch create update patch delete]deployments.apps [] [] [get list watch create update patch delete]*.machine.openshift.io [] [] [list watch]
RoleBinding
角色绑定(RoleBinding)是将角色中定义的权限赋予一个或者一组用户。 它包含若干主体(用户,组和SerIveAccount)的列表和对这些主体所获得的角色的引用。 我们可以使用 RoleBinding 在指定的命名空间中执行授权, 或者在集群范围的命名空间使用 ClusterRoleBinding 来执行授权。
查看RoleBinding
- 查看openshift-machine-api项目中的名为cluster-autoscaler的Role,这个Role定义了它能对什么资源做哪些操作。
$ oc describe role cluster-autoscaler -n openshift-machine-api
Name: cluster-autoscaler
Labels: k8s-addon=cluster-autoscaler.addons.k8s.iok8s-app=cluster-autoscaler
Annotations: <none>
PolicyRule:Resources Non-Resource URLs Resource Names Verbs--------- ----------------- -------------- -----configmaps [] [] [create]configmaps [] [cluster-autoscaler-status] [delete get update]
- 查看openshift-machine-api项目中的名为cluster-autoscaler的RoleBinding,它将名为cluster-autoscaler的Role和名为cluster-autoscaler的SerIveAccount类型用户绑定,使得cluster-autoscaler的SerIveAccount拥有了在名为cluster-autoscaler的Role的权限。
$ oc describe rolebinding cluster-autoscaler -n openshift-machine-api
Name: cluster-autoscaler
Labels: k8s-addon=cluster-autoscaler.addons.k8s.iok8s-app=cluster-autoscaler
Annotations: <none>
Role:Kind: RoleName: cluster-autoscaler
Subjects:Kind Name Namespace---- ---- ---------ServiceAccount cluster-autoscaler openshift-machine-api
操作管理RoleBinding的2种方法
方法1
- 针对当前项目,将Local Role和身份主体绑定或解绑。
$ oc adm policy add-role-to-user <ROLE> <USER>
$ oc adm policy add-role-to-user <ROLE> -z <SERVICEACCOUNT> # 将将当前项目的SERVICEACCOUNT和ROLE绑定
$ oc adm policy add-role-to-group <ROLE> <GROUP>
$ oc adm policy remove-role-from-user <ROLE> <USER>
$ oc adm policy remove-role-from-user <ROLE> -z <SERVICEACCOUNT>
$ oc adm policy remove-role-from-group <ROLE> <GROUP>
$ oc adm policy remove-user <USER> # 将GROUP的所有Binding从当前项目中删除
$ oc adm policy remove-group <GROUP> # 将GROUP的所有Binding从当前项目中删除
- 将Cluster Role和身份主体绑定或解绑。
$ oc adm policy add-cluster-role-to-user <CLUSTERROLE> <USER>
$ oc adm policy add-cluster-role-to-group <CLUSTERROLE> <GROUP>
$ oc adm policy remove-cluster-role-from-user <CLUSTERROLE> <USER>
$ oc adm policy remove-cluster-role-from-group <CLUSTERROLE> <GROUP>
- 将user1用户和my-project项目的podview角色绑定。然后查看自动生成的rolebinding的详细信息,确认它关联了podview角色和user1用户。
$ oc adm policy add-role-to-user podview user1 --role-namespace=my-project -n my-project
role.rbac.authorization.k8s.io/podview added: "user1"
$ oc describe rolebinding podview
Name: podview
Labels: <none>
Annotations: <none>
Role:Kind: RoleName: podview
Subjects:Kind Name Namespace---- ---- ---------User user1
方法2
- 还可通过以下方式创建RoleBinding对象,关联一个Role和多个身份主体。
$ oc create rolebinding <ROLEBINDING-NAME> --clusterrole=<CLUSTER-ROLE> --user=<USER-1> --user=<USER-2> --group=<GROUP-1> --group=<GROUP-2>
$ oc create rolebinding <ROLEBINDING-NAME> --role=<ROLE> --user=<USER-1> --user=<USER-2> --group=<GROUP-1> --group=<GROUP-2>
- 删除或编辑RoleBinding对象。
$ oc edit rolebinding <ROLEBINDING-NAME>
$ oc delete rolebinding <ROLEBINDING-NAME>
查看RBAC
查看当前用户的RBAC
- 列出当前用户对指定资源的操作能力。(理论上是该用户所属所有Role所包括的Rule集合)
$ oc auth can-i --list --namespace=my-serviceaccount
Resources Non-Resource URLs Resource Names Verbs
applications.app.k8s.io [] [] [* create update patch delete get list watch]
channels.apps.open-cluster-management.io [] [] [* create update patch delete get list watch]
deployables.apps.open-cluster-management.io [] [] [* create update patch delete get list watch]
clustermanagers.operator.open-cluster-management.io [] [] [* create update patch delete get list watch]
checlusters.org.eclipse.che [] [] [* create update patch delete get list watch]
*.* [] [] [*][*] [] [*]
。。。
查看哪些用户具备特定RBAC
- 查看哪些身份主体拥有一个指定的Rule能力。注意:首先要在OpenShift中创建一个名为user1的用户。
$ oc login -u user1 -p <PASSWORD>
$ oc new-project user1-project
$ oc policy who-can list pods -n user1-project
resourceaccessreviewresponse.authorization.openshift.io/<unknown>Namespace: user1-project
Verb: list
Resource: podsUsers: opentlc-mgrsystem:adminsystem:kube-controller-managersystem:kube-schedulersystem:serviceaccount:kube-system:attachdetach-controllersystem:serviceaccount:kube-system:cronjob-controllersystem:serviceaccount:kube-system:daemon-set-controllersystem:serviceaccount:kube-system:deployment-controllersystem:serviceaccount:kube-system:endpoint-controller
。。。system:serviceaccount:user1-project:deployeruser1
Groups: system:cluster-adminssystem:cluster-readerssystem:masters
参考
https://docs.openshift.com/container-platform/4.5/authentication/using-rbac.html
https://www.cnblogs.com/sammyliu/p/10083659.html
OpenShift 4 - RBAC基于Role的访问授权相关推荐
- 如何设计数据库表实现完整的RBAC(基于角色权限控制)
来源:http://hi.baidu.com/seamcker/blog/item/efcdad58f9cd3cdd9d82042f.html RBAC(基于角色的权限控制)是一个老话题了,但是这两天 ...
- 《开源容器云OpenShift:构建基于Kubernetes的企业应用云平台》一2.3 完善OpenShift集群...
本节书摘来自华章出版社<开源容器云OpenShift:构建基于Kubernetes的企业应用云平台>一书中的第2章,第2.3节,作者 陈耿 ,更多章节内容可以访问云栖社区"华章计 ...
- RBAC基于角色的用户权限管理
美国国家标准与技术研究院(The National Institute Of Standards And Technology,NIST)标准RABC(Role-based policies Acce ...
- java的string访问某个元素_架构师必懂的——RBAC基于角色的访问权限设计
RBAC 是基于角色的访问控制(Role-Based Access Control )在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限.这就极大地简化了权限的管理.这 ...
- RBAC(基于角色的权限访问控制)
第一节.RBAC简介 英文全称(Role-Based Access Control) 中文全称:基于角色的权限访问控制 rbac: 一种数据库设计思想,根据设计数据库设计方案,完成项目的权限控制. 经 ...
- RBAC 基于角色的访问控制
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用 ...
- OpenShift 4.3 - 基于虚拟机的BareMetal离线安装(Shell说明)
<OpenShift 4.x HOL教程汇总> OCP 4.3 Install on KVM as BareMetal - Shell说明
- OpenShift 4.3 - 基于虚拟机的BareMetal离线安装(7-9)
<OpenShift 4.x HOL教程汇总> OCP 4.3 Install on KVM as BareMetal (7-9)
- OpenShift 4.3 - 基于虚拟机的BareMetal离线安装(5-6)
<OpenShift 4.x HOL教程汇总> OCP 4.3 Install on KVM as BareMetal (5-6)
最新文章
- 静态Web服务器-返回固定页面数据
- php 根据位置显示地图,php通过地址获得百度地图经纬度(地理编码)
- UVa11100 The Trip,2007(贪心)
- 【前端开发系列】—— 利用选择器添加内容
- C++ class实现双向循环链表(完整代码)
- UVa 642 - Word Amalgamation
- spring boot如何创建一个start_如何创建一个简单的Spring应用?
- 【渝粤教育】国家开放大学2018年春季 8618-21T燃气行业规范 参考试题
- mysql安装配置jdbc_JDBC环境配置
- 一个移动端的在线五笔输入法
- python国内股票数据分析方法_Python股票数据分析
- 从零开始自制实现WebServer(十九)---- 正式系统的学习一下Git 捣鼓捣鼓github以及一些其他的小组件
- arccatalog点要素显示不完_shp文件转为dwg之后在arcgis下打开属性表有高程信息但在cad里面打开为何没高程 - 地学 - 小木虫 - 学术 科研 互动社区...
- 自己做一个table插件 (一)Ajax获取数据后动态生成table
- Excel单元格内插入图片(VBA创建函数,根据图片名称批量插入)
- 逻辑备份数据导入原分区表遇到的那些事儿
- 索罗斯狙击泰铢挣钱原理
- 如何在Excel中根据数量生成抽奖名单
- vueadmin-template应用1:安装入门
- 西瓜书知识总结(第三章)
热门文章
- file_get_contents js没有渲染数据_浏览器渲染页面那些事
- resultmap的写法_如何向resultMap中的collection中配置的select传递条件
- 正能量励志文字手机壁纸
- 软件调试中的断点分类
- C++数据结构04--顺序栈的实现
- Linux Jump Label/static-key机制详解
- Python OOP 项目实践:从农药到吃鸡
- ubuntu安装mysql报错_解决Ubuntu 12.04中更改MySQL默认编码报错
- python time库_python--time库的使用
- linux下ftp相关的一些指令