日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

005.OpenShift訪問控制-權(quán)限-角色

 小世界的野孩子 2022-06-19 發(fā)布于北京

一 Kubetcl namespace

1.1 namespace描述

Kubernetes namespace提供了將一組相關(guān)資源組合在一起的機(jī)制。在Red Hat OpenShift容器平臺(tái)中,project是一個(gè)帶有附加注釋的Kubernetes namespace。
namespace提供以下特性:
  1. 命名資源,以避免基本的命名沖突;
  2. 將管理權(quán)限授予受信任的用戶;
  3. 限制用戶資源消耗的能力;
  4. 用戶和用戶組隔離。

1.2 project

project提供了一種機(jī)制,通過這種機(jī)制可以管理普通用戶對(duì)資源的訪問。project允許一組用戶獨(dú)立于其他組組織和管理其內(nèi)容,必須允許用戶訪問項(xiàng)目。如果允許創(chuàng)建項(xiàng)目,用戶將自動(dòng)訪問自己的項(xiàng)目。
項(xiàng)目可以有單獨(dú)的name、display name和description。
name是項(xiàng)目的唯一標(biāo)識(shí)符,在使用CLI工具或API時(shí)都是基于name,name的最大長(zhǎng)度為63個(gè)字符。
display name是項(xiàng)目在web控制臺(tái)中顯示的方式(默認(rèn)為name)。
description是項(xiàng)目的更詳細(xì)描述,并且在web控制臺(tái)中也可見。
以下組件適用于項(xiàng)目:
  • Object:pod、service、rc等;
  • Policies:決定用戶可以或不能對(duì)對(duì)象執(zhí)行哪些操作的規(guī)則;
  • Constraints:可以限制的每種對(duì)象的配額。

1.3 cluster管理

集群管理員可以創(chuàng)建項(xiàng)目并將項(xiàng)目的管理權(quán)限委托給任何用戶。在OpenShift容器平臺(tái)中,項(xiàng)目用于對(duì)相關(guān)對(duì)象進(jìn)行分組和隔離。
管理員可以讓用戶訪問某些項(xiàng)目,允許他們創(chuàng)建自己的項(xiàng)目,并在單個(gè)項(xiàng)目中賦予他們管理權(quán)限。
管理員可以將角色應(yīng)用于允許或限制其創(chuàng)建項(xiàng)目能力的用戶和組,同時(shí)可以在用戶初始登錄之前分配角色。
限制項(xiàng)目創(chuàng)建:從通過身份驗(yàn)證的用戶和組中刪除self-provisioning集群角色,將拒絕任何新項(xiàng)目的權(quán)限。
[root@master ~]$ oc adm policy remove-cluster-role-from-group \
self-provisioner \
system:authenticated \
system:authenticated:oauth
授予項(xiàng)目創(chuàng)建:項(xiàng)目創(chuàng)建授予具有self-供應(yīng)者角色和self-provisione集群角色綁定的用戶。默認(rèn)情況下,所有經(jīng)過身份驗(yàn)證的用戶都可以使用這些角色。
[root@master ~]$ oc adm policy add-cluster-role-to-group \
self-provisioner \
system:authenticated \
system:authenticated:oauth

1.4 創(chuàng)建project

如果項(xiàng)目創(chuàng)建權(quán)限被授予用戶,則可以使用oc命令創(chuàng)建project。
[root@master ~]$ oc new-project demoproject \
--description="Demonstrate project creation" \
--display-name="demo_project"

二 OpenShift角色

2.1 角色概述

role具有不同級(jí)別的訪問和策略,包括集群和本地策略。user和group可以同時(shí)與多個(gè)role關(guān)聯(lián)。運(yùn)行oc description命令查看角色及其綁定的詳細(xì)信息。
在集群策略中具有cluster-admin缺省角色的用戶可以查看集群策略和所有本地策略。在給定的本地策略中具有admin缺省角色的用戶可以基于per-project查看策略。
可通過以下命令查看當(dāng)前的集群綁定集,其中顯示綁定到不同角色的用戶和組。
[root@demo ~]# oc describe clusterPolicyBindings :default

2.2 查看本地policy

盡管本地角色列表及其關(guān)聯(lián)的規(guī)則集在本地策略中是不可查看的,但是所有缺省角色仍然適用,并且可以添加到用戶或組中,cluster-admin缺省角色除外。但是,本地綁定是可見的。
可通過以下命令查看當(dāng)前的本地綁定,其中顯示綁定到不同角色的用戶和組。
[root@demo ~]# oc describe policyBindings :default
提示:默認(rèn)情況下,在本地策略中,只會(huì)列出admin角色的綁定。但是,如果將其他默認(rèn)角色添加到本地策略中的用戶和組,也會(huì)列出它們。

2.3 管理role綁定

向用戶或組添加或綁定角色,從而實(shí)現(xiàn)向用戶或組提供角色授予的相關(guān)訪問權(quán)限。可以使用oc adm policy命令在用戶和組之間添加和刪除角色。
當(dāng)使用以下操作管理本地策略的用戶和組角色時(shí),可以使用-n選項(xiàng)指定項(xiàng)目。如果沒有指定,則使用當(dāng)前項(xiàng)目。
常見管理本地策略操作:
命令
描述
oc adm policy who-can verb resource
設(shè)置哪些用戶可以對(duì)資源執(zhí)行操作
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-fromgroup role groupname
從指定組中移除給定角色
oc adm policy remove-group groupname
刪除指定的組及其所有角色
還可以使用如下所示的的操作管理cluster policy的role binding,這類命令不需要-n選項(xiàng),因?yàn)閏luster policy不在namespace級(jí)別上操作。
常見管理cluster policy操作:
命令
描述
oc adm policy add-cluster-role-to-user role username
將集群中所有項(xiàng)目的指定角色綁定到指定用戶
oc adm policy remove-cluster-role-from-user role username
為集群中的所有項(xiàng)目從指定用戶中刪除指定角色
oc adm policy add-cluster-role-togroup role groupname
為集群中的所有項(xiàng)目將指定的角色綁定到指定的組
oc adm policy remove-cluster-role-from-group role groupname
從集群中所有項(xiàng)目的指定組中移除給定角色
提示:oc policy命令應(yīng)用于當(dāng)前項(xiàng)目,而oc adm policy命令應(yīng)用于集群范圍的操作。
示例:在example項(xiàng)目中為developer用戶提供admin角色。
[root@demo ~]# oc adm policy add-role-to-user admin developer -n example
[root@demo ~]# oc describe policybindings :default -n example #檢查綁定

