一 Kubetcl namespace
1.1 namespace描述
Kubernetes namespace提供了將一組相關資源組合在一起的機制,在Red Hat OpenShift容器平臺中,project是一個帶有附加注釋的Kubernetes namespace, namespace提供以下特性:- 命名資源,以避免基本的命名沖突;
- 將管理權限授予受信任的用戶;
- 限制用戶資源消耗的能力;
- 用戶和用戶組隔離,
1.2 project
project提供了一種機制,通過這種機制可以管理普通用戶對資源的訪問,project允許一組用戶獨立于其他組組織和管理其內容,必須允許用戶訪問專案,如果允許創建專案,用戶將自動訪問自己的專案, 專案可以有單獨的name、display name和description, name是專案的唯一識別符號,在使用CLI工具或API時都是基于name,name的最大長度為63個字符, display name是專案在web控制臺中顯示的方式(默認為name), description是專案的更詳細描述,并且在web控制臺中也可見, 以下組件適用于專案:- Object:pod、service、rc等;
- Policies:決定用戶可以或不能對物件執行哪些操作的規則;
- Constraints:可以限制的每種物件的配額,
1.3 cluster管理
集群管理員可以創建專案并將專案的管理權限委托給任何用戶,在OpenShift容器平臺中,專案用于對相關物件進行分組和隔離, 管理員可以讓用戶訪問某些專案,允許他們創建自己的專案,并在單個專案中賦予他們管理權限, 管理員可以將角色應用于允許或限制其創建專案能力的用戶和組,同時可以在用戶初始登錄之前分配角色, 限制專案創建:從通過身份驗證的用戶和組中洗掉self-provisioning集群角色,將拒絕任何新專案的權限, [root@master ~]$ oc adm policy remove-cluster-role-from-group \ self-provisioner \ system:authenticated \ system:authenticated:oauth 授予專案創建:專案創建授予具有self-供應者角色和self-provisione集群角色系結的用戶,默認情況下,所有經過身份驗證的用戶都可以使用這些角色, [root@master ~]$ oc adm policy add-cluster-role-to-group \ self-provisioner \ system:authenticated \ system:authenticated:oauth1.4 創建project
如果專案創建權限被授予用戶,則可以使用oc命令創建project, [root@master ~]$ oc new-project demoproject \ --description="Demonstrate project creation" \ --display-name="demo_project"二 OpenShift角色
2.1 角色概述
role具有不同級別的訪問和策略,包括集群和本地策略,user和group可以同時與多個role關聯,運行oc description命令查看角色及其系結的詳細資訊, 在集群策略中具有cluster-admin預設角色的用戶可以查看集群策略和所有本地策略,在給定的本地策略中具有admin預設角色的用戶可以基于per-project查看策略, 可通過以下命令查看當前的集群系結集,其中顯示系結到不同角色的用戶和組, [root@demo ~]# oc describe clusterPolicyBindings :default2.2 查看本地policy
盡管本地角色串列及其關聯的規則集在本地策略中是不可查看的,但是所有預設角色仍然適用,并且可以添加到用戶或組中,cluster-admin預設角色除外,但是,本地系結是可見的, 可通過以下命令查看當前的本地系結,其中顯示系結到不同角色的用戶和組, [root@demo ~]# oc describe policyBindings :default 提示:默認情況下,在本地策略中,只會列出admin角色的系結,但是,如果將其他默認角色添加到本地策略中的用戶和組,也會列出它們,2.3 管理role系結
向用戶或組添加或系結角色,從而實作向用戶或組提供角色授予的相關訪問權限,可以使用oc adm policy命令在用戶和組之間添加和洗掉角色, 當使用以下操作管理本地策略的用戶和組角色時,可以使用-n選項指定專案,如果沒有指定,則使用當前專案, 常見管理本地策略操作:三 安全背景關系約束(SCCS)
3.1 SCCS概述
OpenShift提供安全背景關系約束(SCCS),它控制pod可以執行的操作和它可以訪問的資源,默認情況下,任何容器的執行都只授予受限制的SCC定義的功能, SCCS相關命令:1 [user@demo ~]$ oc get scc #列出可用的SCC 2 [user@demo ~]$ oc describe scc scc_name #現實特定SCC詳細資訊 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中洗掉用戶或組
四 服務賬戶
4.1 服務賬戶
service account提供了一種靈活的方法來控制API訪問,而無需共享常規用戶的憑據,如果應用程式需要訪問受限制的SCC未授予的功能,可創建一個新的、特定的service account并將其添加到適當的SCC中, 例如,在預設情況下,OpenShift不支持部署需要提升特權的應用程式,若有此需求,可創建一個service account,修改dc,然后添加service account至SCC, 示例:將anyuid配置為在容器中作為root用戶運行, [user@demo ~]$ oc create serviceaccount useroot #創建一個名為useroot的新服務帳戶 [user@demo ~]$ oc patch dc/demo-app \ --patch '{"spec":{"template":{"spec":{"serviceAccountName": "useroot"}}}}' #修改應用程式的DC [user@demo ~]$ oc adm policy add-scc-to-user anyuid -z useroot #將useroot服務帳戶添加到anyuid SCC中,作為容器中的根用戶運行4.2 Web管理user成員
OCP平臺的默認配置是,在用戶首次登錄成功時,自動創建該用戶物件, 要管理允許訪問專案的用戶,請以專案管理員或集群管理員的身份登錄到web控制臺,并選擇要管理的專案,在左側窗格中,單擊Resources——>membership進入專案member頁面, 在Users列中,在突出顯示的文本框中輸入用戶名,在“添加另一個角色”列中,從用戶所在行的串列中選擇一個角色,然后單擊“添加”,4.3 Cli管理user成員
CLI中如果自動創建物件功能被關閉,集群管理員可通過如下方式創建新用戶: [root@master ~]$ oc create user demo-user 同時還需要在身份認證軟體中創建用戶,如為HTPasswdIdentityProvider才用戶命令如下: [root@master ~]$ htpasswd /etc/origin/openshift-passwd demo-user 要向用戶添加專案角色,首先使用oc project命令輸入專案,然后使用oc policy add-role-to-user命令: [root@master ~]$ oc policy add-role-to-user edit demo-user 要從用戶中洗掉專案角色,使用oc policy remove-role-from-user命令: [root@master ~]$ oc policy remove-role-from-user edit demo-user 并不是所有OpenShift角色都由專案限定范圍,要分配這些規則,請使用oc adm policy command命令, [root@master ~]$ oc adm policy add-cluster-role-to-user cluster-admin admin4.4 身份驗證和授權
身份驗證層標識與對OpenShift容器平臺API的請求相關聯的用戶,然后授權層使用關于請求用戶的身份資訊來確定是否應該允許該請求,- user和group
- Authentication Tokens
4.5 身份驗證型別
本環境中,身份驗證由HTPasswdIdentityProvider模塊提供,該模塊根據使用htpasswd命令生成的檔案驗證用戶名和密碼, OpenShift容器平臺支持的其他認證型別包括:- Basic Authentication (Remote)
- Request Header Authentication
- Keystone Authentication
- LDAP Authentication
- GitHub Authentication
五 管理專案及賬戶
5.1 前置準備
準備完整的OpenShift集群,參考《003.OpenShift網路》2.1,5.2 本練習準備
[student@workstation ~]$ lab secure-resources setup5.3 創建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 設定策略
1 [student@workstation ~]$ oc login -u admin -p redhat https://master.lab.example.com #使用管理員登錄 2 [student@workstation ~]$ oc adm policy remove-cluster-role-from-group \ 3 self-provisioner system:authenticated:oauth 4 #洗掉所有賦予普通創建專案的功能,該命令可參考本環境如下目錄中的命令, 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 驗證策略
1 [student@workstation ~]$ oc login -u user1 -p redhat https://master.lab.example.com #使用普通用戶user1登錄 2 [student@workstation ~]$ oc new-project test #測驗創建project 3 Error from server (Forbidden): You may not request a new project via this API.
5.6 創建專案
1 [student@workstation ~]$ oc login -u admin -p redhat https://master.lab.example.com #使用集群管理員登錄 2 [student@workstation ~]$ oc new-project project-user1 #創建兩個專案 3 [student@workstation ~]$ oc new-project project-user2
5.7 將專案與user關聯
1 #選擇專案1 2 Now using project "project-user1" on server "https://master.lab.example.com:443". 3 [student@workstation ~]$ oc policy add-role-to-user admin user1 #將user1添加為專案1的管理員 4 role "admin" added: "user1" 5 [student@workstation ~]$ oc policy add-role-to-user edit user2 #將user2添加為專案1的開發員 6 role "edit" added: "user2" 7 8 [student@workstation ~]$ oc project project-user2 #選擇專案2 9 Now using project "project-user2" on server "https://master.lab.example.com:443". 10 [student@workstation ~]$ oc policy add-role-to-user edit user2 #將user2添加為專案2的開發員 11 role "edit" added: "user2"
5.8 驗證訪問
1 [student@workstation ~]$ oc login -u user1 -p redhat https://master.lab.example.com #使用user1登錄 2 [student@workstation ~]$ oc project project-user1 #驗證專案1的訪問 3 Already on project "project-user1" on server "https://master.lab.example.com:443". 4 [student@workstation ~]$ oc project project-user2 #驗證專案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.example.com #使用user2登錄 9 [student@workstation ~]$ oc project project-user1 10 Already on project "project-user1" on server "https://master.lab.example.com:443". #驗證專案1的訪問 11 [student@workstation ~]$ oc project project-user2 12 Now using project "project-user2" on server "https://master.lab.example.com:443". #驗證專案2的訪問
5.9 部署特權應用
1 [student@workstation ~]$ oc login -u user2 -p redhat https://master.lab.example.com 2 [student@workstation ~]$ oc project project-user1 3 Now using project "project-user1" on server "https://master.lab.example.com:443". 4 [student@workstation ~]$ oc new-app --name=nginx --docker-image=registry.lab.example.com/nginx:latest 5 #使用在專案1上不具備admin權限的用戶user2登錄,并部署應用,會出現如下提示:
5.10 驗證部署
1 [student@workstation ~]$ oc get pods
5.11 故障排除
若要解決此故障需要減少特定專案的安全限制, 要使用特權訪問運行容器,可創建一個允許pod使用作業系統普通用戶運行的service account, 如下部分需要具有專案管理員特權的用戶執行,而另一些操作需要具有集群管理員特權的用戶執行, 本環境中,相關操作命令可以從/home/student/DO280/labs/secure-resources檔案夾中的configure-sc.sh腳本運行或復制,1 [student@workstation ~]$ oc login -u user1 -p redhat https://master.lab.example.com #使用專案1的admin賬戶登錄 2 [student@workstation ~]$ oc create serviceaccount useroot #創建服務賬戶 3 serviceaccount "useroot" created 4 [student@workstation ~]$ oc login -u admin -p redhat https://master.lab.example.com #使用集群管理員登錄 5 [student@workstation ~]$ oc project project-user1 #選擇專案1 6 Already on project "project-user1" on server "https://master.lab.example.com:443". 7 [student@workstation ~]$ oc adm policy add-scc-to-user anyuid -z useroot #設定SCC策略 8 scc "anyuid" added to: ["system:serviceaccount:project-user1:useroot"] #將服務帳戶與anyuid安全背景關系關聯,此操作需要集群管理員用戶, 9 [student@workstation ~]$ oc login -u user2 -p redhat https://master.lab.example.com #切換user2用戶 10 [student@workstation ~]$ oc project project-user1 11 Already on project "project-user1" on server "https://master.lab.example.com:443". 12 [student@workstation ~]$ oc patch dc nginx --patch='{"spec":{"template":{"spec":{"serviceAccountName": "useroot"}}}}'#更新負責管理nginx的dc資源,任何開發人員用戶都可以執行此操作,本環境中,相關操作命令可以從/home/student/DO280/labs/secure-resources檔案夾中的configure-sc.sh腳本運行或復制,
5.12 驗證確認
1 [student@workstation ~]$ oc get pods 2 NAME READY STATUS RESTARTS AGE 3 nginx-2-98k8f 1/1 Running 0 3m 4
5.13 暴露服務
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.example.com nginx 80-tcp None
5.14 測驗訪問
1 [student@workstation ~]$ curl -s http://nginx-project-user1.apps.lab.example.com
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#為所有常規用戶重新啟用專案創建,即重置為初始狀態,本環境中,相關操作命令可以從/home/student/DO280/labs/secure-resources檔案夾中的restore-policy.sh腳本運行或復制,
六 管理加密資訊
6.1 secret特性
Secret物件型別提供了一種機制來保存敏感資訊,如密碼、OCP客戶端組態檔、Docker組態檔和私有倉庫憑據,Secrets將敏感內容與Pod解耦,可以使用Volume插件將Secrets掛載到容器上,或者系統可以使用Secrets代表pod執行操作, Secrets的主要特征包括:- Secrets data可以獨立于其定義參考,
- Secrets data Volume由臨時檔案存盤支持,
- 可以在名稱空間中共享Secrets data,
6.2 創建Secrets
在依賴于該Secrets的pod之前創建一個Secrets,1 [user@demo ~]$ oc create secret generic secret_name \ 2 --from-literal=key1=secret1 \ 3 --from-literal=key2=secret2 #用secret data創建secret物件 4 [user@demo ~]$ oc secrets add --for=mount serviceaccount/serviceaccount-name \ 5 secret/secret_name #更新pod的服務帳戶,允許參考該secrets,例如,允許一個運行在指定服務帳戶下的pod掛載一個secrets 創建一個pod,該pod使用環境變數或資料卷作為檔案的方式使用該secret,通常使用模板完成,
6.3 使用secret暴露Pod
secrets可以作為資料卷掛載,也可以作為環境變數以便供pod中的容器使用, 例如,要向pod公開一個secrets,首先創建一個secrets并將username和password以k/v形式配置,然后將鍵名分配給pod的YAML檔案env定義, 示例:創建名為demo-secret的secrets,它定義用戶名和密碼為username/demo-user, [user@demo ~]$ oc create secret generic demo-secret \ --from-literal=username=demo-user 要使用前面的secret作為MySQL資料庫pod的資料庫管理員密碼,請定義環境變數,并參考secret名稱和密碼,1 env: 2 - name: MYSQL_ROOT_PASSWORD 3 valueFrom: 4 secretKeyRef: 5 key: username 6 name: demo-secret
6.4 web端管理secret
從web控制臺管理secret: 1. 以授權用戶身份登錄到web控制臺, 2. 創建或選擇一個專案來承載secret, 3. 導航到resource——>secrets,6.5 Secret使用場景
- password和user names
- 傳輸層安全性(TLS)和密鑰對
七 ConfigMap物件
7.1 ConfigMap概述
ConfigMaps物件類似于secret,但其設計目的是支持處理不包含敏感資訊的字串,ConfigMap物件持有配置資料的鍵值對,這些配置資料可以在pods中使用,或者用于存盤系統組件(如控制器)的配置資料, ConfigMap物件提供了將配置資料注入容器的機制,ConfigMap存盤精細的粒度資訊,比如單個屬性,或者詳細資訊,比如整個組態檔或JSON blob,7.2 CLI創建ConfigMap
可以使用--from-literal選項從CLI創建ConfigMap物件, 示例:創建一個ConfigMap物件,該物件將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定義中填充環境變數APISERVER, 13 env: 14 - name: APISERVER 15 valueFrom: 16 configMapKeyRef: 17 name: special-config 18 key: serverAddress
7.3 web管理ConfigMap
從web控制臺管理ConfigMap物件: 1. 以授權用戶身份登錄到web控制臺, 2. 創建或選擇一個專案來承載ConfigMap, 3. 導航到資源→配置映射,八 加密練習
8.1 前置準備
準備完整的OpenShift集群,參考《003.OpenShift網路》2.1,8.2 本練習準備
[student@workstation ~]$ lab secure-secrets setup8.3 創建專案
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 #匯入本環境MySQL模板
模板解讀:
該mysql-ephemeral.yml模板檔案,包含openshift專案中的mysql臨時模板,pod所需的其他環境變數由模板引數初始化,并具有默認值,
但沒有secret定義,后續操作將手動創建模板所需的secret,
根據模板的要求,創建一個包含MySQL容器image使用的憑證的secret,將這個secret命名為mysql,
- 應用程式訪問的資料庫用戶名由database-user定義,
- 資料庫用戶的密碼由database-password定義,
- 資料庫管理員密碼由database-root-password定義
8.4 創建新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 #確認secret
8.5 創建應用
1 [student@workstation secure-secrets]$ oc new-app --file=mysql-ephemeral.yml 2 [student@workstation secure-secrets]$ oc get pods #確認應用 3 NAME READY STATUS RESTARTS AGE 4 mysql-1-j4fnz 1/1 Running 0 1m
8.6 埠轉發
1 [student@workstation secure-secrets]$ cd 2 [student@workstation ~]$ oc port-forward mysql-1-j4fnz 3306:3306提示:驗證完成之前forward不要關閉,
8.7 確認驗證
1 [student@workstation ~]$ mysql -uroot -pdo280-admin -h127.0.0.1 #新開終端測驗MySQL
九 管理security policy
9.1 OCP authorization授權
OCP定義了用戶可以執行的兩組主要操作: 與專案相關的操作(也稱為本地策略):project-related 與管理相關的操作(也稱為集群策略):administration-related 由于這兩種策略都有大量可用的操作,所以將一些操作分組并定義為角色,9.2 相關命令
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 將指定的用戶系結到專案中的角色 10 $ oc adm policy add-role-to-user role-name username -n project 11 示例:在WordPress專案中dev用戶系結basic-user角色, 12 $ oc adm policy add-role-to-user basic-user dev -n wordpress
9.3 權限及規則
OpenShift將一組規則集合成一個角色,規則由謂詞和資源定義,如create user是OpenShift中的一條規則,它是一個名為cluster-admin的角色的所擁有的權限的一部分,1 $ oc adm policy who-can delete user
9.4 user型別
與OCP的互動基于用戶,OCP的user物件表示可以通過向該用戶或用戶組添加角色來從而實作相應權限的授予, Regular users:通常以這種用戶型別與OCP互動,常規用戶用User物件表,例如,user1,user2, System users:通常在安裝OCP中定義基礎設施時自動創建的,主要目的是使基礎設施能夠安全地與API互動,包括集群管理員(可以訪問所有內容)、每個節點的用戶、路由器和內部倉庫使用的用戶,以及各種其他用戶,還存在一個匿名系統用戶,默認情況下,該用戶用于未經身份驗證的請求,system user主要包括:system:admin、system:openshift-registry和system:node:node1.example.com, Service accounts:這些是與專案關聯的特殊系統用戶,有些是在第一次創建專案時自動創建的,專案管理員可以創建多個,以便定義對每個專案內容的訪問,Service accounts由ServiceAccount物件表示,Service accounts主要包括:system:serviceaccount:default:deployer和system:serviceaccount:foo:builder, 每個用戶在訪問OpenShift容器平臺之前必須進行身份驗證,沒有身份驗證或身份驗證無效的API請求將使用匿名系統用戶身份驗證來請求服務,身份驗證成功后,策略確定用戶被授權做什么,9.5 安全背景關系約束(SCCS)
OpenShift提供了一種名為安全背景關系約束的安全機制,它限制對資源的訪問,但不限制OpenShift中的操作, SCC限制從OpenShift中運行的pod到主機環境的訪問:- 運行特權容器
- 請求容器的額外功能
- 使用主機目錄作為卷
- 更改容器的SELinux背景關系
- 更改用戶ID
- anyuid
- hostaccess
- hostmount-anyuid
- nonroot
- privileged
- restricted(默認)
9.6 OpenShift與SELinux
OpenShift要求在每個主機上啟用SELinux,以便使用強制訪問控制提供對資源的安全訪問,同樣,由OpenShift管理的Docker容器需要管理SELinux背景關系,以避免兼容性問題, 為了最小化在不支持SELinux的情況下運行容器的風險,可以創建SELinux背景關系策略, 為了更新SELinux背景關系,可以使用現有的SCC作為起點生成一個新的SCC, $ oc export scc restricted > custom_selinux.yml #匯出默認的SCC 編輯匯出的YAML檔案以更改SCC名稱和SELinux背景關系, $ oc create -f yaml_file #使用修改后的ymal重新創建一個SCC9.7 特權容器
有些容器可能需要訪問主機的運行時環境,S2I構建器容器需要訪問宿主docker守護行程來構建和運行容器, 例如,S2I構建器容器是一類特權容器,它要求訪問超出其自身容器的限制,這些容器可能會帶來安全風險,因為它們可以使用OpenShift節點上的任何資源,通過創建具有特權訪問權的服務帳戶,可以使用SCCs啟用特權容器的訪問,十 資源訪問控制綜合實驗
10.1 前置準備
準備完整的OpenShift集群,參考《003.OpenShift網路》2.1,10.2 本練習準備
1 [student@workstation ~]$ lab secure-review setup
10.3 創建用戶
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 禁用所有常規用戶的專案創建功能
10.5 確認驗證
1 [student@workstation ~]$ oc login -u user-review -p redhat 2 [student@workstation ~]$ oc new-project test #普通用戶無法創建專案 3 Error from server (Forbidden): You may not request a new project via this API.
10.6 創建專案
1 [student@workstation ~]$ oc login -u admin -p redhat 2 [student@workstation ~]$ oc new-project secure-review #使用管理員創建專案
10.7 授權用戶
1 [student@workstation ~]$ oc project secure-review 2 Already on project "secure-review" on server "https://master.lab.example.com:443". 3 [student@workstation ~]$ oc policy add-role-to-user edit user-review #將edit的role和user-review進行關聯
10.8 測驗訪問
1 [student@workstation ~]$ oc login -u user-review -p redhat 2 [student@workstation ~]$ oc project secure-review #測驗訪問 3 Already on project "secure-review" on server "https://master.lab.example.com:443".
10.9 檢查模板
1 [student@workstation ~]$ cd /home/student/DO280/labs/secure-review/ 2 [student@workstation secure-review]$ less mysql-ephemeral.yml
模板解讀:
該mysql-ephemeral.yml模板檔案,包含openshift專案中的mysql臨時模板,pod所需的其他環境變數由模板引數初始化,并具有默認值,
但沒有secret定義,后續操作將手動創建模板所需的secret,
根據模板的要求,創建一個包含MySQL容器image使用的憑證的secret,將這個secret命名為mysql,
- 應用程式訪問的資料庫用戶名由database-user定義,
- 資料庫用戶的密碼由database-password定義,
- 資料庫管理員密碼由database-root-password定義
10.10 創建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 #確認驗證secret
10.11 部署應用
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 轉發埠
1 [student@workstation ~]$ oc port-forward mysql-1-2lr7t 3306:3306
10.13 測驗訪問
1 [student@workstation ~]$ mysql -umysql -predhat -h127.0.0.1
10.14 部署phpmyadmin應用
使用內部倉庫registry.lab.example.com的image部署phpmyadmin:4.7容器,phpmyadmin:4.7容器需要名為PMA_HOST的環境變數來提供MySQL服務器的IP地址, 使用模板創建一個基于FQND的MySQL pod的service, 為使用模板創建的MySQL服務器pod使用服務FQDN,該模板是mysql.secure-review.svc.cluster.local,1 [student@workstation ~]$ oc new-app --name=phpmyadmin \ 2 --docker-image=registry.lab.example.com/phpmyadmin/phpmyadmin:4.7 \ 3 -e PMA_HOST=mysql.secure-review.svc.cluster.local
結論:該命令會發出警告,提示需要root特權,默認情況下,OpenShift不支持使用作業系統的root用戶運行容器,
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 因為沒有root權限,因此部署失敗,需要提權,
10.16 授予權限
1 [student@workstation ~]$ oc login -u admin -p redhat #使用管理員登錄 2 [student@workstation ~]$ oc create serviceaccount phpmyadmin-account #首先創建服務賬戶 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"] #將服務帳戶與anyuid安全背景關系關聯
10.17 更新應用
1 [student@workstation ~]$ oc patch dc phpmyadmin --patch='{"spec":{"template":{"spec":{"serviceAccountName": "phpmyadmin-account"}}}}'#更新負責管理phpmyadmin的dc資源,任何開發人員用戶都可以執行此操作, 本環境中,相關操作命令可以從/home/student/DO280/labs/secure-review檔案夾中的patch-dc.sh腳本運行或復制,
10.18 確認驗證
1 [student@workstation ~]$ oc login -u user-review -p redhat 2 [student@workstation ~]$ oc get pods #確認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 暴露服務
1 [student@workstation ~]$ oc expose svc phpmyadmin --hostname=phpmyadmin.apps.lab.example.com
10.20 訪問測驗
1 [student@workstation ~]$ curl -s http://phpmyadmin.apps.lab.example.com
10.21 確認及洗掉
1 [student@workstation ~]$ lab secure-review grade #環境腳本判斷 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 #洗掉專案
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/51053.html
標籤:Linux
