Docker® 包含了許多動態元件,因此其防護要比舊式部署技術要來得更加複雜,同時還需要一套全方位面面俱到的方法,從網路與應用程式防火牆,到容器執行時期防護以及主機防護全面涵蓋。
Docker 容器防護
保護 Docker 容器與保護其他容器沒什麼兩樣,同樣需要一套面面俱到的方法,全面保護從主機到網路之間的所有環節。但也由於其元件的動態特性,確保容器安全是許多企業的難題,而且不能只光靠提高警覺來達成。
需要考量的層面
以下是保護 Docker 容器安全所需考量的一些層面:
設定資源配額
設定資源配額可讓您控管容器的記憶體跟 CPU 用量,為每一個容器設定資源配額,不僅有助於提高整體環境的效率,還能避免容器之間的資源分配不均。
如此可讓您的容器發揮預期的效能,但最重要的是能提升安全,萬一某個容器感染了惡意程式,它就不會占據大量資源,因為會受到配額的限制,進而減輕駭客攻擊的衝擊。這是一個值得善用的簡單資安技巧,而且只需透過一些指令列參數就能達成。
Docker 容器不應以系統管理員 (root) 身分執行
在建構應用程式的過程當中,您最好嚴格遵守最低授權原則,也就是僅讓應用程式存取其功能運作時所必要的資源,這是防止容器遭到不當存取的最佳方法之一。
就 Docker 容器防護而言,這一點非常重要,而這也是為何 Docker 會預設不讓容器以系統管理員 (root) 的身分來執行。比方說,如果您的容器化應用程式含有某個可被攻擊的漏洞,然後您又以系統管理員身分來執行容器,那麼不僅您的受攻擊面將擴大,而且駭客將更容易取得系統權限。
確保 Docker 容器登錄的安全
容器登錄,尤其是 Docker 的容器登錄,是容器平台之所以強大的原因,有了容器登錄,您就能集中保管所有的容器映像,方便您迅速下載容器。不過,這樣的便利性也帶來了許多資安上的風險,除非您採用一套經過您仔細研究之後確定值得信任的容器登錄,例如 Docker Trusted Registry。採用 Docker 登錄時,您必須將它安裝在 IT 基礎架構的防火牆內,以避免網際網路所帶來的風險,但即使這樣,您還是必須禁止某些使用者對登錄進行上傳或下載。
或許您會覺得這樣很麻煩,乾脆直接開放存取就好,但這一點小小的麻煩卻能避免容器登錄發生重大的資料外洩問題。有一個方法可以解決這樣的麻煩就是實施角色導向的存取控管,這樣您就能精確掌控哪些人可以存取哪些登錄。
挑選值得信賴的來源
既然容器登錄本身的安全已獲得保障,接下來您要避免讓非信賴來源的容器映像進入您的登錄當中。網路上有許多公開的容器映像,只要點一下滑鼠就能下載,但極為重要的一點是,您必須確保您的下載來源是值得信賴或經過驗證的來源。
為了小心與確保安全起見,您實在應該避開一些公共開放的容器登錄,只信賴 Docker 所提供的登錄,例如 Docker Hub。除此之外,您還必須進一步採用一套容器映像掃描工具來發掘 Docker 映像當中是否有任何漏洞存在,並且加以防護。
直接查看原始程式碼
正如前面所說,找到可靠且值得信賴的容器映像來源,對您的 Docker 容器來說非常重要。但即使這樣,您最好還是養成習慣檢查一下映像中的程式碼來確定其程式碼並未遭到感染 (即使是來自可信賴的容器登錄)。Docker 映像當中除了官方的程式碼之外,還有一些來自外部套件的程式碼,而這些就可能不是來自可信賴的來源,
此時,您最好採用一套原始程式碼分析工具來加以檢查。您一旦拿到映像之後,您可以下載 Docker 映像內所有套件的原始程式碼然後掃描一下這些套件看看它們來自何處。這樣一來,您就能發掘是否有任何映像當中含有已知的資安漏洞,讓您從一開始就能確保安全。
在 API 與網路設計之初即考慮到安全
Docker 容器彼此之間會透過程式開發介面 (API) 與網路來進行通訊。這些通訊是容器正常運作的必要基礎,因此需要適當加以防護和監控。雖然 API 和網路並不屬於 Docker 容器的一部分,而是您在使用 Docker 時所會用到的資源,但仍會為容器帶來資安風險。因此,為了能在遭遇駭客入侵時迅速加以攔截,您在設計 API 與網路時就必須考慮到安全性以及監控的方便性。
總結
確保 Docker 容器安全不是一件輕而易舉的事,但您所投入的心力卻絕對值得。您需要一套全方位面面俱到的方法並強化容器環境的每一個層面。儘管上述的最佳實務原則看來很多,但卻能讓您在未來省下大量時間,並且避免許多重大的資安風險。
相關研究
相關文章