簡體   English   中英

限制/控制 kubectl exec 命令

[英]Limit/Controlled kubectl exec command

我還是 kube.netes 的新手。 但我正在尋找一種方法,讓開發人員可以控制對 kubectl exec 命令的訪問。 我想讓他們運行大部分只讀命令,但阻止一些高風險命令,並阻止交互式下載/安裝等。還想在會話期間記錄他們的所有操作以供審計。

我沒有看到任何使用 rbac 的直接方法。 也沒有在牧場主中看到這些選項。 我正在尋找一些指導和方向來實現這種能力。

我相信你們中的一些人已經以某種方式實現了它。

Kube.netes RBAC 只能在你可以或不能exec到 pod 時進行驗證(通過檢查create verb on pods/exec資源),之后它切換到 SPDY 協議並傳遞你的輸入並從你的docker exec的模擬返回 output容器運行時,實際上並不關心進出的內容

使用 rbac,您還必須指定 pod 名稱,如果您使用 Deployments,這可能會出現問題,其中每個新修訂版都會生成不同的 pod 名稱。 由於 rbac 中未實現模式匹配 - 每次生成新的 pod 名稱時,您都必須更改您的角色。

所以答案是“不,你不能用 rbac 做到這一點”

另一種解決方案是使用某種 CI/CD(jenkins、gitlab-ci 等)或編排工具(rundeck、ansible-tower 等),您將在其中創建某種腳本,您的開發人員將在其中將 arguments 傳遞給工作,由你控制,即

kubectl exec deploy/foo -- /bin/bar baz "$DEV_ARGUMENT"

從本質上講,這意味着您將負責管理對該作業/腳本的訪問,為該腳本創建和維護 serviceAccount 等。

如果你害怕圖像可變性,即你不希望你的開發人員在運行的容器中安裝一些東西,但是給他們 shell 就可以了(記住,他們仍然可以讀取任何秘密/env vars/configMaps 甚至 serviceAccount pod 使用的令牌默認掛載它們),您應該考慮以下事項:

  1. 不要以root身份運行容器。 嘗試使用支持 rootles 操作的圖像,然后在securityContextrunAsUser字段中指定正確的非 root UID,或者配置runAsNonRoot: true標志以拒絕以 root 身份運行的容器。
  2. 更好的通用解決方案是利用 PodSecurityPolicy(已棄用,在 1.25 中刪除)、Pod Security Admission 或一些第 3 方准入控制器(如 OPA Gatekeeper)來拒絕在您的命名空間中以 root 身份運行的容器
  3. 您還可以通過在安全上下文中使用readOnlyRootFilesystem使您的 pod 不可變,這將拒絕對 pod 臨時存儲的寫操作(但如果您將任何卷安裝為 RW - 它們仍然可以進行寫操作)。 這種方法的可行性取決於您的應用何時使用某種臨時文件

相關鏈接:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM