什麼是增強型容器隔離?

注意

增強容器隔離僅適用於 Docker Business 客戶。

增強容器隔離提供額外的安全層,以防止容器中執行的惡意工作負載破壞 Docker Desktop 或主機。

它使用各種高階技術來加固容器隔離,但不會影響開發者的工作效率。它適用於 Docker Desktop 4.13.0 及更高版本

這些技術包括

  • 透過 Linux 使用者名稱空間執行所有容器(即使是使用 --privileged 標誌啟動的容器)的非特權模式。這使得惡意容器工作負載更難逃逸容器並感染 Docker Desktop 虛擬機器和主機。
  • 確保 Docker Desktop 虛擬機器的不可變性(例如,容器或使用者無法修改其內部設定)。
  • 審查一些關鍵系統呼叫以防止容器逃逸,並在容器內部部分虛擬化 /proc/sys 部分以實現進一步隔離。
  • 阻止使用者訪問 Docker Desktop 虛擬機器的控制檯。

啟用增強容器隔離後,這些機制會自動應用,對開發人員的功能或效能影響最小。開發人員可以像往常一樣使用 Docker Desktop,但他們啟動的容器隔離性更強。

增強容器隔離確保更強的容器隔離,並鎖定 IT 管理員建立的所有安全配置,例如透過 登錄檔訪問管理策略設定管理 建立的配置。

注意

增強容器隔離是 Docker 使用的其他容器安全技術的補充。例如,減少的 Linux 功能、Seccomp、AppArmor。

適用於誰?

  • 適用於希望防止容器攻擊並減少開發環境中漏洞的組織和開發者。
  • 適用於希望確保更強的容器隔離的組織,這種隔離易於直觀地實施在開發人員的機器上。

啟用增強容器隔離後會發生什麼?

啟用增強容器隔離後,將啟用以下功能

  • 所有使用者容器會自動在 Linux 使用者名稱空間中執行,確保更強的隔離。每個容器都在專用 Linux 使用者名稱空間中執行。
  • 容器中的 root 使用者對映到 Docker Desktop Linux 虛擬機器中的非特權使用者。
  • 容器更難被破解。例如,敏感系統呼叫會經過審查,/proc/sys 的部分內容會進行模擬。
  • 使用者可以像往常一樣繼續使用容器,包括繫結掛載主機目錄、卷等等。
  • 開發人員執行容器的方式沒有變化,不需要特殊的容器映象。
  • 特權容器(例如 --privileged 標誌)可以正常工作,但它們只在容器的 Linux 使用者名稱空間中具有特權,而不是在 Docker Desktop 虛擬機器中。因此,它們無法用來破解 Docker Desktop 虛擬機器。
  • Docker-in-Docker 甚至 Kubernetes-in-Docker 也可以工作,但在 Docker Desktop Linux 虛擬機器中以非特權模式執行。

此外,還將實施以下限制

  • 容器不再能夠與 Docker Desktop 虛擬機器共享名稱空間(例如,不允許使用 --network=host--pid=host)。
  • 容器不再能夠修改 Docker Desktop 虛擬機器內的配置檔案(例如,不允許將任何虛擬機器目錄掛載到容器中)。
  • 容器不再能夠訪問 Docker 引擎(例如,將 Docker 引擎的套接字掛載到容器中受到限制);這可以防止惡意容器控制 Docker 引擎。管理員可以為 受信任的容器映象 放寬此限制。
  • 禁止所有使用者訪問 Docker Desktop 虛擬機器的控制檯。

這些功能和限制確保容器在執行時得到更好的保護,對開發人員的體驗和工作效率影響最小。

有關增強容器隔離工作原理的更多資訊,請參閱 它是如何工作的

重要

增強容器隔離尚未完全保護 Docker 構建、Kubernetes Pod 和擴充套件容器。有關已知限制和解決方法的更多資訊,請參閱 常見問題解答

哪些主機作業系統/平臺支援增強容器隔離?

增強容器隔離 (ECI) 在 Docker Desktop 4.13 中推出,適用於所有平臺(Windows、Mac 和 Linux)。

