DevSecOps 也稱為 Secure DevOps,可藉由將安全性納入傳統 DevOps 生命週期的不同階段,以 DevOps 的做法為基礎。 在 DevOps 實務中建置安全性的一些優點包括:
- 藉由提供安全性威脅的可見度並防止弱點到達已部署的環境,讓您的應用程式和系統更安全
- 使用您的開發和作業小組提高安全性意識
- 將自動化安全性程式併入軟體開發生命週期
- 在開發和設計階段早期尋找安全性問題,以降低成本以進行補救
當 DevSecOps 套用至 Azure Kubernetes Service (AKS)時,不同的組織角色可以有不同的考慮來實作安全性。 這些不同組織角色的範例包括:
- 建置在 AKS 上執行的安全應用程式的開發人員
- 雲端工程師建置安全的 AKS 基礎結構
- 可能控管叢集或監視安全性問題的各種作業小組
本文分成不同的 DevOps 生命週期階段,其中包含內嵌安全性控件和安全性最佳做法的考慮和建議。 本指南包含一般程式和工具,可納入持續整合和持續傳遞 (CI/CD) 管線,並選擇要在可用的情況下輕鬆使用的內建工具。
作為本文的必要條件,建議您檢閱 使用DevOps和 GitOps 在 AKS 上建置和部署應用程式。
程序流程
注意
雖然本文參考 AKS 和 GitHub,但這些建議適用於任何容器協調流程或 CI/CD 平臺。 雖然實作詳細數據可能會有所不同,但每個階段中提及的大部分概念和做法仍然相關且適用。
- Microsoft Entra ID 會設定為 GitHub 的識別提供者。 設定多重要素驗證 (MFA), 以協助提供額外的驗證安全性。
- 開發人員使用 Visual Studio Code 或 Visual Studio ,並啟用安全性延伸模組,主動分析其程式代碼是否有安全性弱點。
- 開發人員將應用程式程式代碼認可至公司擁有且受控的 GitHub Enterprise 存放庫。
- GitHub Enterprise 會透過 GitHub 進階安全性整合自動安全性和相依性掃描。
- 提取要求會透過 GitHub Actions 觸發持續整合 (CI) 組建和自動化測試。
- 透過 GitHub Actions 的 CI 建置工作流程會產生儲存至 Azure Container Registry 的 Docker 容器映像。
- 您可以在 GitHub Actions 中的持續傳遞 (CD) 工作流程中,為部署引入手動核准,例如生產環境。
- GitHub Actions 會啟用 CD 到 AKS。 使用 GitHub 進階安全性來偵測應用程式來源和組態檔中的秘密、認證和其他敏感性資訊。
- Microsoft Defender 可用來掃描 Azure Container Registry、AKS 叢集和 Azure 金鑰保存庫 是否有安全性弱點。
- Azure 原則 可以套用至 Container Registry 和 Azure Kubernetes Service (AKS),以符合原則和強制執行。 容器登錄和 AKS 的常見安全策略是內建的,可快速啟用。
- Azure 金鑰保存庫 可用來在運行時間安全地將秘密和認證插入應用程式,並將敏感性資訊與開發人員分開。
- AKS 網路原則引擎已設定為使用 Kubernetes 網路原則協助保護應用程式 Pod 之間的流量。
- 您可以使用 Azure 監視器和容器深入解析來擷取效能計量並分析應用程式和安全性記錄,來設定 AKS 叢集的持續監視。
- 容器深入解析會擷取效能計量和應用程式和叢集記錄。
- 診斷和應用程式記錄會提取至 Azure Log Analytics 工作區,以執行記錄查詢。
- Microsoft Sentinel 是安全性資訊和事件管理 (SIEM) 解決方案,可用來根據定義的模式和規則,內嵌及進一步分析 AKS 叢集記錄檔中是否有任何安全性威脅。
- Zed 攻擊 Proxy (ZAP) (ZAP) 等開放原始碼工具可用來對 Web 應用程式和服務執行滲透測試。
- 適用於 DevOps 的 Defender 是 適用於雲端的 Defender 中可用的服務,可讓安全性小組跨多管線環境管理 DevOps 安全性,包括 GitHub 和 Azure DevOps。
小組成員概觀和責任
請考慮在 Kubernetes 型解決方案部署上管理 DevSecOps 的複雜性,以區分考慮。 企業環境中的哪一個小組應該關注部署的每個層面? 小組應該採用哪些工具和程式,以獲得最佳目標? 在本節中,我們將討論開發人員、應用程式操作員(網站可靠性工程師)、叢集操作員和安全性小組的共同角色。
開發人員
開發人員負責撰寫應用程式程序代碼。 他們也會負責將程式代碼認可至指定的存放庫。 開發人員的其中一項重要責任也包括撰寫和執行腳本以進行自動化測試,以確保其程式代碼如預期般運作,並與應用程式的其餘部分緊密整合。 它們也會定義和編寫容器映射建置腳本,作為自動化管線的一部分。
應用程式操作員(網站可靠性工程師)
使用容器和 Kubernetes 在雲端上建置應用程式可以簡化應用程式開發、部署和延展性。 但這些開發方法也會建立日益分散的環境,使系統管理複雜。 網站可靠性工程師會建置解決方案,以自動化大型軟體系統的監督。 它們可作為開發與叢集操作員小組之間的橋樑,並協助建立和監視服務等級目標和錯誤預算。 如此一來,它們可協助管理應用程式部署,而且通常會撰寫 Kubernetes 指令清單 (YAML) 檔案。
叢集運算子
叢集操作員負責設定和管理叢集基礎結構。 他們通常會使用基礎結構即程序代碼 (IaC) 最佳做法和架構,例如 GitOps 來佈建和維護其叢集。 他們會使用各種監視工具,例如 Azure 監視器容器深入解析和 Prometheus/Grafana 來監視整體叢集健康情況。 他們會負責修補、叢集升級、許可權和叢集上的角色型訪問控制。 在 DevSecOps 小組中,他們會確保叢集符合小組的安全性需求,並與安全性小組合作以建立這些標準。
安全性小組
安全性小組負責開發安全性標準並加以強制執行。 某些小組可能會負責建立和選取在持有叢集的訂用帳戶和資源群組中強制執行的 Azure 原則。 他們會監視安全性問題,並與其他小組一起,確保安全性在 DevSecOps 程式的每個步驟中都處於最前沿。
DevSecOps 生命周期階段
安全性控制會在軟體開發生命週期(SDLC)的每個階段實作。 此實作是 DevSecOps 策略和左移方法的重要部分。
計劃階段
計劃階段通常具有最少的自動化程度,但具有重要的安全性影響,可大幅影響後續的 DevOps 生命周期階段。 此階段牽涉到安全性、開發和作業小組之間的共同作業。 在這個設計和規劃階段中包含安全性項目關係人,可確保適當考慮或減輕安全性需求和安全性問題。
最佳做法 – 設計更安全的應用程式平臺
從平臺本身開始,建置更安全的 AKS 裝載平臺是協助確保安全性內建在每一層系統的重要步驟。 平臺可以包含叢集內部的元件(例如運行時間安全性和原則代理程式),以及 AKS 外部的元件(例如網路防火牆和容器登錄)。 如需詳細資訊,請參閱 AKS 登陸區域加速器,其中包含重要的設計區域,例如安全性、身分識別和網路拓撲。
最佳做法 – 在程式中建置威脅模型
- 威脅模型化通常是牽涉到安全性和開發小組的手動活動。 它用來在系統內建立威脅模型並尋找威脅,以便在任何程式代碼開發或變更系統之前解決弱點。 威脅模型化可能會在不同的時間發生,由重大軟體變更、解決方案架構變更或安全性事件等事件觸發。
- 建議您使用 STRIDE 威脅模型。 此方法從數據流程圖開始,並使用 STRIDE 助記鍵(詐騙、竄改、資訊洩漏、拒絕、拒絕服務及提高許可權)威脅類別,讓小組能夠識別、減輕和驗證風險。 它也包含模型 化工具 ,可指出及可視化系統元件、數據流和安全性界限。 在 SDLC 流程中建置威脅模型會引進新的程式,並讓更多工作來維護更新的威脅模型。 但它有助於確保安全性提前到位,這有助於降低在後續 SDLC 階段中發現的安全性問題的潛在成本。
最佳做法 – 套用 Azure Well Architect Framework (WAF)
- 套 用 WAF 安全性要素 最佳做法,針對身分識別管理、應用程式安全性、基礎結構保護、日期安全性和 DevOps 等專案提供指引,因為它適用於雲端原生環境。
- 套 用 WAF 操作 最佳做法,因為它適用於 DevSecOps 和監視生產環境。
開發階段
「左移」是DevSecOps思維的重要租使用者。 此程式會在程式代碼甚至認可至存放庫並透過管線部署之前開始。 採用安全編碼最佳做法,並在開發階段期間使用IDE工具和外掛程式進行程式碼分析,有助於在開發生命週期中較容易修正時,解決稍早的安全性問題。
最佳做法 - 強制執行安全編碼標準
- 藉由使用已建立的安全編碼最佳做法和檢查清單,您可以協助保護您的程式代碼免於常見的弱點,例如插入和不安全的設計。 OWASP 基礎會發佈撰寫程式代碼時應採用的業界標準安全編碼建議。 開發公開的 Web 應用程式或服務時,這些指導方針特別重要。
- 除了一般安全性最佳做法之外,您也應該查看特定程式設計語言運行時間的安全編碼作法,例如 Java 和 .NET。
- 您可以強制執行記錄標準,以保護敏感性資訊免於洩漏到應用程式記錄中。 最常見的記錄架構,例如log4j和log4net,提供篩選和外掛程式來遮罩敏感性資訊,例如帳戶號碼或個人資料。
最佳做法 – 使用 IDE 工具和外掛程式將安全性檢查自動化
最受歡迎的 IDE,例如 Visual Studio、Visual Studio Code、IntelliJ IDEA 和 Eclipse,可支援擴充功能,讓您在撰寫應用程式程式代碼時,針對可能引進的潛在安全性問題取得立即意見反應和建議。
- SonarLint 是一種 IDE 外掛程式,適用於最熱門的語言和開發人員環境。 SonarLint 提供寶貴的意見反應,並自動掃描程式代碼中常見的程式設計錯誤和潛在的安全性問題。
- 其他免費和商業外掛程式著重於安全性特定專案,例如 OWASP 前 10 個常見弱點。 例如,Synk 外掛程式也會掃描您的應用程式來源和第三方相依性,並在發現任何弱點時警示您。
- Visual Studio 和 Visual Studio Code 的 靜態分析結果交換格式 (SARIF) 外掛程式可讓您以直覺且容易閱讀的方式,輕鬆地檢視熱門靜態應用程式安全性測試 (SAST) 工具的弱點,以及解譯原始 JSON 輸出檔案的結果。
最佳做法 – 在您的原始程式碼存放庫上建立控制件
- 建立分支方法,以便在整個企業中使用一致的分支。 發行流程和 GitHub 流程等方法有結構化指導方針,說明應該如何使用分支來支援小組和平行開發。 這些方法可協助小組建立程式碼認可和合併至 CI/CD 工作流程的標準和控件。
- 某些分支,例如 main,是長期分支,可保留應用程式原始程式碼的完整性。 這些分支應該已建立合併原則,才能將變更合併或認可到其中。 一些最佳做法包括:
- 防止其他開發人員將程式代碼直接認可到您的主要分支。
- 建立對等檢閱程式,並且需要最少的核准數目,才能將變更合併至主要分支。 您可以使用 GitHub 輕鬆地設定及強制執行這些控制件。 GitHub 也可讓您視需要為閘道環境指定授權核准者群組。
- 使用 預先認可攔截 來檢查應用程式原始程式碼內的敏感性資訊,並在發現安全性問題時防止認可發生。
- 使用 GitHub 提供的內建預先認可攔截,可以輕鬆地針對特定項目進行設定。 例如,有預先建置的勾點可掃描秘密、私鑰和認證,並在找到這些問題時防止認可。
- 在您的版本控制系統內建立角色型訪問控制。
- 使用最低許可權原則建立定義完善的角色。 CI/CD 管線是生產部署的供應鏈。
- 在您的組織內套用已建立的使用者或群組 角色 。 必須建立 管理員、開發人員、安全性系統管理員和操作員等角色,根據個人關於 CI/CD 工作流程的特定角色和功能來分組個人。
- 啟用 工作流程的稽核 ,以便針對 CI/CD 管線的設定和其他變更提供透明度和可追蹤性。
最佳做法 – 保護您的容器映射
- 使用具有最小 OS 使用量的羽量型映像,以減少整體表面攻擊區域。 請考慮最少的影像,例如 Alpine 或甚至是只包含您的應用程式及其相關聯運行時間的散發映像。 Microsoft 開放原始碼 Linux 散發套件是一種輕量型、強化的散發套件,專為 AKS 設計來裝載容器化工作負載。
- 建置容器時,只使用受信任的基底映像。 應該從經常掃描弱點的私人登錄擷取這些基底映像。
- 使用開發人員工具在本機評估映像弱點。
- Trivy 是開放原始碼工具的範例,可用來分析容器映像內的安全性弱點。
- 防止影像的根使用者存取/內容。 根據預設,容器會以 root 身分執行。
- 針對需要增強安全性的容器,請考慮在 Kubernetes 叢集中使用 AppArmor 配置檔,以進一步協助強制執行執行中容器的安全性。
建置階段
在建置階段,開發人員會與網站可靠性工程師和安全性小組合作,在 CI 組建管線中整合應用程式來源的自動化掃描。 管線設定為使用 CI/CD 平臺的安全性工具和延伸模組來啟用安全性做法,例如 SAST、SCA 和秘密掃描。
最佳做法 – 執行靜態程式代碼分析 (SAST) 以找出應用程式原始碼中的潛在弱點
- 使用 GitHub 進階安全性掃描功能進行程式代碼掃描和 CodeQL。
- 使用 kube 分數之類的工具來分析 Kubernetes 部署物件。
- kube-score 是一種工具,可對 Kubernetes 物件定義執行靜態程式代碼分析。
- 輸出是一份建議清單,說明您可以改善哪些專案,以協助讓您的應用程式更安全且具有復原性。
最佳做法 – 執行秘密掃描,以防止不小心對存放庫認可的秘密進行詐騙使用
- 針對存放庫啟用秘密掃描時,GitHub 會掃描程式代碼中是否有符合許多服務提供者所使用秘密的模式。
- GitHub 也會定期執行存放庫中現有內容的完整 Git 歷程記錄掃描,並傳送警示通知。
- 針對 Azure DevOps,適用於雲端的 Defender 會使用秘密掃描來偵測原始程式碼和組建輸出中的認證、秘密、憑證和其他敏感性內容。
- 秘密掃描可以作為 Microsoft Security DevOps for Azure DevOps 延伸模組的一部分執行。
最佳做法 – 使用軟體組合分析 (SCA) 工具來追蹤程式代碼基底中的開放原始碼元件,並偵測相依性中的任何弱點
- 相依性檢閱 可讓您在將不安全的相依性引入環境之前攔截不安全的相依性,並提供相依性授權、相依性和存留期的相關信息。 它會在提取要求的 [檔案變更] 索引標籤上,提供容易理解的相依性變更視覺效果,並具有豐富的差異。
- Dependabot 會執行掃描來偵測不安全的相依性,並在將新的諮詢新增至 GitHub Advisory Database 或存放庫相依性圖表變更時傳送 Dependabot 警示。
最佳做法 – 啟用基礎結構即程序代碼 (IaC) 範本的安全性掃描,以將到達生產環境的雲端設定錯誤降到最低
- 在開發生命週期中主動監視雲端資源設定。
- 適用於 DevOps 的 Microsoft Defender 同時支援 GitHub 和 Azure DevOps 存放庫。
最佳做法 – 掃描容器登錄中的工作負載映射,以識別已知的弱點
- 適用於容器 的 Defender 會掃描 Container Registry 和 Amazon AWS Elastic Container Registry (ECR) 中的容器,以通知您映像中是否有已知的弱點。
- 您可以啟用 Azure 原則,對儲存在 Container Registry 中的所有映像執行弱點評估,並提供每個尋找的詳細資訊。
最佳做法 – 在基底映射更新上自動建置新的映像
- Azure Container Registry 工作 會在建置容器映射時動態探索基底映射相依性。 因此,ACR 工作能偵測應用程式映像的基底映像何時更新。 使用一個預先設定的建置工作,Container Registry 工作可以自動重建參考基底映射的每個應用程式映像。
最佳做法 – 使用 Container Registry、Azure 金鑰保存庫 和表示法,以數位方式簽署容器映像,並將 AKS 叢集設定為只允許已驗證的映像
- Azure 金鑰保存庫 會儲存簽署密鑰,可透過表示法搭配表示法 金鑰保存庫 外掛程式 (azure-kv) 來簽署和驗證容器映像和其他成品。 Container Registry 可讓您使用 Azure CLI 命令來附加這些簽章。
- 已簽署的容器可讓用戶確定部署是從受信任的實體建置,並確認自建立成品后尚未遭到竄改。 簽署的成品可確保使用者將成品提取到任何環境中之前的完整性和真實性,這有助於避免攻擊。
- 「批准」 可讓 Kubernetes 叢集在部署之前驗證成品安全性元數據,並只接受符合您所建立許可原則的部署。
部署階段
在部署階段,開發人員、應用程式操作員和叢集操作員小組會共同合作,為持續部署 (CD) 管線建立正確的安全性控制,以更安全且自動化的方式將程式代碼部署至生產環境。
最佳做法 – 控制部署管線的存取和工作流程
- 您可以藉由設定分支保護規則來保護重要的分支。 這些規則會定義共同作業者是否可以刪除或強制推送至分支。 它們也會設定任何推送至分支的需求,例如傳遞狀態檢查或線性認可歷程記錄。
- 藉由使用 環境 進行部署,您可以使用保護規則和秘密來設定環境。
- 您可以利用 核准 和 Gates 功能來控制部署管線的工作流程。 例如,在部署至生產環境之前,您可以要求安全性或作業小組進行手動核准。
最佳做法 – 保護部署認證
- OpenID 連線 (OIDC) 可讓您的 GitHub Action 工作流程存取 Azure 中的資源,而不需要將 Azure 認證儲存為長期存在的 GitHub 秘密。
- 藉由使用環境進行部署,您可以使用保護規則和秘密來設定環境。
- 使用 GitOps 進行 CI/CD 的提取式方法可讓您將安全性認證轉移到 Kubernetes 叢集,藉由移除認證以將認證儲存在外部 CI 工具中,藉以降低安全性和風險表面。 您也可以減少允許的輸入連線,並限制 Kubernetes 叢集的系統管理層級存取權。
最佳做法 – 執行動態應用程式安全性測試 (DAST) 以找出執行中應用程式的弱點
最佳做法 – 僅從信任的登錄部署容器映射
- 使用適用於容器的 Defender 來啟用 Kubernetes 的 Azure 原則 附加元件。
- 啟用 Azure 原則,讓容器映射只能從受信任的登錄部署。
操作階段
在此階段中,會執行作業監視和安全性監視工作,以主動監視、分析和警示潛在安全性事件。 Azure 監視器和 Microsoft Sentinel 等生產可觀察性工具可用來監視並確保符合企業安全性標準。
最佳做法 – 使用適用於雲端的 Microsoft Defender 來啟用生產設定的自動化掃描和監視
- 執行持續掃描,以偵測應用程式弱點狀態的漂移,並實作修補和取代易受攻擊映像的程式。
- 實作操作系統的自動化組態監視。
- 使用 適用於雲端的 Microsoft Defender 容器建議(在 [計算和應用程式] 區段下)為您的 AKS 叢集執行基準掃描。 在找到設定問題或弱點時,於 適用於雲端的 Microsoft Defender 儀錶板中收到通知。
- 使用 適用於雲端的 Microsoft Defender 並遵循其網路保護建議,協助保護 AKS 叢集所使用的網路資源。
- 針對儲存在 Container Registry 中的映像進行弱點評估。
- 啟用適用於容器的 Defender,以在 Container Registry 中實作執行中映射的持續掃描。
最佳做法 – 讓您的 Kubernetes 叢集保持更新
- Kubernetes 版本會經常推出。 請務必備妥生命週期管理策略,以確保您不會落後並脫離支援。 AKS 是受控供應專案,可提供您管理此升級程式的工具和彈性。 您可以使用 AKS 平台的計劃性維護功能,更充分掌控維護時段和升級。
- AKS 背景工作節點應該 更頻繁地 升級。 我們提供每周操作系統和運行時間更新,這些更新可透過自動模式或透過 Azure CLI 自動套用,以取得更多控制和完整的更新。
最佳做法 – 使用 Azure 原則 來保護及控管您的 AKS 叢集
- 安裝適用於 AKS 的 Azure 原則 附加元件之後,您可以將稱為計劃(也稱為原則集)的個別原則定義或原則定義群組套用至叢集。
- 針對常見案例使用 內建的 Azure 原則,例如防止特殊許可權容器執行或只核准已列出的外部 IP。 您也可以針對特定使用案例建立自定義原則。
- 將原則定義套用至您的叢集,並確認正在強制執行這些指派。
- 使用 Gatekeeper 設定許可控制器,以根據指定的規則允許或拒絕部署。 Azure 原則 擴充 Gatekeeper。
- 使用 AKS 中的網路原則來保護工作負載 Pod 之間的流量。
- 安裝網路原則引擎並建立 Kubernetes 網路原則 ,以控制 AKS 中 Pod 之間的流量。 網路原則可用於 AKS 中以 Linux 為基礎的或以 Windows 為基礎的節點和 Pod。
最佳做法 – 使用 Azure 監視器進行持續監視和警示
- 使用 Azure 監視器從 AKS 收集記錄和計量。 您可以深入瞭解應用程式和基礎結構的可用性和效能。 它也可讓您存取訊號來監視解決方案的健康情況,並提早發現異常活動。
- 使用 Azure 監視器持續監視可延伸至根據監視數據將管線發行至閘道或復原版本。 Azure 監視器也會擷取安全性記錄,並可針對可疑活動發出警示。
- 將您的 AKS 實例上線至 Azure 監視器,並設定叢集的診斷設定。
- 請參閱 Azure Kubernetes Service 的 Azure 安全性基準。
最佳做法 – 使用 適用於雲端的 Microsoft Defender 進行主動威脅監視
- 適用於雲端的 Microsoft Defender 針對節點層級的 AKS 和內部環境提供主動式威脅監視。
- 適用於 DevOps 的 Defender 應用於完整的可見度,並提供安全性與操作員小組,併為您的所有 CI/CD 管線提供集中式儀錶板。 如果您使用 Azure DevOps 和 GitHub 等多管線平臺,或跨公用雲端執行管線,這項功能特別有用。
- 適用於 金鑰保存庫的 Defender 可用來偵測異常、可疑的存取密鑰保存庫帳戶嘗試,並根據設定警示系統管理員。
- 適用於容器的Defender可以警示儲存在 Container Registry 上容器映像內的弱點。
最佳做法 – 啟用集中式記錄監視,並使用 SIEM 產品來監視即時安全性威脅
- 連線 AKS 診斷記錄至 Microsoft Sentinel,以根據模式和規則進行集中式安全性監視。 Sentinel 可透過 數據連接器順暢地啟用此存取。
最佳做法 – 啟用稽核記錄以監視生產叢集上的活動
- 使用活動記錄來監視 AKS 資源的動作,以檢視所有活動及其狀態。 判斷資源上執行哪些作業,以及由誰執行。
- 在 CoreDNS 自定義 ConfigMap 中套用記載的設定,以啟用 DNS 查詢記錄 。
- 監視嘗試存取已停用的認證。
- 整合 AKS 的用戶驗證與 Microsoft Entra ID。 建立 Microsoft Entra 識別碼的診斷 設定,並將稽核和登入記錄傳送至 Azure Log Analytics 工作區。 在 Azure Log Analytics 工作區中設定所需的警示(例如停用的帳戶嘗試登入時)。
最佳做法 – 在您的 Azure 資源上啟用診斷
- 藉由在所有工作負載的資源上啟用 Azure 診斷,您可以存取平台記錄,以提供 Azure 資源的詳細診斷和稽核資訊。 這些記錄可以擷取至Log Analytics或SIEM解決方案,例如 Microsoft Sentinel,以進行安全性監視和警示。
參與者
本文由 Microsoft 維護。 原始投稿人如下。
主體作者:
- Adnan Khan | Sr. Cloud Solution Architect
其他投稿人:
- Ayobami Ayodeji |Program Manager 2
- Ahmed Bham | Sr. Cloud Solution Architect
- 查德·基特爾 |首席軟體工程師
- John Poole | Sr. Cloud Solution Architect
- Bahram Rushenas | Sr. 解決方案架構師
- Abed Sau | Sr. 雲端解決方案架構師