三 安全上下文約束(SCCS)

3.1 SCCS概述

OpenShift提供安全上下文約束(SCCS),它控制pod可以執(zhí)行的操作和它可以訪問的資源。默認(rèn)情況下,任何容器的執(zhí)行都只授予受限制的SCC定義的功能。
SCCS相關(guān)命令:
  1 [user@demo ~]$ oc get scc			                        #列出可用的SCC
  2 [user@demo ~]$ oc describe scc scc_name		                #現(xiàn)實(shí)特定SCC詳細(xì)信息
  3 [user@demo ~]$ oc adm policy add-scc-to-user scc_name user_name
  4 [user@demo ~]$ oc adm policy add-scc-to-group scc_name group_name	#要授予用戶或組特定的SCC
  5 [user@demo ~]$ oc adm policy remove-scc-from-user scc_name user_name
  6 [user@demo ~]$ oc adm policy remove-scc-from-group scc_name group_name	#從特定的SCC中刪除用戶或組

四 服務(wù)賬戶

4.1 服務(wù)賬戶

service account提供了一種靈活的方法來控制API訪問,而無需共享常規(guī)用戶的憑據(jù)。如果應(yīng)用程序需要訪問受限制的SCC未授予的功能,可創(chuàng)建一個(gè)新的、特定的service account并將其添加到適當(dāng)?shù)腟CC中。
例如,在缺省情況下,OpenShift不支持部署需要提升特權(quán)的應(yīng)用程序。若有此需求,可創(chuàng)建一個(gè)service account,修改dc,然后添加service account至SCC。
示例:將anyuid配置為在容器中作為root用戶運(yùn)行。
[user@demo ~]$ oc create serviceaccount useroot #創(chuàng)建一個(gè)名為useroot的新服務(wù)帳戶
[user@demo ~]$ oc patch dc/demo-app \
--patch '{"spec":{"template":{"spec":{"serviceAccountName": "useroot"}}}}' #修改應(yīng)用程序的DC
[user@demo ~]$ oc adm policy add-scc-to-user anyuid -z useroot #將useroot服務(wù)帳戶添加到anyuid SCC中,作為容器中的根用戶運(yùn)行

4.2 Web管理user成員

OCP平臺(tái)的默認(rèn)配置是,在用戶首次登錄成功時(shí),自動(dòng)創(chuàng)建該用戶對(duì)象。
要管理允許訪問項(xiàng)目的用戶,請(qǐng)以項(xiàng)目管理員或集群管理員的身份登錄到web控制臺(tái),并選擇要管理的項(xiàng)目。在左側(cè)窗格中,單擊Resources——>membership進(jìn)入項(xiàng)目member頁面。
在Users列中,在突出顯示的文本框中輸入用戶名。在“添加另一個(gè)角色”列中,從用戶所在行的列表中選擇一個(gè)角色,然后單擊“添加”。

4.3 Cli管理user成員

CLI中如果自動(dòng)創(chuàng)建對(duì)象功能被關(guān)閉,集群管理員可通過如下方式創(chuàng)建新用戶:
[root@master ~]$ oc create user demo-user
同時(shí)還需要在身份認(rèn)證軟件中創(chuàng)建用戶,如為HTPasswdIdentityProvider才用戶命令如下:
[root@master ~]$ htpasswd /etc/origin/openshift-passwd demo-user
要向用戶添加項(xiàng)目角色,首先使用oc project命令輸入項(xiàng)目,然后使用oc policy add-role-to-user命令:
[root@master ~]$ oc policy add-role-to-user edit demo-user
要從用戶中刪除項(xiàng)目角色,使用oc policy remove-role-from-user命令:
[root@master ~]$ oc policy remove-role-from-user edit demo-user
并不是所有OpenShift角色都由項(xiàng)目限定范圍。要分配這些規(guī)則,請(qǐng)使用oc adm policy command命令。
[root@master ~]$ oc adm policy add-cluster-role-to-user cluster-admin admin

4.4 身份驗(yàn)證和授權(quán)

身份驗(yàn)證層標(biāo)識(shí)與對(duì)OpenShift容器平臺(tái)API的請(qǐng)求相關(guān)聯(lián)的用戶,然后授權(quán)層使用關(guān)于請(qǐng)求用戶的身份信息來確定是否應(yīng)該允許該請(qǐng)求。
  • user和group
OCP容器平臺(tái)中的用戶是一個(gè)可以向OpenShift API發(fā)出請(qǐng)求的實(shí)體。通常,這表示與OpenShift交互的develop或administrator的帳戶。
可以將用戶分配給一個(gè)或多個(gè)組,每個(gè)組表示一組特定的角色(或權(quán)限)。當(dāng)需要通過管理授權(quán)策略給多個(gè)客戶授權(quán)時(shí)候,group會(huì)比較合適。例如允許訪問項(xiàng)目中的對(duì)象,而不是單獨(dú)授予用戶。
  • Authentication Tokens
API調(diào)用必須使用訪問令牌或X.509證書進(jìn)行身份驗(yàn)證,會(huì)話token表示用戶,并且是短期的,默認(rèn)情況下在24小時(shí)內(nèi)到期。
可以通過運(yùn)行oc whoami命令來驗(yàn)證經(jīng)過身份驗(yàn)證的用戶。
[root@master ~]$ oc login -u demo-user
[root@master ~]$ oc whoami
demo-user

4.5 身份驗(yàn)證類型

