【Openshift】用戶權限管理


令牌

openshift通過用戶提供的登錄信息確認用戶身份的過程即認證的過程,openshift通過OAuth進行用戶的認證,OAuth是一個開源的認證和授權的框架,在openshift的master節點上運行着一個內置的OAuth服務對用戶的請求進行認證檢查。一旦OAuth服務器通過登錄信息確認用戶身份,OAuth服務器就返回用戶的token,通過token,用戶可以在有效時間內對系統進行訪問。

獲取當前用戶當前會話token

~]# oc login -u dev
~]# oc whoami -t
#還可以通過訪問URL獲取token
curl -v --insecure --user username:passwrod --header "X-CSRF-Token: xxx" --url "https://master.example.com:8443/oauth/authorize?response_type=token&client_id=openshift-challenging-client"

Indentity Provider

作為身份驗證的登錄信息,如用戶名和密碼,並非保存在openshift集群內,而是保存早用戶信息管理系統內,openshift並不包含具體的用戶信息庫管理系統,但是openshift提供不同的適配器連接不同的用戶信息管理系統。這些后端的用戶信息管理系統在openshift中稱為Indentity Provider

查看master-config.yaml配置,可以看到當前示例集群使用的Provider的類型及配置

~]# cat /etc/origin/master/master-config.yaml|grep provider -A 3

假設用戶為openshift配置某個Indentity Provider,當用戶第一次登陸時,openshift會為這個用戶創建一個user對象及一個identity對象。

~]# oc get identity

這里接下來我們采用htpasswd作為Indentity Provider

用戶組管理

openshift可以通過oc get user命令查看openshift系統中的存在的用戶列表
openshift用戶信息來源於后端的Indentity Provider。

組的信息來源有兩個,一個是后端的Indentity Provider,二是通過用戶在openshift中定義,通過oadm groups命令,可以在openshift中對組及組的成員進行管理

創建developers的組

~]# oc groups new developers

將dev用戶添加到developers組內,通過組,管理員可以更方便的管理用戶,為后續權限管理打下基礎

~]# oadm groups add-users developers dev

用戶權限

1、創建openshift用戶

~]# htpasswd -b /etc/origin/master/htpasswd admin welcomel
-c: 重新創建密碼文件
#查看已經創建的用戶
~]# cat /etc/origin/master/htpasswd
#修改用戶密碼
~]# htpasswd -b htpasswd.user Jack 123456

將用戶定義為集群管理員

~]# oc adm policy add-cluster-role-to-user cluster-admin <user>
示例:為創建的用戶分配集群管理員權限
~]# oc adm policy add-cluster-role-to-user cluster-admin admin

授權

openshift系統默認會創建很多的集群角色。常用的角色的簡單描述如下

admin:project manager,如果用於本地 rolebinding,那么用戶將能查看和修改所在項目中的所有資源
basic-user:user 可以獲取關於項目和用戶的基本信息
cluster-admin:用戶可以在任何項目中做任何操作(超級用戶),如何用於本地 rolebinding,那么用戶將擁有所在project的所有權限,包括控制quota和role
cluster-status:用戶可以獲取集群的基本狀態信息
edit:用戶可以修改項目中的大部分對象;但是不能查看或修改 role 和 rolebinding
self-provisioner:所有用戶的默認role,可以創建自己的project
view:用戶可以查看項目中的大部分對象,除了 role 和 rolebinding,用戶不能做任何修改任何對象 

本地role綁定命令

命令	                                                描述
$ oc adm policy who-can <verb><resource>	指出哪些用戶可以對某一資源執行某種操作。
$ oc adm policy add-role-to-user <role><username>	將指定角色綁定到當前項目中的指定用戶。
$ oc adm policy remove-role-from-user<role> <username>	從當前項目中的指定用戶移除指定角色。
$ oc adm policy remove-user <username>	移除當前項目中的指定用戶及其所有角色。
$ oc adm policy add-role-to-group <role><groupname>	將給定角色綁定到當前項目中的指定組。
$ oc adm policy remove-role-from-group<role> <groupname>	從當前項目中的指定組移除給定角色。
$ oc adm policy remove-group<groupname>	移除當前項目中的指定組及其所有角色。

集群role綁定命令

