不向特定使用者顯示所有 docker 容器

不向特定使用者顯示所有 docker 容器

我想使用一台伺服器來託管多個 docker 容器。我想為另一個用戶提供管理新 docker 容器的可能性,但我不想讓他存取我啟動的所有其他容器,因為它們可能包含敏感資料。

有沒有一種方法可以建立不需要建立虛擬機器的安全配置?

答案1

原始問題:如何允許使用者旋轉自己的新容器而不存取其他容器?

這是我最初的答案,但也許我誤解了這個問題或問題不太清楚,無論如何我在這裡保留了原來的解決方案

Docker 本身並沒有提供此功能,但有多種方法可以做到這一點。

這個想法是,docker 命令要求用戶位於 sudo 或 docker 群組中才能運行,因此,如果您只想用戶旋轉一個新容器,而不是將用戶添加到 sudo 或 docker 群組,後者提供對所有 docker 的完全訪問權限指令,您只能將該使用者的幾個docker 指令列入白名單。

例如,如果您想要允許使用者 tom 運行以下容器:

sudo docker container run --it --name ubuntu-tom ubuntu:latest bash

您可以透過執行以下命令將以下行新增至您的 sudoers 檔案中須藤維蘇多

tom ALL=NOPASSWD: /usr/bin/docker container run --it --name ubuntu-tom ubuntu:latest bash

這允許使用者 tom 以 root 身分執行這個特定的 docker 命令,而無需密碼。使用者 tom 仍然無法使用任何其他 docker 命令。

另一個選擇是設定受限 shell,但我不會在這裡詳細介紹。

更新問題:如何限制使用者管理新容器?

我不知道僅使用 Docker 的可能解決方案。

聽起來您需要一個編排器,例如 Kubernetes 或 ECS。

這樣,編排器就擁有了 docker 守護進程,您可以利用編排器提供的權限層。這文章提供了限制使用者存取命名空間的一個很好的例子。

答案2

dockerd它應該非常簡單地在每個用戶的基礎上運行,並利用檔案權限來分離用戶存取。

剛剛找到一個使用 systemd 模板來進行此設定的教學: https://www.jujens.eu/posts/en/2018/Feb/25/multiple-docker/

答案3

為什麼不實現 portainer 它有很多功能,例如用戶控制,GUI 選單等等,你也不必在伺服器上創建用戶

肖像畫家

答案4

docker API 內部沒有此功能,請將直接存取視為系統管理員層級的功能,因為它為使用者提供了對伺服器的 root 存取權。因此,要實現這一點,您需要提供自己對 API 的間接訪問,或使用在 docker 之上提供此功能的其他工具。

  1. 您可以提供一個由 sudo 存取的腳本,該腳本在執行命令之前對命令執行所有安全檢查。實現這一點的最簡單方法是在創建的每個對象(容器、卷、網絡等)上添加標籤,然後僅返回與任何查詢中的過濾器匹配的對象,並將命令限制為僅運行到具有這些標籤的對象。寫起來並不簡單,所以我只看到人們選擇了後來的選擇。但是,如果運行的命令和容器非常有限,那麼這對您來說可能是一個足夠好的解決方案。

  2. Kubernetes 命名空間提供了此功能,並在 docker 之上運作。這需要實現的工作量很大,因此大多數人只有在需要 Kubernetes 提供的更多功能時才會選擇這個方向。

  3. 存在各種處理用戶存取的第三方工具,其中一些是商業工具。 Portainer 和 Rancher 是兩個受歡迎的,但我對這些沒有個人經驗。

  4. Docker 提供了一個名為 UCP 的企業產品。您可以向使用者授予 docker api/cli 存取權限,該存取權限在將請求發送到底層 docker 引擎之前透過 UCP 進行 RBAC 檢查。

相關內容