本環(huán)境中,身份驗(yàn)證由HTPasswdIdentityProvider模塊提供,該模塊根據(jù)使用htpasswd命令生成的文件驗(yàn)證用戶名和密碼。
OpenShift容器平臺(tái)支持的其他認(rèn)證類型包括:
  • Basic Authentication (Remote)
一種通用的后端集成機(jī)制,允許用戶使用針對(duì)遠(yuǎn)程標(biāo)識(shí)提供者驗(yàn)證的憑據(jù)登錄到OpenShift容器平臺(tái)。用戶將他們的用戶名和密碼發(fā)送到OpenShift容器平臺(tái),OpenShift平臺(tái)通過到服務(wù)器的請(qǐng)求驗(yàn)證這些憑據(jù),并將憑據(jù)作為基本的Auth頭傳遞。這要求用戶在登錄過程中向OpenShift容器平臺(tái)輸入他們的憑據(jù)。
  • Request Header Authentication
用戶使用請(qǐng)求頭值(如X-RemoteUser)登錄到OpenShift容器平臺(tái)。它通常與身份驗(yàn)證代理結(jié)合使用,身份驗(yàn)證代理對(duì)用戶進(jìn)行身份驗(yàn)證,然后通過請(qǐng)求頭值為OpenShift容器平臺(tái)提供用戶標(biāo)識(shí)。
  • Keystone Authentication
Keystone是一個(gè)OpenStack項(xiàng)目,提供標(biāo)識(shí)、令牌、目錄和策略服務(wù)。OpenShift容器平臺(tái)與Keystone集成,通過配置OpenStack Keystone v3服務(wù)器將用戶存儲(chǔ)在內(nèi)部數(shù)據(jù)庫中,從而支持共享身份驗(yàn)證。這種配置允許用戶使用Keystone憑證登錄OpenShift容器平臺(tái)。
  • LDAP Authentication
用戶使用他們的LDAP憑證登錄到OpenShift容器平臺(tái)。在身份驗(yàn)證期間,LDAP目錄將搜索與提供的用戶名匹配的條目。如果找到匹配項(xiàng),則嘗試使用條目的專有名稱(DN)和提供的密碼進(jìn)行簡(jiǎn)單綁定。
  • GitHub Authentication
GitHub使用OAuth,它允許與OpenShift容器平臺(tái)集成使用OAuth身份驗(yàn)證來促進(jìn)令牌交換流。這允許用戶使用他們的GitHub憑證登錄到OpenShift容器平臺(tái)。為了防止使用GitHub用戶id的未授權(quán)用戶登錄到OpenShift容器平臺(tái)集群,可以將訪問權(quán)限限制在特定的GitHub組織中。

五 管理項(xiàng)目及賬戶

5.1 前置準(zhǔn)備

準(zhǔn)備完整的OpenShift集群,參考《003.OpenShift網(wǎng)絡(luò)》2.1。

5.2 本練習(xí)準(zhǔn)備

[student@workstation ~]$ lab secure-resources setup

5.3 創(chuàng)建htpasswd賬戶

  1 [kiosk@foundation0 ~]$ ssh root@master
  2 [root@master ~]# htpasswd -b /etc/origin/master/htpasswd user1 redhat
  3 [root@master ~]# htpasswd -b /etc/origin/master/htpasswd user2 redhat
  4 #添加基于htpasswd形式的user1和user2,密碼都為redhat。

5.4 設(shè)置策略

  1 [student@workstation ~]$ oc login -u admin -p redhat https://master.lab.	#使用管理員登錄
  2 [student@workstation ~]$ oc adm policy remove-cluster-role-from-group   3 self-provisioner system:authenticated:oauth
  4 #刪除所有賦予普通創(chuàng)建項(xiàng)目的功能,該命令可參考本環(huán)境如下目錄中的命令。
  5 [student@workstation ~]$ cat /home/student/DO280/labs/secure-resources/configure-policy.sh
  6 #!/bin/bash
  7 oc adm policy remove-cluster-role-from-group   8     self-provisioner system:authenticated system:authenticated:oauth

5.5 驗(yàn)證策略

  1 [student@workstation ~]$ oc login -u user1 -p redhat https://master.lab.	#使用普通用戶user1登錄
  2 [student@workstation ~]$ oc new-project test					#測(cè)試創(chuàng)建project
  3 Error from server (Forbidden): You may not request a new project via this API.

5.6 創(chuàng)建項(xiàng)目

  1 [student@workstation ~]$ oc login -u admin -p redhat https://master.lab.	#使用集群管理員登錄
  2 [student@workstation ~]$ oc new-project project-user1				#創(chuàng)建兩個(gè)項(xiàng)目
  3 [student@workstation ~]$ oc new-project project-user2

5.7 將項(xiàng)目與user關(guān)聯(lián)

  1 #選擇項(xiàng)目1
  2 Now using project "project-user1" on server "https://master.lab.:443".
  3 [student@workstation ~]$ oc policy add-role-to-user admin user1		#將user1添加為項(xiàng)目1的管理員
  4 role "admin" added: "user1"
  5 [student@workstation ~]$ oc policy add-role-to-user edit user2		#將user2添加為項(xiàng)目1的開發(fā)員
  6 role "edit" added: "user2"
  7 
  8 [student@workstation ~]$ oc project project-user2			        #選擇項(xiàng)目2
  9 Now using project "project-user2" on server "https://master.lab.:443".
 10 [student@workstation ~]$ oc policy add-role-to-user edit user2		#將user2添加為項(xiàng)目2的開發(fā)員
 11 role "edit" added: "user2"

5.8 驗(yàn)證訪問

  1 [student@workstation ~]$ oc login -u user1 -p redhat https://master.lab.	#使用user1登錄
  2 [student@workstation ~]$ oc project project-user1					#驗(yàn)證項(xiàng)目1的訪問
  3 Already on project "project-user1" on server "https://master.lab.:443".
  4 [student@workstation ~]$ oc project project-user2					#驗(yàn)證項(xiàng)目2的訪問
  5 error: You are not a member of project "project-user2".
  6 You have one project on this server: project-user1
  7 
  8 [student@workstation ~]$ oc login -u user2 -p redhat https://master.lab.	#使用user2登錄
  9 [student@workstation ~]$ oc project project-user1
 10 Already on project "project-user1" on server "https://master.lab.:443".	#驗(yàn)證項(xiàng)目1的訪問
 11 [student@workstation ~]$ oc project project-user2
 12 Now using project "project-user2" on server "https://master.lab.:443".	#驗(yàn)證項(xiàng)目2的訪問

