OpenShift 使用者許可權管理例項

qianby發表於2021-09-09

簡介

        由於公司的日常專案開發測試環境都遷移到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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章