《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:不能对项目中的对象进行任何更改,但是可以查看项目中的对象。
  1. 查看集群范围包括的所有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
。。。
  1. 查看名为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)

  1. 查看一个项目中包含的本地Role。
$ oc new-project my-project
$ oc get role -n my-project
No resources found in my-project namespace.
  1. 在指定项目中创建一个新的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]
  1. 查看所有项目中包含的本地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
。。。
  1. 查看以上结果中同属于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

  1. 查看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]
  1. 查看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

  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从当前项目中删除
  1. 将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>
  1. 将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

  1. 还可通过以下方式创建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>
  1. 删除或编辑RoleBinding对象。
$ oc edit rolebinding <ROLEBINDING-NAME>
$ oc delete rolebinding <ROLEBINDING-NAME>

查看RBAC

查看当前用户的RBAC

  1. 列出当前用户对指定资源的操作能力。(理论上是该用户所属所有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

  1. 查看哪些身份主体拥有一个指定的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的访问授权相关推荐

  1. 如何设计数据库表实现完整的RBAC(基于角色权限控制)

    来源:http://hi.baidu.com/seamcker/blog/item/efcdad58f9cd3cdd9d82042f.html RBAC(基于角色的权限控制)是一个老话题了,但是这两天 ...

  2. 《开源容器云OpenShift:构建基于Kubernetes的企业应用云平台》一2.3 完善OpenShift集群...

    本节书摘来自华章出版社<开源容器云OpenShift:构建基于Kubernetes的企业应用云平台>一书中的第2章,第2.3节,作者 陈耿 ,更多章节内容可以访问云栖社区"华章计 ...

  3. RBAC基于角色的用户权限管理

    美国国家标准与技术研究院(The National Institute Of Standards And Technology,NIST)标准RABC(Role-based policies Acce ...

  4. java的string访问某个元素_架构师必懂的——RBAC基于角色的访问权限设计

    RBAC 是基于角色的访问控制(Role-Based Access Control )在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限.这就极大地简化了权限的管理.这 ...

  5. RBAC(基于角色的权限访问控制)

    第一节.RBAC简介 英文全称(Role-Based Access Control) 中文全称:基于角色的权限访问控制 rbac: 一种数据库设计思想,根据设计数据库设计方案,完成项目的权限控制. 经 ...

  6. RBAC 基于角色的访问控制

    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用 ...

  7. OpenShift 4.3 - 基于虚拟机的BareMetal离线安装(Shell说明)

    <OpenShift 4.x HOL教程汇总> OCP 4.3 Install on KVM as BareMetal - Shell说明

  8. OpenShift 4.3 - 基于虚拟机的BareMetal离线安装(7-9)

    <OpenShift 4.x HOL教程汇总> OCP 4.3 Install on KVM as BareMetal (7-9)

  9. OpenShift 4.3 - 基于虚拟机的BareMetal离线安装(5-6)

    <OpenShift 4.x HOL教程汇总> OCP 4.3 Install on KVM as BareMetal (5-6)

最新文章

  1. 静态Web服务器-返回固定页面数据
  2. php 根据位置显示地图,php通过地址获得百度地图经纬度(地理编码)
  3. UVa11100 The Trip,2007(贪心)
  4. 【前端开发系列】—— 利用选择器添加内容
  5. C++ class实现双向循环链表(完整代码)
  6. UVa 642 - Word Amalgamation
  7. spring boot如何创建一个start_如何创建一个简单的Spring应用?
  8. 【渝粤教育】国家开放大学2018年春季 8618-21T燃气行业规范 参考试题
  9. mysql安装配置jdbc_JDBC环境配置
  10. 一个移动端的在线五笔输入法
  11. python国内股票数据分析方法_Python股票数据分析
  12. 从零开始自制实现WebServer(十九)---- 正式系统的学习一下Git 捣鼓捣鼓github以及一些其他的小组件
  13. arccatalog点要素显示不完_shp文件转为dwg之后在arcgis下打开属性表有高程信息但在cad里面打开为何没高程 - 地学 - 小木虫 - 学术 科研 互动社区...
  14. 自己做一个table插件 (一)Ajax获取数据后动态生成table
  15. Excel单元格内插入图片(VBA创建函数,根据图片名称批量插入)
  16. 逻辑备份数据导入原分区表遇到的那些事儿
  17. 索罗斯狙击泰铢挣钱原理
  18. 如何在Excel中根据数量生成抽奖名单
  19. vueadmin-template应用1:安装入门
  20. 西瓜书知识总结(第三章)

热门文章

  1. file_get_contents js没有渲染数据_浏览器渲染页面那些事
  2. resultmap的写法_如何向resultMap中的collection中配置的select传递条件
  3. 正能量励志文字手机壁纸
  4. 软件调试中的断点分类
  5. C++数据结构04--顺序栈的实现
  6. Linux Jump Label/static-key机制详解
  7. Python OOP 项目实践:从农药到吃鸡
  8. ubuntu安装mysql报错_解决Ubuntu 12.04中更改MySQL默认编码报错
  9. python time库_python--time库的使用
  10. linux下ftp相关的一些指令