5.9 部署特權(quán)應(yīng)用

  1 [student@workstation ~]$ oc login -u user2 -p redhat https://master.lab.
  2 [student@workstation ~]$ oc project project-user1
  3 Now using project "project-user1" on server "https://master.lab.:443".
  4 [student@workstation ~]$ oc new-app --name=nginx --docker-image=registry.lab./nginx:latest
  5 #使用在項(xiàng)目1上不具備admin權(quán)限的用戶user2登錄,并部署應(yīng)用,會(huì)出現(xiàn)如下提示:
clipboard

5.10 驗(yàn)證部署

  1 [student@workstation ~]$ oc get pods
clipboard
結(jié)論:由上可知,部署失敗是因?yàn)槿萜饔诚裥枰猺oot用戶,pod以CrashLoopBackOff或錯(cuò)誤狀態(tài)結(jié)束。

5.11 故障排除

若要解決此故障需要減少特定項(xiàng)目的安全限制。
要使用特權(quán)訪問運(yùn)行容器,可創(chuàng)建一個(gè)允許pod使用操作系統(tǒng)普通用戶運(yùn)行的service account。
如下部分需要具有項(xiàng)目管理員特權(quán)的用戶執(zhí)行,而另一些操作需要具有集群管理員特權(quán)的用戶執(zhí)行。
本環(huán)境中,相關(guān)操作命令可以從/home/student/DO280/labs/secure-resources文件夾中的configure-sc.sh腳本運(yùn)行或復(fù)制。
  1 [student@workstation ~]$ oc login -u user1 -p redhat https://master.lab.	#使用項(xiàng)目1的admin賬戶登錄 
  2 [student@workstation ~]$ oc create serviceaccount useroot		  #創(chuàng)建服務(wù)賬戶
  3 serviceaccount "useroot" created
  4 [student@workstation ~]$ oc login -u admin -p redhat https://master.lab.	#使用集群管理員登錄
  5 [student@workstation ~]$ oc project project-user1			  #選擇項(xiàng)目1
  6 Already on project "project-user1" on server "https://master.lab.:443".
  7 [student@workstation ~]$ oc adm policy add-scc-to-user anyuid -z useroot  #設(shè)置SCC策略
  8 scc "anyuid" added to: ["system:serviceaccount:project-user1:useroot"]    #將服務(wù)帳戶與anyuid安全上下文關(guān)聯(lián),此操作需要集群管理員用戶。
  9 [student@workstation ~]$ oc login -u user2 -p redhat https://master.lab.	#切換user2用戶
 10 [student@workstation ~]$ oc project project-user1
 11 Already on project "project-user1" on server "https://master.lab.:443".
 12 [student@workstation ~]$ oc patch dc nginx --patch='{"spec":{"template":{"spec":{"serviceAccountName": "useroot"}}}}'
#更新負(fù)責(zé)管理nginx的dc資源,任何開發(fā)人員用戶都可以執(zhí)行此操作。本環(huán)境中,相關(guān)操作命令可以從/home/student/DO280/labs/secure-resources文件夾中的configure-sc.sh腳本運(yùn)行或復(fù)制。

5.12 驗(yàn)證確認(rèn)

  1 [student@workstation ~]$ oc get pods
  2 NAME            READY     STATUS    RESTARTS   AGE
  3 nginx-2-98k8f   1/1       Running   0          3m
  4 

5.13 暴露服務(wù)

  1 [student@workstation ~]$ oc expose svc nginx
  2 route "nginx" exposed
  3 [student@workstation ~]$ oc get svc
  4 NAME      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
  5 nginx     ClusterIP   172.30.118.63   <none>        80/TCP    13m
  6 [student@workstation ~]$ oc get route
  7 NAME      HOST/PORT                                  PATH      SERVICES   PORT      TERMINATION   WILDCARD
  8 nginx     nginx-project-user1.apps.lab.             nginx      80-tcp                  None

5.14 測(cè)試訪問

  1 [student@workstation ~]$ curl -s http://nginx-project-user1.apps.lab.

5.15 策略刪除演示

  1 [student@workstation ~]$ oc login -u admin -p redhat
  2 [student@workstation ~]$ oc adm policy add-cluster-role-to-group self-provisioner system:authenticated system:authenticated:oauth
  3 cluster role "self-provisioner" added: ["system:authenticated" "system:authenticated:oauth"]
  4 [student@workstation ~]$ oc delete project project-user1
  5 project "project-user1" deleted
  6 [student@workstation ~]$ oc delete project project-user2
  7 [root@master ~]# htpasswd -D /etc/origin/master/htpasswd user1 
  8 [root@master ~]# htpasswd -D /etc/origin/master/htpasswd user2
#為所有常規(guī)用戶重新啟用項(xiàng)目創(chuàng)建,即重置為初始狀態(tài)。本環(huán)境中,相關(guān)操作命令可以從/home/student/DO280/labs/secure-resources文件夾中的restore-policy.sh腳本運(yùn)行或復(fù)制。

六 管理加密信息

6.1 secret特性

Secret對(duì)象類型提供了一種機(jī)制來保存敏感信息,如密碼、OCP客戶端配置文件、Docker配置文件和私有倉庫憑據(jù)。Secrets將敏感內(nèi)容與Pod解耦??梢允褂肰olume插件將Secrets掛載到容器上,或者系統(tǒng)可以使用Secrets代表pod執(zhí)行操作。
Secrets的主要特征包括:
  • Secrets data可以獨(dú)立于其定義引用。
  • Secrets data Volume由臨時(shí)文件存儲(chǔ)支持。
  • 可以在名稱空間中共享Secrets data。

