什麼是增強容器隔離?
增強容器隔離 (ECI) 提供額外的安全層,以防止在容器中執行的惡意工作負載危及 Docker Desktop 或主機。
它採用多種先進技術來加固容器隔離,同時不影響開發人員的生產力。
增強容器隔離確保更強的容器隔離,並且鎖定管理員建立的任何安全配置,例如透過映象倉庫訪問管理策略或使用設定管理建立的配置。
注意
ECI 是 Docker 使用的其他容器安全技術的補充。例如,精簡的 Linux Capabilities、seccomp 和 AppArmor。
面向哪些使用者?
- 適用於希望防止容器攻擊並減少開發者環境中的漏洞的組織和開發者。
- 適用於希望在開發者機器上輕鬆直觀地實現更強容器隔離的組織。
啟用增強容器隔離後會發生什麼?
啟用增強容器隔離後,將啟用以下功能和安全技術
- 所有使用者容器都自動在 Linux 使用者名稱空間中執行,這確保了更強的隔離。每個容器都在專用的 Linux 使用者名稱空間中執行。
- 容器中的 root 使用者對映到 Docker Desktop Linux VM 中的一個非特權使用者。
- 容器更難被攻破。例如,敏感系統呼叫會經過審查,並且
/proc和/sys的部分內容會在容器內部進行模擬。 - 使用者可以像往常一樣繼續使用容器,包括繫結掛載主機目錄、卷等。
- 開發者執行容器的方式沒有變化,也不需要特殊的容器映象。
- 特權容器(例如,
--privileged標誌)可以工作,但它們僅在容器的 Linux 使用者名稱空間內擁有特權,而不是在 Docker Desktop VM 中。因此,它們不能用於攻破 Docker Desktop VM。 - Docker-in-Docker 甚至 Kubernetes-in-Docker 都可以工作,但它們在 Docker Desktop Linux VM 內部以非特權方式執行。
此外,還施加了以下限制
- 容器不能再與 Docker Desktop VM 共享名稱空間(例如,不允許使用
--network=host、--pid=host)。 - 容器不能再修改 Docker Desktop VM 內部的配置檔案(例如,不允許將任何 VM 目錄掛載到容器中)。
- 容器不能再訪問 Docker Engine。例如,將 Docker Engine 的 socket 掛載到容器中是受限的,這可以防止惡意容器控制 Docker Engine。管理員可以為受信任的容器映象放寬此限制。
- 禁止所有使用者對 Docker Desktop VM 進行控制檯訪問。
這些功能和限制確保容器在執行時具有更好的安全性,同時對開發者體驗和生產力的影響最小。開發者可以像往常一樣繼續使用 Docker Desktop,但他們啟動的容器具有更強的隔離性。
有關增強容器隔離如何工作的更多資訊,請參閱工作原理。
重要
Docker 構建和 Docker Desktop 中的 Kubernetes 的 ECI 保護因 Docker Desktop 版本而異。後續版本包含比早期版本更多的保護。此外,ECI 尚不保護擴充套件容器。有關已知限制和解決方法,請參閱常見問題解答。
如何啟用增強容器隔離?
作為開發者
作為開發者啟用增強容器隔離
- 確保您的組織擁有 Docker Business 訂閱。
- 在 Docker Desktop 中登入您的組織。這將確保 ECI 功能在 Docker Desktop 的“設定”選單中可用。
- 停止並移除所有現有容器。
- 在 Docker Desktop 中導航到設定 > 通用。
- 在使用增強容器隔離旁邊,勾選複選框。
- 選擇應用並重啟以儲存您的設定。
重要
增強容器隔離不保護在啟用 ECI 之前建立的容器。有關已知限制和解決方法,請參閱常見問題解答。
作為管理員
先決條件
您首先需要強制執行登入,以確保所有 Docker Desktop 開發者都使用您的組織進行身份驗證。由於設定管理需要 Docker Business 訂閱,強制登入可確保只有經過身份驗證的使用者才能訪問,並且此功能始終對所有使用者生效,即使在未強制登入的情況下它可能仍然有效。
設定
建立並配置 admin-settings.json 檔案,並指定
{
"configurationFileVersion": 2,
"enhancedContainerIsolation": {
"value": true,
"locked": true
}
}設定 "value": true 可確保預設啟用 ECI。透過設定 "locked": true,開發者無法停用 ECI。如果您想讓開發者能夠停用此功能,請設定 "locked": false。
此外,您還可以配置容器的 Docker socket 掛載許可權。
要使其生效
- 對於新安裝,開發者需要啟動 Docker Desktop 並對其組織進行身份驗證。
- 對於現有安裝,開發者需要透過 Docker 選單退出 Docker Desktop,然後重新啟動 Docker Desktop。如果他們已登入,則無需再次登入即可使更改生效。
重要
僅從 Docker 選單選擇重啟是不夠的,因為它只重啟 Docker Desktop 的部分元件。
當管理員強制執行此設定時,使用者會看到什麼?
提示
您現在也可以在Docker Admin Console 中配置這些設定。
啟用增強容器隔離後,使用者會看到
- 在設定 > 通用中,使用增強容器隔離已啟用。
- 容器在 Linux 使用者名稱空間中執行。
要檢查,請執行
$ docker run --rm alpine cat /proc/self/uid_map
顯示以下輸出
0 100000 65536這表明容器的 root 使用者 (0) 對映到 Docker Desktop VM 中的非特權使用者 (100000),並且該對映擴充套件了 64K 使用者 ID 的範圍。如果容器程序逃逸出容器,它將在 VM 級別發現自己沒有許可權。使用者 ID 對映隨每個新容器而變化,因為每個容器都獲得一個獨佔的主機使用者 ID 範圍用於隔離。使用者 ID 對映由 Docker Desktop 自動管理。有關更多詳細資訊,請參閱增強容器隔離的工作原理。
相比之下,沒有 ECI 時,Linux 使用者名稱空間不用於容器,顯示以下內容
0 0 4294967295這意味著容器中的 root 使用者 (0) 實際上是 Docker Desktop VM 中的 root 使用者 (0),這降低了容器隔離性。
由於增強容器隔離使用嵌入在 Docker Desktop Linux VM 中的 Sysbox 容器執行時,確定容器是否使用增強容器隔離執行的另一種方法是使用 docker inspect
$ docker inspect --format='{{.HostConfig.Runtime}}' my_container
它輸出
sysbox-runc如果沒有增強容器隔離,docker inspect 將輸出 runc,它是標準的 OCI 執行時。