登錄檔存取管理
登錄檔存取管理(Registry Access Management,簡稱 RAM)讓管理員能夠控管開發人員透過 Docker Desktop 可存取的容器登錄檔。這種 DNS 層級的過濾機制確保開發人員僅能從核准的登錄檔拉取(pull)與推送(push)映像檔,進而提升供應鏈安全性。
RAM 適用於所有類型的登錄檔,包括雲端服務、地端登錄檔以及登錄檔鏡像。您可以允許任何主機名稱或網域,但必須將重新導向網域(例如某些登錄檔使用的 s3.amazonaws.com)包含在允許清單中。
支援的登錄檔
登錄檔存取管理適用於任何容器登錄檔,包括:
- Docker Hub(預設允許)
- 雲端登錄檔:Amazon ECR、Google Container Registry、Azure Container Registry
- 基於 Git 的登錄檔:GitHub Container Registry、GitLab Container Registry
- 地端解決方案:Nexus、Artifactory、Harbor
- 登錄檔鏡像:包含 Docker Hub 鏡像
先決條件
在設定登錄檔存取管理之前,您必須:
- 強制登入,以確保使用者透過您的組織帳戶進行驗證
- 使用個人存取權杖 (PAT) 進行驗證(不支援組織存取權杖)
- 擁有 Docker Business 訂閱
重要登錄檔存取管理僅在使用者以組織憑證登入 Docker Desktop 時生效。
設定登錄檔權限
設定登錄檔權限的方法:
- 登入 Docker Home 並選取您的組織。
- 選擇 Admin Console(管理主控台),然後選擇 Registry access(登錄檔存取)。
- 使用切換開關啟用登錄檔存取。預設情況下,Docker Hub 已包含在登錄檔清單中。
- 若要新增額外的登錄檔,請選擇 Add registry(新增登錄檔),並提供 Registry address(登錄檔位址)與 Registry nickname(登錄檔暱稱)。
- 選擇 Create(建立)。您最多可以新增 100 個登錄檔。
- 確認您的登錄檔出現在清單中,然後選擇 Save changes(儲存變更)。
變更生效可能需要最多 24 小時。若要立即套用,請讓開發人員登出並重新登入 Docker Desktop。
重要自 Docker Desktop 4.36 版本起,如果開發人員屬於多個具有不同 RAM 政策的組織,則僅會強制執行設定檔中第一個組織的政策。
提示RAM 限制同樣適用於透過 URL 取得內容的 Dockerfile
ADD指令。使用帶有 URL 的ADD時,請務必將受信任的登錄檔網域包含在允許清單中。
RAM 專為容器登錄檔設計,而非用於套件鏡像或儲存服務等通用 URL。新增過多網域可能會導致錯誤或達到系統限制。
驗證限制是否生效
使用者以組織憑證登入 Docker Desktop 後,登錄檔存取管理會立即生效。
當使用者嘗試從遭到封鎖的登錄檔拉取映像檔時:
$ docker pull blocked-registry.com/image:tag
Error response from daemon: registry access to blocked-registry.com is not allowed
獲允許的登錄檔存取將正常運作
$ docker pull allowed-registry.com/image:tag
# Pull succeeds
登錄檔限制適用於所有 Docker 操作,包括參考外部登錄檔的拉取、推送及建置操作。
登錄檔限制與平台約束
登錄檔存取管理具有下列限制與平台特定行為:
- 最大允許清單大小:每個組織最多 100 個登錄檔或網域
- 基於 DNS 的過濾:限制在主機名稱層級運作,而非 IP 位址
- 需要重新導向網域:必須包含登錄檔所重新導向的所有網域(CDN 端點、儲存服務等)
- Windows 容器:Windows 映像檔操作預設不受限制。若要套用限制,請在 Docker Desktop 設定中開啟 Use proxy for Windows Docker daemon(為 Windows Docker 常駐程式使用代理伺服器)
- WSL 2 要求:需要 Linux 核心 5.4 或更新版本;限制適用於所有 WSL 2 發行版
建置與部署限制
下列情況不受登錄檔存取管理限制:
- 使用 Kubernetes 驅動程式的 Docker buildx
- 使用自訂 docker-container 驅動程式的 Docker buildx
- 部分 Docker Debug 與 Kubernetes 映像檔拉取(即使 Docker Hub 已遭封鎖)
- 若來源登錄檔受到限制,先前由登錄檔鏡像快取的映像檔仍可能遭到封鎖
安全性繞過考量
使用者可能會透過以下方式嘗試繞過登錄檔存取管理:
- 本地代理伺服器或 DNS 操縱
- 登出 Docker Desktop(除非強制登入)
- Docker Desktop 無法控制的網路層級修改
為了發揮最大的安全性效益:
- 強制登入以防止透過登出進行繞過
- 實施額外的網路層級控制,以達到全面保護
- 將登錄檔存取管理作為更廣泛安全策略的一部分
登錄檔允許清單最佳實踐
包含所有登錄檔網域:某些登錄檔會重新導向至多個網域。對於 AWS ECR,請務必包含:
your-account.dkr.ecr.us-west-2.amazonaws.com amazonaws.com s3.amazonaws.com落實定期的允許清單維護
- 定期移除未使用的登錄檔
- 視需要新增新核准的登錄檔
- 更新可能已變更的網域名稱
- 透過 Docker Desktop 分析監控登錄檔使用情形
測試設定變更
- 在更新允許清單後驗證登錄檔存取權限
- 檢查是否已包含所有必要的重新導向網域
- 確保開發工作流程未受干擾
- 結合增強型容器隔離 (Enhanced Container Isolation) 以獲得全面保護