6.2 創(chuàng)建Secrets

在依賴于該Secrets的pod之前創(chuàng)建一個(gè)Secrets。
  1 [user@demo ~]$ oc create secret generic secret_name   2 --from-literal=key1=secret1   3 --from-literal=key2=secret2	#用secret data創(chuàng)建secret對(duì)象
  4 [user@demo ~]$ oc secrets add --for=mount serviceaccount/serviceaccount-name   5 secret/secret_name		#更新pod的服務(wù)帳戶,允許引用該secrets。
例如,允許一個(gè)運(yùn)行在指定服務(wù)帳戶下的pod掛載一個(gè)secrets
創(chuàng)建一個(gè)pod,該pod使用環(huán)境變量或數(shù)據(jù)卷作為文件的方式使用該secret,通常使用模板完成。

6.3 使用secret暴露Pod

secrets可以作為數(shù)據(jù)卷掛載,也可以作為環(huán)境變量以便供pod中的容器使用。
例如,要向pod公開一個(gè)secrets,首先創(chuàng)建一個(gè)secrets并將username和password以k/v形式配置,然后將鍵名分配給pod的YAML文件env定義。
示例:創(chuàng)建名為demo-secret的secrets,它定義用戶名和密碼為username/demo-user。
[user@demo ~]$ oc create secret generic demo-secret \
--from-literal=username=demo-user
要使用前面的secret作為MySQL數(shù)據(jù)庫pod的數(shù)據(jù)庫管理員密碼,請(qǐng)定義環(huán)境變量,并引用secret名稱和密碼。
  1 env:
  2   - name: MYSQL_ROOT_PASSWORD
  3     valueFrom:
  4       secretKeyRef:
  5        key: username
  6        name: demo-secret

6.4 web端管理secret

從web控制臺(tái)管理secret:
1. 以授權(quán)用戶身份登錄到web控制臺(tái)。
2. 創(chuàng)建或選擇一個(gè)項(xiàng)目來承載secret。
3. 導(dǎo)航到resource——>secrets。

6.5 Secret使用場(chǎng)景

  • password和user names
敏感信息(如password和user name)可以存儲(chǔ)在一個(gè)secret中,該secret被掛載為容器中的數(shù)據(jù)卷。數(shù)據(jù)顯示為位于容器的數(shù)據(jù)卷目錄中的文件中的內(nèi)容。然后,應(yīng)用程序(如數(shù)據(jù)庫)可以使用這些secret對(duì)用戶進(jìn)行身份驗(yàn)證。
  • 傳輸層安全性(TLS)和密鑰對(duì)
通過讓集群將簽名證書和密鑰對(duì)生成到項(xiàng)目名稱空間中的secret中,可以實(shí)現(xiàn)對(duì)服務(wù)的通信的保護(hù)。證書和密鑰對(duì)使用PEM格式存儲(chǔ)以類似tls.crt和tls.key的格式存儲(chǔ)在secret的pod中。

七 ConfigMap對(duì)象

7.1 ConfigMap概述

ConfigMaps對(duì)象類似于secret,但其設(shè)計(jì)目的是支持處理不包含敏感信息的字符串。ConfigMap對(duì)象持有配置數(shù)據(jù)的鍵值對(duì),這些配置數(shù)據(jù)可以在pods中使用,或者用于存儲(chǔ)系統(tǒng)組件(如控制器)的配置數(shù)據(jù)。
ConfigMap對(duì)象提供了將配置數(shù)據(jù)注入容器的機(jī)制。ConfigMap存儲(chǔ)精細(xì)的粒度信息,比如單個(gè)屬性,或者詳細(xì)信息,比如整個(gè)配置文件或JSON blob。

7.2 CLI創(chuàng)建ConfigMap

可以使用--from-literal選項(xiàng)從CLI創(chuàng)建ConfigMap對(duì)象。
示例:創(chuàng)建一個(gè)ConfigMap對(duì)象,該對(duì)象將IP地址172.20.30.40分配給名為serverAddress的ConfigMap密鑰。
  1 [user@demo ~]$ oc create configmap special-config   2 --from-literal=serverAddress=172.20.30.40
  3 [user@demo ~]$ oc get configmaps special-config -o yaml		#查看configMap
  4 apiVersion: v1
  5 data:
  6   key1: serverAddress=172.20.30.40
  7 kind: ConfigMap
  8 metadata:
  9   creationTimestamp: 2017-07-10T17:13:31Z
 10   name: special-config
 11 ……
 12 在配置映射的pod定義中填充環(huán)境變量APISERVER。
 13 env:
 14   - name: APISERVER
 15       valueFrom:
 16         configMapKeyRef:
 17           name: special-config
 18           key: serverAddress

7.3 web管理ConfigMap

從web控制臺(tái)管理ConfigMap對(duì)象:
1. 以授權(quán)用戶身份登錄到web控制臺(tái)。
2. 創(chuàng)建或選擇一個(gè)項(xiàng)目來承載ConfigMap。
3. 導(dǎo)航到資源→配置映射。

八 加密練習(xí)

8.1 前置準(zhǔn)備

準(zhǔn)備完整的OpenShift集群,參考《003.OpenShift網(wǎng)絡(luò)》2.1。

8.2 本練習(xí)準(zhǔn)備

[student@workstation ~]$ lab secure-secrets setup

8.3 創(chuàng)建項(xiàng)目

  1 [student@workstation ~]$ oc login -u developer -p redhat
  2 [student@workstation ~]$ cd /home/student/DO280/labs/secure-secrets/
  3 [student@workstation secure-secrets]$ less mysql-ephemeral.yml		#導(dǎo)入本環(huán)境MySQL模板
clipboard
clipboard
模板解讀:
該mysql-ephemeral.yml模板文件,包含openshift項(xiàng)目中的mysql臨時(shí)模板,pod所需的其他環(huán)境變量由模板參數(shù)初始化,并具有默認(rèn)值。
但沒有secret定義,后續(xù)操作將手動(dòng)創(chuàng)建模板所需的secret。
根據(jù)模板的要求,創(chuàng)建一個(gè)包含MySQL容器image使用的憑證的secret,將這個(gè)secret命名為mysql。
  • 應(yīng)用程序訪問的數(shù)據(jù)庫用戶名由database-user定義。
  • 數(shù)據(jù)庫用戶的密碼由database-password定義。
  • 數(shù)據(jù)庫管理員密碼由database-root-password定義

