乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      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)限??梢允褂胦c 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頁(yè)面。
      在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ù)庫(kù)中,從而支持共享身份驗(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配置文件和私有倉(cāng)庫(kù)憑據(jù)。Secrets將敏感內(nèi)容與Pod解耦。可以使用Volume插件將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ù)庫(kù)pod的數(shù)據(jù)庫(kù)管理員密碼,請(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ù)庫(kù))可以使用這些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ù)庫(kù)用戶名由database-user定義。
      • 數(shù)據(jù)庫(kù)用戶的密碼由database-password定義。
      • 數(shù)據(jù)庫(kù)管理員密碼由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)部倉(cāng)庫(kù)使用的用戶,以及各種其他用戶。還存在一個(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ù)庫(kù)用戶名由database-user定義。
      • 數(shù)據(jù)庫(kù)用戶的密碼由database-password定義。
      • 數(shù)據(jù)庫(kù)管理員密碼由database-root-password定義
      使用user-review developer用戶創(chuàng)建一個(gè)名為mysql的secret。這個(gè)secret應(yīng)該存儲(chǔ)用戶名mysql、密碼redhat和數(shù)據(jù)庫(kù)管理員密碼do280-admin。
      數(shù)據(jù)庫(kù)用戶名由database-user定義。此用戶的密碼由mysql secret密鑰定義。
      數(shù)據(jù)庫(kù)管理員密碼由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)部倉(cāng)庫(kù)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)購(gòu)買等信息,謹(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)論公約