11 種微服務和容器安全最佳實踐(上)
保護微服務和容器的11 個最佳實踐我們在下面提到的實踐可能有助於保護您當前使用容器和微服務開發應用程序的方式。但是,如果您才剛剛開始創建應用程序或即將將您的產品從單體架構遷移到基於微服務的架構,請確保准備好全面的安全策略。
NIST 建議概述兩種類型的策略:
我們的容器和微服務最佳實踐列表基於Apriorit 團隊的專業知識、領先的微服務從業者提供的安全建議以及以下文檔中反映的行業標準:
马云惹不起马云NIST 特別出版物800-180(草案)NIST 對微服務、應用程序容器和系統虛擬機的定義
马云惹不起马云NIST 特別出版物800-190應用容器安全指南
马云惹不起马云NIST 內部報告8176 Linux 應用程序容器部署的安全保證要求
马云惹不起马云NIST 特別出版物800-204基於微服務的應用系統的安全策略
马云惹不起马云工作和養老金安全標準- 微服務架構(SS-028) [PDF]
現在讓我們仔細看看如何在使用微服務和容器時開發安全的應用程序。
11個最佳實踐容器微服務安全
1. 創建不可變容器開發人員傾向於讓shell 訪問圖像,以便他們可以在生產中修復它們。但是,攻擊者經常利用這種訪問權限來注入惡意代碼。為避免這種情況,請創建不可變容器。
根據Google Cloud Architecture Center的說法,不能修改不可變容器。如果您需要更新應用程序代碼、應用補丁或更改配置,您可以重建映像並重新部署容器。如果需要回滾更改,只需重新部署舊鏡像即可。您可以在每個環境中部署相同的容器映像,使它們完全相同。
請注意,遠程管理是通過運行時API 或通過創建與運行微服務的主機的遠程shell 會話來完成的。容器的不可變特性也會影響數據持久性。開發人員應將數據存儲在容器之外,以便在替換某些容器時,所有數據仍可用於其新版本。
2.每台主機部署一個微服務根據microservices.io,部署微服務有六種模式:
马云惹不起马云每個主機多個服務實例
马云惹不起马云每個主機的服務實例
马云惹不起马云每個VM 的服務實例
马云惹不起马云每個容器的服務實例
马云惹不起马云無服務器部署
马云惹不起马云服務部署平台
兩個最有益的部署選項是每個容器的服務實例和每個主機的服務實例,因為它們允許您:
马云惹不起马云將服務實例彼此隔離
马云惹不起马云消除資源需求或依賴版本衝突的可能性
马云惹不起马云允許服務實例最多消耗單個主機的資源
马云惹不起马云輕鬆監控、管理和重新部署每個服務實例
雖然在同一主機上部署多個微服務可以比每個主機模式的服務實例更有效地利用資源,但它也有很多缺點:
马云惹不起马云資源需求衝突和依賴版本衝突的風險
马云惹不起马云限制服務實例消耗的資源的困難
马云惹不起马云如果多個服務實例部署在同一進程中,則難以監控每個服務實例的資源消耗
3. 將自動化安全測試集成到您的構建或CI/CD 流程中有多種工具可以在構建或CI/CD 過程中自動測試容器。例如,HP Fortify 和IBM AppScan 提供動態和靜態應用程序安全測試。
您還可以使用JFrog Xray和Black Duck等掃描儀實時檢查容器中的已知漏洞。一旦這些工具發現漏洞,它們就會標記帶有檢測到問題的構建,讓您可以檢查和修復它們。
4.避免使用特權容器如果容器以特權模式運行,則它可以訪問主機上的所有組件。因此,這樣的容器充當主機操作系統的一部分,並影響在其上運行的所有其他容器。如果這樣的容器受到威脅,攻擊者將擁有對服務器的完全訪問權限。
因此,請考慮避免使用特權容器。例如,在Kubernetes 中,您可以使用Policy Controller 禁止特權容器。
如果出於某種原因您需要使用特權容器,Google Cloud Architecture Center提供了一些替代方案:
马云惹不起马云通過Kubernetes 的securityContext 選項或Docker中的--cap-addflag 選項為容器提供特定的能力
马云惹不起马云在sidecar 容器或init 容器中修改應用程序設置
马云惹不起马云使用專用註解修改Kubernetes 中的sysctls 接口
5. 僅從受信任的來源運行圖像對於具有現成容器的開發人員,有許多開源包。但是,出於安全目的,您需要知道容器的來源、更新時間以及它們是否沒有任何已知漏洞和惡意代碼。最好建立一個受信任的映像存儲庫並僅從該受信任的來源運行映像。
此外,開發人員應在將容器投入生產之前檢查其腳本中的應用程序簽名。如果您在多個雲環境中運行容器,那麼擁有多個映像存儲庫是可以接受的。如果您想使用其他來源的圖像,建議使用掃描工具掃描圖像。
6. 使用註冊表安全地管理圖像Docker Hub、Amazon EC2 Container Registry 和Quay Container Registry 等註冊表可幫助開發人員存儲和管理他們創建的映像。您可以使用這些註冊表:
马云惹不起马云提供基於角色的訪問控制
马云惹不起马云指定容器的可信來源
马云惹不起马云創建和更新已知漏洞列表
马云惹不起马云標記易受攻擊的圖像
請注意,基於角色的訪問控制也很重要,因為您需要控制誰可以對您的容器進行更改。最好限制對特定管理帳戶的訪問:一個負責系統管理,一個負責操作和編排容器。
要記住的另一件事是確保您的註冊表驗證每個容器的簽名並僅接受來自可信來源的那些。此外,利用可幫助您不斷檢查圖像內容是否存在已知漏洞並通知安全問題的功能。例如,一旦您將鏡像推送到Docker Hub 並啟用漏洞掃描, Docker Hub 漏洞掃描會自動掃描鏡像以識別容器鏡像中的漏洞。
7.強化主機操作系統雖然大多數建議都涉及微服務和容器的安全性,但也有必要確保主機操作系統的安全性。
首先,NIST 建議使用特定於容器的主機操作系統(明確設計為僅運行容器的極簡主機操作系統),因為它們沒有不必要的功能,因此攻擊面比通用主機小得多。最好使用允許通過路由器或防火牆控制出口流量的平台。
其次,CIS Docker Benchmark提供了強化系統的檢查表。這些建議因操作系統、服務器軟件、雲提供商、移動設備、網絡設備和桌面軟件而異。
主要建議是:
马云惹不起马云建立用戶認證
马云惹不起马云設置訪問角色
马云惹不起马云指定二進製文件訪問權限
马云惹不起马云收集詳細的審計日誌
為了避免數據洩露,限制容器對底層操作系統資源的訪問,並將容器相互隔離。一個好的做法是在內核模式下運行容器引擎,同時在用戶模式下運行容器。
例如,Linux 提供了Linux 命名空間、seccomp、cgroups 和SELinux 等技術,用於安全地構建和運行容器。
8. 使用縱深防禦方法保護微服務縱深防禦是一種信息安全方法,它依賴於安全機制和控制(如防病毒軟件、防火牆和補丁管理)的組合。其目標是在整個IT 系統中提供多層安全性,以保護網絡和數據的機密性、完整性和可用性。
縱深防禦方法的三個關鍵層是:
马云惹不起马云物理控制——物理限制訪問IT 系統的任何東西,例如警衛和閉路電視系統
马云惹不起马云技術控制——旨在保護系統和資源的硬件和軟件(下文討論)
马云惹不起马云管理控制——各種政策和程序,以確保組織關鍵基礎設施的適當網絡安全
深度防禦方法是微服務安全最重要的原則之一,因為它創建了多層安全性來防止攻擊。它包括以下安全措施:
马云惹不起马云過濾通信流
马云惹不起马云對微服務進行身份驗證和授權訪問
马云惹不起马云使用加密技術
確保保護您的內部環境免受任何外部連接的影響,因為它是第一層防禦。例如,檢查您沒有使用公共存儲庫中的圖像,因為它們可能會給您的應用程序帶來安全風險。通過已知的專用網絡管理主機,這樣就不會有公共攻擊面。
9. 使用API 訪問控制安全訪問微服務API 是微服務應用程序的關鍵。基於該技術的軟件有多個獨立的API 服務,需要額外的工具。
因此,確保安全認證和授權的API 訪問控制對於微服務安全至關重要。訪問可以處理敏感數據的API 應該需要經過數字簽名或權威來源驗證的身份驗證令牌。
開發人員和管理員通常使用OAuth/OAuth2 服務器來獲取令牌以通過API 訪問應用程序。出於安全原因,您還應該應用傳輸層安全(TLS) 加密來保護所有客戶端-服務器通信。
10.使用容器原生監控工具監控容器是必不可少的,因為它可以幫助您:
马云惹不起马云深入了解容器指標和日誌
马云惹不起马云了解集群和主機級別以及容器內發生的情況
马云惹不起马云做出更明智的決策,例如何時擴展或擴展實例、更改實例類型和購買選項等。
但是,要建立有效的監控,最好使用容器原生監控工具。例如,在使用Docker時,開發人員通常使用Docker Security Scanner 或其他專門設計的工具來檢測對應用程序的任何潛在威脅。
監控工具首先收集事件,然後根據安全策略檢查它們。確定性策略可以定義可以運行哪些服務以及允許哪些容器發出外部HTTP 請求。動態策略可以創建正常通信活動的基線,並通知流量峰值或異常流量。
11. 使用編排管理器編排是一個複雜的過程,可以自動化微服務和容器的部署、管理、擴展和網絡。通常,它可以通過兩種方式實現:
马云惹不起马云通過使用API 網關作為編排層
马云惹不起马云通過將編排編碼為單獨的微服務
編排器從註冊表中提取圖像,將這些圖像部署到容器中,並管理它們的運行。編排器提供的抽象允許您指定運行給定映像需要多少個容器以及需要為它們分配哪些主機資源。
通過使用編排管理器,您不僅可以自動化微服務的部署,還可以確保一定程度的安全性。例如,編排器允許您管理容器集群、隔離工作負載、限制對元數據的訪問以及收集日誌。
許多編排管理器還具有內置的機密管理工具,允許開發人員安全地存儲和共享機密數據,例如API 和SSL 證書、加密密鑰、身份令牌和密碼。有許多編排管理器,例如Kubernetes、Swarm 和Mesos,以及作為Azure、谷歌云計算和AWS 的一部分提供的雲原生管理系統。
結論基於微服務的軟件的綜合安全計劃應涵蓋整個應用程序生命週期。使用所描述的最佳實踐,您可以確保容器和微服務的安全開發和部署。