8.4 創(chuàng)建新secret

  1 [student@workstation secure-secrets]$ oc create secret generic mysql   2 --from-literal='database-user'='mysql'   3 --from-literal='database-password'='redhat'   4 --from-literal='database-root-password'='do280-admin'
  5 [student@workstation secure-secrets]$ oc get secret mysql -o yaml	#確認(rèn)secret
clipboard

8.5 創(chuàng)建應(yīng)用

  1 [student@workstation secure-secrets]$ oc new-app --file=mysql-ephemeral.yml
  2 [student@workstation secure-secrets]$ oc get pods		#確認(rèn)應(yīng)用
  3 NAME            READY     STATUS    RESTARTS   AGE
  4 mysql-1-j4fnz   1/1       Running   0          1m

8.6 端口轉(zhuǎn)發(fā)

  1 [student@workstation secure-secrets]$ cd
  2 [student@workstation ~]$ oc port-forward mysql-1-j4fnz 3306:3306
提示:驗(yàn)證完成之前forward不要關(guān)閉。

8.7 確認(rèn)驗(yàn)證

  1 [student@workstation ~]$ mysql -uroot -pdo280-admin -h127.0.0.1	#新開終端測(cè)試MySQL
clipboard

九 管理security policy

9.1 OCP authorization授權(quán)

OCP定義了用戶可以執(zhí)行的兩組主要操作:
與項(xiàng)目相關(guān)的操作(也稱為本地策略):project-related
與管理相關(guān)的操作(也稱為集群策略):administration-related
由于這兩種策略都有大量可用的操作,所以將一些操作分組并定義為角色。
默認(rèn)角色
描述
cluster-admin
此角色中的所有用戶都可以管理OpenShift集群。
cluster-status
此角色中的所有用戶都提供對(duì)集群信息的只讀訪問。
為管理本地政策,OCP提供以下角色:
默認(rèn)角色
描述
edit
角色中的用戶可以從項(xiàng)目中創(chuàng)建、更改和刪除公共應(yīng)用程序資源,比如service和dc。
但是不能對(duì)限制范圍和配額等管理資源采取行動(dòng),也不能管理對(duì)項(xiàng)目的訪問權(quán)限。
basic-user
角色中的用戶具有對(duì)項(xiàng)目的讀訪問權(quán)。
self-provisioner
角色中的用戶可以創(chuàng)建新項(xiàng)目。這是一個(gè)集群角色,而不是項(xiàng)目角色。
admin
角色中的用戶可以管理項(xiàng)目中的所有資源,包括授予對(duì)項(xiàng)目的其他用戶的訪問權(quán)
除了能夠創(chuàng)建新應(yīng)用程序之外,admin角色還允許用戶訪問項(xiàng)目資源,比如配額和限制范圍。
edit角色允許用戶在項(xiàng)目中充當(dāng)開發(fā)人員,但要在項(xiàng)目管理員配置的約束下工作。

9.2 相關(guān)命令

  1 向集群用戶添加角色
  2 $ oc adm policy add-cluster-role-to-user cluster-role username
  3 示例:將普通用戶更改為集群管理員。
  4 $ oc adm policy add-cluster-role-to-user cluster-role username
  5 從用戶中刪除集群角色
  6 $ oc adm policy remove-cluster-role-from-user cluster-role username
  7 示例:將集群管理員更改為普通用戶。
  8 $ oc adm policy remove-cluster-role-from-user cluster-admin username
  9 將指定的用戶綁定到項(xiàng)目中的角色
 10 $ oc adm policy add-role-to-user role-name username -n project
 11 示例:在WordPress項(xiàng)目中dev用戶綁定basic-user角色。
 12 $ oc adm policy add-role-to-user basic-user dev -n wordpress

9.3 權(quán)限及規(guī)則

OpenShift將一組規(guī)則集合成一個(gè)角色,規(guī)則由謂詞和資源定義。如create user是OpenShift中的一條規(guī)則,它是一個(gè)名為cluster-admin的角色的所擁有的權(quán)限的一部分。
  1 $ oc adm policy who-can delete user

9.4 user類型

與OCP的交互基于用戶,OCP的user對(duì)象表示可以通過向該用戶或用戶組添加角色來從而實(shí)現(xiàn)相應(yīng)權(quán)限的授予。
Regular users:通常以這種用戶類型與OCP交互,常規(guī)用戶用User對(duì)象表。例如,user1,user2。
System users:通常在安裝OCP中定義基礎(chǔ)設(shè)施時(shí)自動(dòng)創(chuàng)建的,主要目的是使基礎(chǔ)設(shè)施能夠安全地與API交互。包括集群管理員(可以訪問所有內(nèi)容)、每個(gè)節(jié)點(diǎn)的用戶、路由器和內(nèi)部倉庫使用的用戶,以及各種其他用戶。還存在一個(gè)匿名系統(tǒng)用戶,默認(rèn)情況下,該用戶用于未經(jīng)身份驗(yàn)證的請(qǐng)求。system user主要包括:system:admin、system:openshift-registry和system:node:node1.。
Service accounts:這些是與項(xiàng)目關(guān)聯(lián)的特殊系統(tǒng)用戶。有些是在第一次創(chuàng)建項(xiàng)目時(shí)自動(dòng)創(chuàng)建的,項(xiàng)目管理員可以創(chuàng)建多個(gè),以便定義對(duì)每個(gè)項(xiàng)目?jī)?nèi)容的訪問。Service accounts由ServiceAccount對(duì)象表示。Service accounts主要包括:system:serviceaccount:default:deployer和system:serviceaccount:foo:builder。
每個(gè)用戶在訪問OpenShift容器平臺(tái)之前必須進(jìn)行身份驗(yàn)證。沒有身份驗(yàn)證或身份驗(yàn)證無效的API請(qǐng)求將使用匿名系統(tǒng)用戶身份驗(yàn)證來請(qǐng)求服務(wù)。身份驗(yàn)證成功后,策略確定用戶被授權(quán)做什么。