對於 Windows 主機,ECI 與 Docker Desktop Hyper-V 和 WSL 2 後端一起工作,如下所示

  • Docker Desktop 4.19 或更早版本:ECI 僅適用於 Hyper-V。
  • Docker Desktop 4.20 或更高版本:ECI 適用於 Hyper-V 和 WSL 2(WSL 版本 1.1.3.0 及更高版本)。

有關更多資訊以及在 WSL 2 上使用增強容器隔離時的安全注意事項,請參閱 WSL 的 ECI 支援

如何啟用增強容器隔離?

作為開發者

要作為開發者啟用增強容器隔離

  1. 確保您的組織擁有 Docker Business 訂閱。
  2. 在 Docker Desktop 中登入您的組織。這將確保 ECI 功能在 Docker Desktop 的“設定”選單中對您可用。
  3. 停止並刪除所有現有容器。
  4. 在 Docker Desktop 中導航到 **設定** > **常規**。
  5. 在 **使用增強容器隔離** 旁邊,選中複選框。
  6. 選擇 **應用並重啟** 以儲存您的設定。

重要

增強容器隔離不會保護在啟用 ECI 之前建立的容器。有關已知限制和解決方法的更多資訊,請參閱 常見問題解答

作為管理員

要作為管理員啟用增強容器隔離,您首先需要 強制登入。這是因為增強容器隔離功能需要 Docker Business 訂閱,因此您的 Docker Desktop 使用者必須對其組織進行身份驗證,才能使此配置生效。

接下來,您必須 建立和配置 admin-settings.json 檔案 並指定

{
  "configurationFileVersion": 2,
  "enhancedContainerIsolation": {
    "value": true,
    "locked": true
  }
}

透過設定 "value": true,管理員確保預設啟用 ECI。透過設定 "locked": true,管理員確保開發者無法停用 ECI。如果您希望開發者能夠停用此功能,請設定 "locked": false

此外,從 Docker Desktop 4.27 開始,管理員還可以配置容器的 Docker 套接字掛載許可權,如 此處 所述。

要使此生效

  • 在全新安裝時,開發人員需要啟動 Docker Desktop 並對其組織進行身份驗證。
  • 在現有安裝中,開發人員需要透過 Docker 選單退出 Docker Desktop,然後重新啟動 Docker Desktop。如果他們已經登入,則無需再次登入即可使更改生效。

重要

從 Docker 選單中選擇 **重啟** 並不足夠,因為它只重啟了 Docker Desktop 的某些元件。

管理員強制執行此設定時,使用者會看到什麼?

啟用增強容器隔離後,使用者會看到

  • **設定** > **常規** 中的 **使用增強容器隔離** 處於啟用狀態。
  • 容器在 Linux 使用者名稱空間中執行。

要檢查,請執行

$ docker run --rm alpine cat /proc/self/uid_map

將顯示以下輸出

         0     100000      65536

這表明容器的 root 使用者 (0) 在 Docker Desktop 虛擬機器中對映到非特權使用者 (100000),並且該對映擴充套件到 64K 使用者 ID 的範圍。如果容器程序逃逸出容器,它會在虛擬機器級別發現自己沒有許可權。使用者 ID 對映在每個新的容器中都會有所不同,因為每個容器都會獲得一個獨佔的宿主使用者 ID 範圍以實現隔離。使用者 ID 對映由 Docker Desktop 自動管理。有關更多詳細資訊,請參閱 增強型容器隔離的工作原理

相反,在沒有 ECI 的情況下,Linux 使用者名稱空間不會用於容器,以下顯示

         0          0 4294967295

這意味著容器中的 root 使用者 (0) 實際上是 Docker Desktop 虛擬機器中的 root 使用者 (0),這會降低容器隔離性。

由於增強型容器隔離 使用嵌入在 Docker Desktop Linux 虛擬機器中的 Sysbox 容器執行時,因此另一種確定容器是否正在使用增強型容器隔離的方法是使用 `docker inspect`

$ docker inspect --format='{{.HostConfig.Runtime}}' my_container

它輸出

sysbox-runc

在沒有增強型容器隔離的情況下,`docker inspect` 輸出 `runc`,它是標準的 OCI 執行時。

更多資源