OpenShift 使用者許可權管理例項
簡介
由於公司的日常專案開發測試環境都遷移到openshift上了。有眾多開發測試人員需要登陸到openshift上進行操作,如果直接給admin許可權,肯定是不行的。而openshift是支援多租戶的許可權管理。所以,就在建立普通使用者的基礎上賦予各種不同的許可權限制來自控制對openshift上project的操作。
Prerequisite
有開發人員:dev1、dev2、dev3
有測試人員:tester1、tester2、tester3
有專案A 、專案B、專案C的ci,sit,uat環境,openshift專案名為aci、asit、auat,bci、bsit、buat,cci、csit、cuat.
要求
1、開發人員對CI環境有操作許可權,對SIT、UAT環境只有檢視許可權
2、測試人員對SIT環境有操作許可權,對CI環境只有檢視許可權
3、所有人員有自己的登入賬戶,均可見openshift上所有的業務專案,不可見系統專案
實現過程
1、建立登入使用者
ansible masters -m shell -a "htpasswd -b /etc/origin/master/htpasswd dev1 dev1"ansible masters -m shell -a "htpasswd -b /etc/origin/master/htpasswd dev2 dev2"ansible masters -m shell -a "htpasswd -b /etc/origin/master/htpasswd dev3 dev3"ansible masters -m shell -a "htpasswd -b /etc/origin/master/htpasswd tester1 tester1"ansible masters -m shell -a "htpasswd -b /etc/origin/master/htpasswd tester2 tester2"ansible masters -m shell -a "htpasswd -b /etc/origin/master/htpasswd tester3 tester3"
2、建立使用者組
oc adm groups new developeroc adm groups new tester
3、將使用者新增到使用者組中
oc adm groups add-users developer dev1 dev2 dev3
oc adm groups add-users tester tester1 tester2 tester3
4、針對專案,給使用者組賦予系統角色
oc adm policy add-role-to-group edit developer -n aci
oc adm policy add-role-to-group edit developer -n bci
oc adm policy add-role-to-group edit developer -n cci
oc adm policy add-role-to-group view developer -n asit
oc adm policy add-role-to-group view developer -n auat
oc adm policy add-role-to-group view developer -n bsit
oc adm policy add-role-to-group view developer -n buat
oc adm policy add-role-to-group view developer -n csit
oc adm policy add-role-to-group view developer -n cuat
oc adm policy add-role-to-group edit tester -n asit
oc adm policy add-role-to-group edit tester -n auat
oc adm policy add-role-to-group edit tester -n bsit
oc adm policy add-role-to-group edit tester -n buat
oc adm policy add-role-to-group edit tester -n csit
oc adm policy add-role-to-group edit tester -n cuat
oc adm policy add-role-to-group view tester -n aci
oc adm policy add-role-to-group view tester -n bci
oc adm policy add-role-to-group view tester -n cci
實際操作過程中,在以某以開發人員登入openshift過程中,依舊會看到openshift 其他一些專案的namespace。例如base namespace,該namespace專案是在registry映象註冊倉庫中建立映象專案時自動建立的openshift namespace。(在registry映象註冊倉庫中建立base映象專案是為了存放一些自定義的s2i映象)。為了使其他openshift namespace使用其中的s2i映象,特別在registry映象註冊倉庫中是映象專案的訪問策略設定為共享的。種種以上,導致openshift上的base namespace是能被所有的已認證的使用者檢視到。
在openshift中檢視base專案的membership
可以發現,凡是在registry映象註冊倉庫中設定問訪問策略設定為共享的,都會在openshift 專案中新增一個系統使用者system:authenticated 。這個系統使用者上繫結的是這個角色registry-viewer。在openshift後臺檢視該角色的詳細資訊
發現該角色有對namespace資源擁有get動作。仔細想想,該system:authenticated使用者只是讓openshift其他專案的系統使用者能夠拉取其下的映象流。而在Kubernetes中使用名稱空間的概念來分隔資源。在同一個名稱空間中,某一個物件的名稱在其分類中必須唯一,但是分佈在不同名稱空間中的物件則可以同名。OpenShift中繼承了Kubernetes名稱空間的概念,而且在其之上定義了Project物件的概念。每一個Project會和一個Namespace相關聯,甚至可以簡單地認為,Project就是Namespace。所以,該使用者對project資源有獲取許可權,那就把對namespace的許可權給去掉試試。
先匯出角色registry-viewer的bindding配置檔案
oc export clusterrole registry-viewer > registry-viewer.yml
然後修改配置檔案,註釋掉get namespace的動作
再將叢集中角色刪掉(此時特別注意:從叢集中刪掉registry-viewer角色後會導致已有映象註冊倉庫中映象的訪問策略從共有變成私有,base專案的membership中會刪掉system:authenticated該使用者)
oc delete clusterrole registry-viewer
接著再從配置檔案中建立角色
oc create -f registry-viewer.yml
最後再次修改映象註冊倉庫中映象的訪問策略從私有變成共有。再次檢視base專案中membership.
最有再以測試人員賬戶登入檢視。不再顯示base專案。測試其他專案去拉取base專案中的映象,看去掉registry-viewer角色中role是否有影響。
實際使用過程中,測試人員需要以openshift上的使用者名稱密碼登入openshift上的jenkins,還要對jenkins做操作,比如在jenkins上做構建操作,檢視構建日誌等。需要對測試人員分組tester賦予對jenkins的編輯許可權。初步思路是直接給tester分組服務系統角色clusterrole edit(oc adm policy add-cluster-role-to-group edit tester)。但是再以測試人員登入時還是能看到jenkins的專案,甚至能操作openshift上jenkins pod的重新部署。這是不可接受的。
那就換個思路。自己建立一個叢集角色clusterrole,在角色上繫結若干規則,再將這個叢集角色賦予測試組,相應的測試組成員能登入jenkins,並對jenkins做操作。
具體過程如下:
1、先檢視叢集角色edit的配置,看edit都對那些資源都有什麼動作
發現資源型別竟然有類似於jenkins的東西(不懂),那一會做修改的時候就保留著。發現還有serviceaccount資源的操作,這個估計跟過去認證有關,那也保留著吧。(對service account,config map,scc這些型別的資源理解的還不夠深)
2、匯出叢集角色edit的配置檔案到本地檔案,在其上做修改
oc export clusterrole edit > jenkins-clusterrole.yml
3、編輯 jenkins-clusterrole.yml(只保留相重要的,其他的都刪掉)
4.匯入jenkins clusterrole。
oc create -f jenkins-clusterrole.yml
5.將jenkins clusterrole賦予測試組
oc adm policy add-cluster-role-to-group jenkins tester
點選"",發現也能正常登入jenkins。然後進行一次構建觸發。發現一切正常。
Bazinga!Everything is ok !
(話說簡書的編輯器真的不太友好啊,功能有點少啊)
作者:WCuriouser
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3549/viewspace-2820626/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- linux許可權管理,例項: 建立共享目錄Linux
- mysql使用者許可權管理MySql
- 005.OpenShift訪問控制-許可權-角色
- MongoDB 使用者與許可權管理MongoDB
- MySQL 使用者及許可權管理?MySql
- Linux使用者、組、許可權管理Linux
- MySQL使用者及許可權管理MySql
- Oracle使用者角色許可權管理Oracle
- MySQL使用者許可權控制一例MySql
- vsftpd多例項多使用者不同許可權FTP
- 使用者許可權管理之使用者與組管理
- 使用者角色許可權管理架構架構
- MySQL-03.使用者管理和許可權管理MySql
- PostgreSQL資料庫使用者許可權管理SQL資料庫
- 前端如何進行使用者許可權管理前端
- mysql 使用者及許可權管理 小結MySql
- 4、許可權管理
- sql許可權管理SQL
- RBAC許可權管理
- MySQL許可權管理MySql
- 許可權管理策略
- PostgreSQL:許可權管理SQL
- Odoo許可權管理Odoo
- 特殊許可權管理
- django開發之許可權管理(一)——許可權管理詳解(許可權管理原理以及方案)、不使用許可權框架的原始授權方式詳解Django框架
- nodejs的使用者許可權管理——acl.mdNodeJS
- linux使用者許可權Linux
- Security 10:許可權管理
- casbin-許可權管理
- Android6.0------許可權申請管理(單個許可權和多個許可權申請)Android
- DRF內建許可權元件之自定義許可權管理類元件
- Linux使用者與許可權Linux
- 賬號和許可權管理
- 關於mysql許可權管理MySql
- Linux 下許可權的管理Linux
- 1.6.1. 管理員許可權
- Linux 中的許可權管理Linux
- ThinkPHP5+許可權管理PHP