9.5 安全上下文約束(SCCS)

OpenShift提供了一種名為安全上下文約束的安全機(jī)制,它限制對(duì)資源的訪問,但不限制OpenShift中的操作。
SCC限制從OpenShift中運(yùn)行的pod到主機(jī)環(huán)境的訪問:
  • 運(yùn)行特權(quán)容器
  • 請(qǐng)求容器的額外功能
  • 使用主機(jī)目錄作為卷
  • 更改容器的SELinux上下文
  • 更改用戶ID
社區(qū)開發(fā)的一些容器可能需要放松安全上下文約束,因?yàn)樗鼈兛赡苄枰L問默認(rèn)禁止的資源,例如文件系統(tǒng)、套接字或訪問SELinux上下文。
OpenShift定義的安全上下文約束(SCCs)可以使用以下命令作為集群管理員列出。
$ oc get scc
SCC通常有以下7中SCCS:
  • anyuid
  • hostaccess
  • hostmount-anyuid
  • nonroot
  • privileged
  • restricted(默認(rèn))
$ oc describe scc anyuid #查看某一種SCC詳情
OpenShift創(chuàng)建的所有容器都使用restricted類型的SCC,它提供了對(duì)OpenShift外部資源的有限訪問。
對(duì)于anyuid安全上下文,run as user策略被定義為RunAsAny,表示pod可以作為容器中可用的任何用戶ID運(yùn)行。這允許需要特定用戶使用特定用戶ID運(yùn)行命令的容器。
要將容器更改為使用不同的SCC運(yùn)行,需要?jiǎng)?chuàng)建綁定到pod的服務(wù)帳戶。
$ oc create serviceaccount service-account-name #首先創(chuàng)建服務(wù)賬戶
$ oc adm policy add-scc-to-user SCC -z service-account #將服務(wù)帳戶與SCC關(guān)聯(lián)
要確定哪個(gè)帳戶可以創(chuàng)建需要更高安全性要求的pod,可以使用scc-subject-review子命令。
$ oc export pod pod-name > output.yaml
$ oc adm policy scc-subject-review -f output.yaml

9.6 OpenShift與SELinux

OpenShift要求在每個(gè)主機(jī)上啟用SELinux,以便使用強(qiáng)制訪問控制提供對(duì)資源的安全訪問。同樣,由OpenShift管理的Docker容器需要管理SELinux上下文,以避免兼容性問題。
為了最小化在不支持SELinux的情況下運(yùn)行容器的風(fēng)險(xiǎn),可以創(chuàng)建SELinux上下文策略。
為了更新SELinux上下文,可以使用現(xiàn)有的SCC作為起點(diǎn)生成一個(gè)新的SCC。
$ oc export scc restricted > custom_selinux.yml #導(dǎo)出默認(rèn)的SCC
編輯導(dǎo)出的YAML文件以更改SCC名稱和SELinux上下文。
$ oc create -f yaml_file #使用修改后的ymal重新創(chuàng)建一個(gè)SCC

9.7 特權(quán)容器

有些容器可能需要訪問主機(jī)的運(yùn)行時(shí)環(huán)境。S2I構(gòu)建器容器需要訪問宿主docker守護(hù)進(jìn)程來構(gòu)建和運(yùn)行容器。
例如,S2I構(gòu)建器容器是一類特權(quán)容器,它要求訪問超出其自身容器的限制。這些容器可能會(huì)帶來安全風(fēng)險(xiǎn),因?yàn)樗鼈兛梢允褂肙penShift節(jié)點(diǎn)上的任何資源。通過創(chuàng)建具有特權(quán)訪問權(quán)的服務(wù)帳戶,可以使用SCCs啟用特權(quán)容器的訪問。

十 資源訪問控制綜合實(shí)驗(yàn)

10.1 前置準(zhǔn)備

準(zhǔn)備完整的OpenShift集群,參考《003.OpenShift網(wǎng)絡(luò)》2.1。

10.2 本練習(xí)準(zhǔn)備

  1 [student@workstation ~]$ lab secure-review setup

10.3 創(chuàng)建用戶

  1 [root@master ~]# htpasswd /etc/origin/master/htpasswd user-review
  2 New password: 【redhat】
  3 Re-type new password: 【redhat】

10.4 修改策略

  1 [student@workstation ~]$ oc login -u admin -p redhat
  2 [student@workstation ~]$ oc adm policy remove-cluster-role-from-group   3 self-provisioner system:authenticated system:authenticated:oauth
  4 禁用所有常規(guī)用戶的項(xiàng)目創(chuàng)建功能

10.5 確認(rèn)驗(yàn)證

  1 [student@workstation ~]$ oc login -u user-review -p redhat
  2 [student@workstation ~]$ oc new-project test			#普通用戶無法創(chuàng)建項(xiàng)目
  3 Error from server (Forbidden): You may not request a new project via this API.

10.6 創(chuàng)建項(xiàng)目

  1 [student@workstation ~]$ oc login -u admin -p redhat
  2 [student@workstation ~]$ oc new-project secure-review		#使用管理員創(chuàng)建項(xiàng)目

10.7 授權(quán)用戶

  1 [student@workstation ~]$ oc project secure-review
  2 Already on project "secure-review" on server "https://master.lab.:443".
  3 [student@workstation ~]$ oc policy add-role-to-user edit user-review	#將edit的role和user-review進(jìn)行關(guān)聯(lián)

10.8 測(cè)試訪問

  1 [student@workstation ~]$ oc login -u user-review -p redhat
  2 [student@workstation ~]$ oc project secure-review		#測(cè)試訪問
  3 Already on project "secure-review" on server "https://master.lab.:443".

