SEC06-BP02 從強化的映像佈建運算 - AWS Well-Architected 架構

SEC06-BP02 從強化的映像佈建運算

透過從強化的映像部署,就可減少意外存取執行時期環境的機會。僅從受信任的登錄檔取得執行時期相依項 (例如容器映像和應用程式庫),並驗證其簽章。建立自己的私有登錄檔來儲存受信任的映像和程式庫,以供您的建置和部署程序使用。

預期成果:您的運算資源是從強化的基準映像佈建。您只會從受信任的登錄檔擷取外部相依項 (例如容器映像和應用程式庫),並驗證其簽章。這些都會儲存在私有登錄檔中,以供您的建置和部署程序參考。您會定期掃描和更新映像與相依項,以協助防禦任何新發現的漏洞。

常見的反模式:

  • 從受信任的登錄檔取得映像和程式庫,但未先驗證其簽章或執行漏洞掃描,即逕行使用。

  • 強化映像,但未定期測試映像以確認是否有新的漏洞或更新到最新版本。

  • 安裝或未移除在預期的映像生命週期內不需要的軟體套件。

  • 僅依賴修補來讓實際執行運算資源保持最新狀態。單單是修補就仍有可能導致運算資源在經過一段時間後,偏離強化的標準。修補也可能無法移除威脅行為者在安全事件期間安裝的惡意軟體。

建立此最佳實務的優勢:強化映像有助於減少您的執行時期環境中可能成為未經授權使用者或服務意外存取路徑的數目。此外還能在發生任何意外存取的情況時,縮小影響的範圍。

未建立此最佳實務時的風險暴露等級:

實作指引

若要強化您的系統,請從作業系統、容器映像和應用程式庫的最新版本開始。套用已知問題的修補程式。移除任何不需要的應用程式、服務、裝置驅動程式、預設使用者和其他憑證,藉此盡可能縮減系統規模。採取任何其他必要的行動,例如,停用連接埠以建立只有工作負載所需資源和功能的環境。以此為基準,您就可以安裝用於監控工作負載或管理漏洞等操作所需的軟體、代理程式或其他程序。

您可以使用如 Center for Internet Security (CIS) 和 Defense Information Systems Agency (DISA) 安全技術實作指南 (STIG) 等受信任來源提供的指引來減輕強化系統的負擔。建議您從 AWS 或 APN 合作夥伴發佈的 Amazon Machine Image (AMI) 開始著手,然後以適當的 CIS 和 STIG 控制措施組合為依據,使用 AWS EC2 Image Builder 自動化組態設定。

雖然有許多採用 CIS 或 DISA STIG 建議的強化映像和 EC2 Image Builder 配方可用,但您可能會發現其組態讓您的軟體無法成功執行。在這種情況下,您可以從非強化的基底映像開始著手,安裝您的軟體,然後逐步實施 CIS 控制措施來測試其影響。對於任何讓您的軟體無法順利執行的 CIS 控制措施,請改為測試您是否可在 DISA 中實施更精細的強化建議。持續追蹤您能夠成功實施的不同 CIS 控制措施和 DISA STIG 組態。這些可讓您在 EC2 Image Builder 中用來定義對應的映像強化配方。

對於容器化工作負載,Amazon Elastic Container Registry (ECR) 公有儲存庫上提供了來自 Docker 的強化映像。您可以使用 EC2 Image Builder 搭配 AMI 來強化容器映像。

就如同作業系統和容器映像,您可以透過 pip、npm、Maven 和 NuGet 等工具,從公有儲存庫取得程式碼套件 (或程式庫)。我們建議您藉由整合私有儲存庫 (例如在 AWS CodeArtifact 內) 與受信任的公有儲存庫來管理程式碼套件。此整合可為您處理擷取和儲存套件,以及將套件保持在最新狀態。如此一來,您的應用程式建置程序就能使用像是軟體組成分析 (SCA)、靜態應用程式安全測試 (SAST) 和動態應用程式安全測試 (DAST) 等技術,來取得並測試這些套件的最新版本以及應用程式。

對於使用 AWS Lambda 的無伺服器工作負載,可使用 Lambda 層簡化管理套件相依項的工作。 使用 Lambda 層設定一組跨不同函數共用的標準相依項,並放入獨立的封存中。您可以透過這些層本身的建置程序建立和維護它們,藉由集中處理的方式讓函數保持最新狀態。

實作步驟

  • 強化作業系統。將來自受信任來源的基底映像作為建置強化 AMI 的基礎。使用 EC2 Image Builder 協助您自訂映像上安裝的軟體。

  • 強化容器化資源。設定容器化資源以符合安全最佳實務。使用容器時,在您的建置管道中定期對照映像儲存庫執行 ECR 映像掃描,以在容器中尋找 CVE。 

  • 搭配 AWS Lambda 使用無伺服器實作時,請使用 Lambda 層來隔離應用程式函數程式碼和共用的相依程式庫。為 Lambda 設定程式碼簽署,確保只有受信任的程式碼能夠在您的 Lambda 函數中執行。

資源

相關的最佳實務:

相關影片:

相關範例: