如何測試KubernetesRBAC?
Kubernetes(從1.6版本)引入了基於角色的訪問控制(RBAC),允許系統管理員定義策略來限制叢集使用者的行為。這意外著建立有限訪問許可權的使用者是可能的。它允許你限制如Secrets等資源的訪問,或限制使用者對某個名稱空間的訪問。
本文不會介紹如何實現RBAC,因為它已經有很多不錯的詳實的資料:
- https://medium.com/containerum … 17d5d
- https://www.cncf.io/blog/2018/ … etes/
- https://docs.bitnami.com/kuber … ster/
- https://kubernetes.io/docs/ref … rbac/
本文將聚集於怎樣使你業務的合規性和需求得到切實滿足。為此,我們需要測試被應用的RBAC物件,以確保它們像我們期望地那樣工作。
我們的場景
某個組織有多組團隊的人員,剛開始上手使用Kubernetes叢集。這時要求一個團隊不能去修改另一個團隊的deployment,否則會導致不可預見的跨團隊問題或停機。
負責Kubernetes deployment維護的平臺團隊最近在叢集裡部署了RBAC,它會將團隊成員的訪問限制在其對應的名稱空間。首先,團隊不能看到其它團隊名稱空間的Pod。
執行一週後,平臺團隊發現在一個被限制的名稱空間的使用者一直在讀取其它名稱空間的Secrets,但這是怎麼做到的呢?他們沒實現RBAC嗎?
事實上,他們做了。但就像對程式碼一樣,我們需要測試我們的系統來看它是否符合期望。慶幸的是,Kubernetes的命令列工具kubectl提供了測試RBAC配置的工具。kubectl auth can-i
Can I?
can-i只是使用API檢查是否某個操作可以被執行。它有以下選項 kubectl auth can-i VERB [TYPE | TYPE/NAME | NONRESOURCEURL]
現在可以檢查當前使用者是否可以執行某個操作。我們試一下:
kubectl auth can-i create pods
這會返回”yes”或”no”及相應的退出碼。
但只要我們嘗試測試另一使用者的授權,就會碰到障礙。因為用以上指令,我們只能使用當前載入的./kube/config來測試。而每個使用者一個檔案是很不足取的。好在Kubernetes又提供了使用–as=和–as-group-來模擬使用者的能力。
我們修改下指令,來模擬一個不同的使用者:
kubectl auth can-i create pods --as=me
我們應該會看到它返回”no”和退出碼1。
這很棒,我們現在有了一堆指令來測試一組使用者或單個使用者是否可以訪問任何Kubernetes資源,不論是檢視Pod列表還是刪除Secrets。
自動化
但我們不要停下來,我們已經為實現一個可以描述需求列表的並且可整合到持續交付流水線的測試集鋪平了道路,我們開始吧!
要實現自動化,我們有很多技術和程式語言的選擇,從JavaScript裡的Ava和Mocha到Rspec,這裡,我將使用一個純bash實現的測試框架,它叫Bats。
下面是一個例子,它測試一個團隊名稱空間的使用者可以對其deployment做擴縮容。如果該檔案設定了可執行許可權,它可以像任何shell指令碼一樣執行,或通過bats filename
來執行。
#!/usr/bin/env bats @test "Team namespaces can scale deployments within their own namespace" { run kubectl auth can-i update deployments.apps --subresource="scale" --as-group="$group" --as="$user" -n $ns [ "$status" -eq 0 ] [ "$output" == "yes" ] done }
注意一下:--as
和--as-group
指令要求使用以下的RBAC規則:
rules: - apiGroups: - authorization.k8s.io resources: - selfsubjectaccessreviews - selfsubjectrulesreviews verbs: - create
如上,你有了一個簡單的測試Kubernetes RBAC規則的實現方法。將其整合到你的Kubernetes持續交付流水線中,我們就有了一個被驗證過的更可靠的RBAC策略配置。這使得破壞策略的變化可以被及早發現。
本文轉自DockOne-如何測試Kubernetes RBAC?
相關文章
- 軟體測試員如何提取測試需求?
- 測試人員如何提高API功能測試效率?API
- 測試人員如何攻破物聯網測試?
- 單元測試如何測試私有方法_1
- 自動化測試如何管理測試資料
- 如何測試 Flutter 應用? ー 單元測試Flutter
- 測試測試測試測試測試測試
- 軟體測試之網站測試如何進行?測試小攻略走起!網站
- 功能測試如何快速轉向自動化測試?
- 如何使用spring測試模組測試請求功能Spring
- 測試人員如何上手去測試鴻蒙 NEXT鴻蒙
- 軟體測試培訓:如何搭建測試環境
- 介面測試是什麼?如何做好介面測試?
- [譯] 如何測試 React Hooks ?ReactHook
- 如何測試OWASP Top 10
- 資料清洗如何測試?
- 如何測試伺服器伺服器
- 介面測試怎麼進行,如何做好介面測試
- Angular單元測試如何只執行指定的測試用例,提高測試速度Angular
- 回顧專案測試全過程,測試如何回答 “測完了嗎?”
- 如何實現介面異常場景測試?測試方法探索與測試工具實現
- JB的測試之旅-測試崗如何進行業績考核?行業
- 『測試基礎』| 如何理解測試用例管理和缺陷管理?
- 如何編寫優秀的測試程式碼|單元測試
- 軟體測試面試如何自我介紹面試
- 如何測試微信小程式微信小程式
- 如何寫好單元測試
- 變異測試:如何利用故障?
- charles 如何進行介面測試?
- 如何提高介面測試的效率
- 如何利用fiddler做mock測試Mock
- 如何評估測試工時?
- 如何做好手工測試?
- 如何測試伺服器效能?伺服器
- 測試如何把控專案
- 軟體測試之網站測試如何進行?網站測試方案2022最新報價網站
- 如何學習自動化測試?從手工測試到自動化測試的過程…
- 軟體系統測試有哪些測試過程?系統測試報告如何收費?測試報告