10.9 檢查模板

  1 [student@workstation ~]$ cd /home/student/DO280/labs/secure-review/
  2 [student@workstation secure-review]$ less mysql-ephemeral.yml
clipboard
模板解讀:
該mysql-ephemeral.yml模板文件,包含openshift項(xiàng)目中的mysql臨時(shí)模板,pod所需的其他環(huán)境變量由模板參數(shù)初始化,并具有默認(rèn)值。
但沒有secret定義,后續(xù)操作將手動(dòng)創(chuàng)建模板所需的secret。
根據(jù)模板的要求,創(chuàng)建一個(gè)包含MySQL容器image使用的憑證的secret,將這個(gè)secret命名為mysql。
  • 應(yīng)用程序訪問的數(shù)據(jù)庫用戶名由database-user定義。
  • 數(shù)據(jù)庫用戶的密碼由database-password定義。
  • 數(shù)據(jù)庫管理員密碼由database-root-password定義
使用user-review developer用戶創(chuàng)建一個(gè)名為mysql的secret。這個(gè)secret應(yīng)該存儲(chǔ)用戶名mysql、密碼redhat和數(shù)據(jù)庫管理員密碼do280-admin。
數(shù)據(jù)庫用戶名由database-user定義。此用戶的密碼由mysql secret密鑰定義。
數(shù)據(jù)庫管理員密碼由database-root-password定義。

10.10 創(chuàng)建secret

  1 [student@workstation secure-review]$ oc create secret generic mysql   2 --from-literal='database-user'='mysql'   3 --from-literal='database-password'='redhat'   4 --from-literal='database-root-password'='do280-admin'
  5 [student@workstation secure-review]$ oc get secret mysql -o yaml	#確認(rèn)驗(yàn)證secret

10.11 部署應(yīng)用

  1 [student@workstation secure-review]$ oc new-app --file=mysql-ephemeral.yml
  2 [student@workstation secure-review]$ oc get pods
  3 NAME            READY     STATUS    RESTARTS   AGE
  4 mysql-1-2lr7t   1/1       Running   0          31s

10.12 轉(zhuǎn)發(fā)端口

  1 [student@workstation ~]$ oc port-forward mysql-1-2lr7t 3306:3306

10.13 測(cè)試訪問

  1 [student@workstation ~]$ mysql -umysql -predhat -h127.0.0.1

10.14 部署phpmyadmin應(yīng)用

使用內(nèi)部倉庫registry.lab.的image部署phpmyadmin:4.7容器。phpmyadmin:4.7容器需要名為PMA_HOST的環(huán)境變量來提供MySQL服務(wù)器的IP地址。
使用模板創(chuàng)建一個(gè)基于FQND的MySQL pod的service。
為使用模板創(chuàng)建的MySQL服務(wù)器pod使用服務(wù)FQDN,該模板是mysql.secure-review.svc.cluster.local。
  1 [student@workstation ~]$ oc new-app --name=phpmyadmin   2 --docker-image=registry.lab./phpmyadmin/phpmyadmin:4.7   3 -e PMA_HOST=mysql.secure-review.svc.cluster.local
clipboard
結(jié)論:該命令會(huì)發(fā)出警告,提示需要root特權(quán)。默認(rèn)情況下,OpenShift不支持使用操作系統(tǒng)的root用戶運(yùn)行容器。

10.15 查看pod

  1 [student@workstation ~]$ oc get pods
  2 NAME                 READY     STATUS    RESTARTS   AGE
  3 mysql-1-2lr7t        1/1       Running   0          8m
  4 phpmyadmin-1-v7tl7   0/1       Error     2          1m
  5 因?yàn)闆]有root權(quán)限,因此部署失敗,需要提權(quán)。

10.16 授予權(quán)限

  1 [student@workstation ~]$ oc login -u admin -p redhat			#使用管理員登錄
  2 [student@workstation ~]$ oc create serviceaccount phpmyadmin-account	#首先創(chuàng)建服務(wù)賬戶
  3 [student@workstation ~]$ oc adm policy add-scc-to-user anyuid -z phpmyadmin-account
  4 scc "anyuid" added to: ["system:serviceaccount:secure-review:phpmyadmin-account"]	#將服務(wù)帳戶與anyuid安全上下文關(guān)聯(lián)

10.17 更新應(yīng)用

  1 [student@workstation ~]$ oc patch dc phpmyadmin --patch='{"spec":{"template":{"spec":{"serviceAccountName": "phpmyadmin-account"}}}}'
#更新負(fù)責(zé)管理phpmyadmin的dc資源,任何開發(fā)人員用戶都可以執(zhí)行此操作。
本環(huán)境中,相關(guān)操作命令可以從/home/student/DO280/labs/secure-review文件夾中的patch-dc.sh腳本運(yùn)行或復(fù)制。

10.18 確認(rèn)驗(yàn)證

  1 [student@workstation ~]$ oc login -u user-review -p redhat
  2 [student@workstation ~]$ oc get pods			#確認(rèn)pod是否正常
  3 NAME                 READY     STATUS    RESTARTS   AGE
  4 mysql-1-2lr7t        1/1       Running   0          13m
  5 phpmyadmin-2-bdjvq   1/1       Running   0          1m

10.19 暴露服務(wù)

  1 [student@workstation ~]$ oc expose svc phpmyadmin --hostname=phpmyadmin.apps.lab.

10.20 訪問測(cè)試

  1 [student@workstation ~]$ curl -s http://phpmyadmin.apps.lab.

10.21 確認(rèn)及刪除

  1 [student@workstation ~]$ lab secure-review grade		#環(huán)境腳本判斷
  2 [student@workstation ~]$ oc login -u admin -p redhat
  3 [student@workstation ~]$ oc adm policy add-cluster-role-to-group   4 self-provisioner system:authenticated system:authenticated:oauth
  5 [student@workstation ~]$ oc delete project secure-review
  6 [student@workstation ~]$ ssh root@master htpasswd -D   7 /etc/origin/master/htpasswd user-review			#刪除用戶
  8 [student@workstation ~]$ oc delete user user-review		#刪除項(xiàng)目

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約