005.OpenShift訪問控制-許可權-角色

来源:https://www.cnblogs.com/itzgr/archive/2020/06/20/13170130.html
-Advertisement-
Play Games

一 Kubetcl namespace 1.1 namespace描述 Kubernetes namespace提供了將一組相關資源組合在一起的機制。在Red Hat OpenShift容器平臺中,project是一個帶有附加註釋的Kubernetes namespace。 namespace提供以 ...


一 Kubetcl namespace

1.1 namespace描述

Kubernetes namespace提供了將一組相關資源組合在一起的機制。在Red Hat OpenShift容器平臺中,project是一個帶有附加註釋的Kubernetes namespace。 namespace提供以下特性:
  1. 命名資源,以避免基本的命名衝突;
  2. 將管理許可權授予受信任的用戶;
  3. 限制用戶資源消耗的能力;
  4. 用戶和用戶組隔離。

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:oauth

1.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 :default

2.2 查看本地policy

儘管本地角色列表及其關聯的規則集在本地策略中是不可查看的,但是所有預設角色仍然適用,並且可以添加到用戶或組中,cluster-admin預設角色除外。但是,本地綁定是可見的。 可通過以下命令查看當前的本地綁定,其中顯示綁定到不同角色的用戶和組。 [root@demo ~]# oc describe policyBindings :default 提示:預設情況下,在本地策略中,只會列出admin角色的綁定。但是,如果將其他預設角色添加到本地策略中的用戶和組,也會列出它們。

2.3 管理role綁定

向用戶或組添加或綁定角色,從而實現向用戶或組提供角色授予的相關訪問許可權。可以使用oc adm policy命令在用戶和組之間添加和刪除角色。 當使用以下操作管理本地策略的用戶和組角色時,可以使用-n選項指定項目。如果沒有指定,則使用當前項目。 常見管理本地策略操作:
命令 描述
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-fromgroup role groupname 從指定組中移除給定角色
oc adm policy remove-group groupname 刪除指定的組及其所有角色
還可以使用如下所示的的操作管理cluster policy的role binding,這類命令不需要-n選項,因為cluster policy不在namespace級別上操作。 常見管理cluster policy操作:
命令 描述
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-togroup role groupname 為集群中的所有項目將指定的角色綁定到指定的組
oc adm policy remove-cluster-role-from-group role groupname 從集群中所有項目的指定組中移除給定角色
提示:oc policy命令應用於當前項目,而oc adm policy命令應用於集群範圍的操作。 示例:在example項目中為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可以執行的操作和它可以訪問的資源。預設情況下,任何容器的執行都只授予受限制的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 admin

4.4 身份驗證和授權

身份驗證層標識與對OpenShift容器平臺API的請求相關聯的用戶,然後授權層使用關於請求用戶的身份信息來確定是否應該允許該請求。
  • user和group
OCP容器平臺中的用戶是一個可以向OpenShift API發出請求的實體。通常,這表示與OpenShift交互的develop或administrator的帳戶。 可以將用戶分配給一個或多個組,每個組表示一組特定的角色(或許可權)。當需要通過管理授權策略給多個客戶授權時候,group會比較合適。例如允許訪問項目中的對象,而不是單獨授予用戶。
  • Authentication Tokens
API調用必須使用訪問令牌或X.509證書進行身份驗證,會話token表示用戶,並且是短期的,預設情況下在24小時內到期。 可以通過運行oc whoami命令來驗證經過身份驗證的用戶。 [root@master ~]$ oc login -u demo-user [root@master ~]$ oc whoami demo-user

4.5 身份驗證類型

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

五 管理項目及賬戶

5.1 前置準備

準備完整的OpenShift集群,參考《003.OpenShift網路》2.1。

5.2 本練習準備

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

5.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登錄,並部署應用,會出現如下提示:
clipboard

5.10 驗證部署

  1 [student@workstation ~]$ oc get pods
clipboard 結論:由上可知,部署失敗是因為容器映像需要root用戶,pod以CrashLoopBackOff或錯誤狀態結束。

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" cr

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ASP.NET Core引入了Options模式,使用類來表示相關的設置組。簡單的來說,就是用強類型的類來表達配置項,這帶來了很多好處。利用了系統的依賴註入,並且還可以利用配置系統。它使我們可以採用依賴註入的方法直接使用綁定的一個POCO對象,這個POCO對象就叫做Options對象。也可以叫做配置 ...
  • /// <summary> /// DataTable導出Excel(縱嚮導出) /// </summary> /// <param name="dataTable">數據源</param> /// <param name="filePath">保存的路徑</param> /// <param na ...
  • 系列文章 基於 abp vNext 和 .NET Core 開發博客項目 - 使用 abp cli 搭建項目 基於 abp vNext 和 .NET Core 開發博客項目 - 給項目瘦身,讓它跑起來 基於 abp vNext 和 .NET Core 開發博客項目 - 完善與美化,Swagger登場 ...
  • 1.前言 回顧:認證方案之初步認識JWT 在現代Web應用程式中,即分為前端與後端兩大部分。當前前後端的趨勢日益劇增,前端設備(手機、平板、電腦、及其他設備)層出不窮。因此,為了方便滿足前端設備與後端進行通訊,就必須有一種統一的機制。所以導致API架構的流行。而RESTful API這個API設計思 ...
  • 前言 上一篇【.Net Core微服務入門全紀錄(四)——Ocelot-API網關(上)】已經完成了Ocelot網關的基本搭建,實現了服務入口的統一。當然,這隻是API網關的一個最基本功能,它的進階功能還有很多很多。 服務發現 首先需要解決的就是服務發現的問題,服務發現的優點之前講過,就不說了。 上 ...
  • 一:背景 1. 講故事 在開始本文之前,真的好想做個問卷調查,到底有多少人和我一樣,對 JsonConvert 的認識只局限在 SerializeObject 和 DeserializeObject 這兩個方法上(┬_┬), 這樣我也好結伴同行,不再孤單落魄😁😁😁,或許是這兩個方法基本上能夠解 ...
  • 在管理節點上能夠訪問到容器服務的原因是通過訪問本機的80,通過iptables規則把流量轉發給docker_gwbridge,docker_gwbridge通過內核把流量轉發給ingress網路,因為ingress生效範圍是整個swarm,這意味著管理節點和work節點共用一個swarm的網路空間... ...
  • 環境:CentOS 7.6.1810 現象:通過yum安裝程式時,每個鏡像都無法下載文件,提示404錯誤,排除網路故障。具體現象見下圖: 疑似原因:之前執行了命令yum makecache fast時網路有故障,命令執行到一般被強制終止。 解決方法:執行如下命令,然後再進行安裝,問題解決。 # yu ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...