命令	                                                            描述
$ oc adm policy add-cluster-role-to-user<role> <username>	將給定角色綁定到集群中所有項目的指定用戶。
$ oc adm policy remove-cluster-role-from-user <role> <username>	從集群中所有項目的指定用戶移除給定角色。
$ oc adm policy add-cluster-role-to-group <role> <groupname>	將給定角色綁定到集群中所有項目的指定組。
$ oc adm policy remove-cluster-role-from-group <role> <groupname>	從集群中所有項目的指定組移除給定角色。

向指定項目中的用戶添加role

~]# oc adm policy add-role-to-user <role> <user> -n <project>
#示例
~]# oc adm policy add-role-to-user view arvato_dev -n sephora-stage
~]# oc adm policy add-role-to-user edit arvato_ops -n sephora-stage

查看role綁定

~]# oc get rolebinding

查看cluster role綁定

~]# oc get clusterrolebinding

自定義role

創建本地role

~]# oc create role <name> --verb=<verb> --resource=<resource> -n <project>
○ <name>,本地角色的名稱
○ <verb>,以逗號分隔的、應用到角色的操作動詞列表
○ <resource>,角色應用到的資源
○ <project>,項目名稱

例:要創建一個本地角色來允許用戶查看 blue 項目中的 Pod

~]# oc create role podview --verb=get --resource=pod -n blue
#新角色綁定到用戶
~]# oc adm policy add-role-to-user podview user2 --role-namespace=blue -n blue

創建集群role

~]# oc create clusterrole <name> --verb=<verb> --resource=<resource>
○ <name>,本地角色的名稱
○ <verb>,以逗號分隔的、應用到角色的操作動詞列表
○ <resource>,角色應用到的資源

例如,要創建一個集群角色來允許用戶查看 Pod,請運行以下命令:

~]# oc create clusterrole podviewonly --verb=get --resource=pod

Serviceaccount

Service account是openshift中特殊的用戶賬號,這些賬號專門用於容器應用交互
每當創建一個新的項目時,openshift都會為這個項目創建一系列的service account,如builder賬號用戶構建S2I,default賬號用於運行容器,deployer賬號用戶部署容器

查看當前項目的serviceaccount

$ oc get sa
NAME       SECRETS   AGE
builder    2         2d
default    2         2d
deployer   2         2d

在當前項目中創建新服務帳戶:

$ oc create sa <service_account_name>
serviceaccount "robot" created

serviceaccount授權

默認openshift啟動容器不能調用宿主機的資源,比如端口
openshift默認啟動的容器禁止使用Root用戶,需要使用root需要修改scc
scc限制了容器內啟動用戶UID范圍,也就數說,雖然Dcokerfile中定義容器和用戶的安全上下文設置決定是按dockerfile指定用戶啟動,還是隨機生成一個普通用戶運行

修改當前項目的服務賬號
例如,將 view 角色添加到 top-secret 項目中的 robot 服務帳戶:

$ oc adm policy add-role-to-user view system:serviceaccount:top-secret:robot
#也可以使用如下方法:
$ oc adm policy add-role-to-user <role_name> -z <serviceaccount_name>

示例:新建sa賬號arvato-api,訪問所有名稱空間

$ oc project sephora-prod
$ oc create sa arvato-api
$ oc adm policy add-cluster-role-to-user cluster-reader  system:serviceaccount:sephora-prod:arvato-api

獲取sa賬號的token

oc serviceaccounts get-token arvato-ops

安全上下文(SCC)

scc主要是控制pod的權限,只有serviceaccount才使用到scc
通過身份認證了的用戶都只在 restricted 這個 scc 的用戶列表,包括 service account。因此,pod 默認使用的是 restricted scc。要使它使用其它的scc,就要將它的 service account user 加入到要使用的 scc 的用戶列表之中

查看scc列表

~]# oc get scc
privileged: openshift內置的scc,權限最大,包括修改selinux和anyuid
anyuid: pod內可以修改uid,使用root
#授權
~]# oc adm policy add-scc-to-user <scc_name> <user_name>
~]# oc adm policy add-scc-to-user anyuid -z nginxuser
#等同於
~]# oc adm policy add-scc-to-user anyuid system:serviceaccount:default:nginxuser

示例:給default的sa賬號配置privileged組的scc

~]# oc project sephora-stage
~]# oc adm policy add-scc-to-user privileged -z default

參考鏈接:https://www.cnblogs.com/sammyliu/p/10083659.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM