安全性應一律是雲端式開發平臺的優先順序,例如 Azure DevOps 和 GitHub。 Microsoft更新並維護基礎雲端基礎結構的安全性,但您必須檢閱及設定您自己的 Azure DevOps 組織和 GitHub 實例的安全性最佳做法。
無論您透過基礎結構部署環境作為持續整合和持續部署 (CI/CD) 管線中的程式碼,或將程式代碼部署至裝載於 Azure 中的應用程式,請考慮下列重要安全性領域。
限制對 DevOps 工具的存取
透過 Microsoft Entra 識別符,使用角色型訪問控制 (RBAC) 遵循最低許可權原則。 為使用者和服務提供他們執行其商務功能所需的最低 DevOps 平臺存取量。 如需詳細資訊,請參閱下列文章:
- 將您的組織連接到 Microsoft Entra ID
- Microsoft Entra 單一登入(SSO)與 GitHub Enterprise Cloud 的整合
- Azure DevOps 安全性最佳做法
建立Microsoft Entra標識符作為身分識別管理平面之後,請遵循最佳做法,以 使用 Microsoft Entra 群組成員資格來管理 Azure DevOps 角色指派。 您可以將 Azure DevOps 角色指派給 Microsoft Entra 群組,並調整使用者的 Microsoft Entra 成員資格來變更或移除其 Azure DevOps 存取權。
使用Microsoft Entra ID 權利管理 來建立存取套件,以允許Microsoft Entra 使用者對必要資源進行時間限制存取,以完成其工作。
您也可以使用Microsoft Entra Privileged Identity Management 進行 Just-In-Time 存取,將個人提升至 Azure DevOps Administrator 角色一段時間。
使用 Azure DevOps 組織、專案或物件層級的安全組、原則和設定來管理 Azure DevOps 中的安全性。 請考慮盡可能在 Azure DevOps 中停用許可權繼承。
限制存放庫和分支存取
限制存放庫存取、許可權和分支建立,以保護您的程式代碼和環境免於遭受不想要或惡意的變更。 在 Azure DevOps 中使用安全組來限制對存放庫 的存取。 藉由設定 分支許可權來限制誰可以讀取和更新分支中的程序代碼。
限制管線存取和許可權
惡意代碼可能會竊取企業數據和秘密,以及損毀的生產環境。 實作防護措施,以防止管線中的惡意代碼部署。 藉由限制存取和實作護欄,您也可以防止從任何遭入侵的管線橫向暴露至其他專案、管線和存放庫。
請考慮遵循累加方法來保護您的 YAML 管線。 如需詳細資訊,請參閱 規劃如何保護您的 YAML 管線。
根據安全性需求選取 DevOps 代理程式
您可以使用Microsoft裝載或自我裝載的代理程式來提供 Azure DevOps 和 GitHub 管線。 每種代理程式類型都有取捨。
使用Microsoft裝載的代理程式,您不需要擔心升級或維護。 透過自我裝載的代理程式,您可以有更大的彈性來實作安全性防護。 您可以控制代理程式硬體、作業系統和已安裝的工具。 自行託管代理也能提供私有網路存取,以訪問在防火牆或虛擬網路後方的資源。
請參閱 Azure Pipelines 代理程式,以檢閱代理程式 類型之間的差異,並找出潛在的安全性考慮。
使用安全且限定範圍的服務身份
對於 GitHub、Azure DevOps 或第三方 CI/CD 平台,請使用安全且有範圍的身份來部署程式碼與基礎設施到 Azure 環境。
- Entra ID 中可以使用使用者指派的受管理身份或應用程式註冊(服務主體)。 千萬不要使用使用者帳號。
- 實施 OpenID Connect(工作負載身份聯盟) 認證,並使用聯邦憑證來驗證身份。 切勿使用客戶端秘密或憑證。
- 為每個部署的應用程式和環境建立獨立身份,確保能套用細緻的權限。
- 為唯讀操作(如 Terraform 計畫或 Bicep 假設)建立每個應用程式與環境的獨立身份。
- 將身份權限範圍限定為部署所需的 Azure 訂閱或資源群組。 利用最小權限原則,只為身份分配必要的角色。
- 透過基礎設施即代碼(IaC)在安全的訂閱販賣過程中部署您的身份與聯合憑證。 更多資訊請參閱 「自動化訂閱部署與設定」。
使用者指派的受管理身份由 Azure Resource Manager 管理。 應用程式註冊(服務主體)由 Entra ID 管理。 用戶指派的管理身份更能輕鬆整合到你的訂閱販賣流程,確保當不再需要時,這些身份會與你的其他資源一同停用。
自架代理使用 Azure 運算時,可以直接在代理上使用系統或使用者指派的管理身份。 雖然這種方法可能較為安全,但建議使用 OpenID Connect(工作負載身份聯盟)搭配使用者指派的受管理身份或應用程式註冊(服務主體)以提升彈性與控制。 當你使用計算附加的管理身份時,如果你將多個使用者指派的管理身份附加到代理上,代理上執行的任何程式都能存取這些身份。 通常要在每個應用程式和環境中設置獨立的代理來確保最低權限訪問,這通常代價高昂。
Azure DevOps 身分識別
在 Azure 環境中部署基礎設施或應用程式碼時,務必使用與 OpenID Connect(工作負載身份聯盟)的 服務連線 。 服務連線是在 Azure 中封裝身份的容器。
- 為每個部署的應用程式和環境建立獨立的服務連線與身份,確保能套用細緻的權限。
- 建立服務連結的 核准 。 不要在執行環境中建立這些,因為那樣可以被程式碼繞過。
- 在服務連線上建立 必要的範本 (也稱為受控管管線),以確保惡意程式碼不會在未經批准下被注入。
- 請確保您的身份驗證聯合憑證只限定於服務連線。
- 透過基礎設施即程式碼(IaC)在安全的訂閱販賣流程中部署您的服務連線。 更多資訊請參閱 「自動化訂閱部署與設定」。
範例程式碼與管線可在 Azure DevOps 工作負載身份聯盟 程式碼範例中找到。
GitHub Actions 識別
在 Azure 環境中部署基礎設施或應用程式碼時,務必使用內建的 Actions 或環境變數(工作負載身份聯盟)。
- 為每個部署的應用程式和環境建立身份,確保能套用細緻的權限。
- 在 GitHub Actions 環境中建立審核。
- 更新 主體聲明 ,加入該
environment聲明,以確保你的身份只能在指定的環境中使用。 這確保你的核准程序無法被繞過。 將此聲明加入您的身份聯邦憑證中。 - 更新你的 主體聲明,將
job_workflow_ref(也稱為受控管線)聲明納入,以確保你的身份只能在指定的工作流程範圍內使用。 將此聲明加入您的身份聯邦憑證中。 - 更新你的 主體聲明 以移除
repository並使用repository_owner_id,並repository_id確保你的身份只能在指定的儲存庫範圍內使用,即使它被重新命名。 將此聲明加入您的身份聯邦憑證中。 - 透過基礎設施即代碼(IaC)在安全的訂閱管理過程中更新您的使用者權限。 更多資訊請參閱 「自動化訂閱部署與設定」。
範例程式碼與工作流程可在 GitHub Actions 工作負載身份聯盟 程式碼範例中找到。
使用秘密存放區
務必避免使用秘密,盡可能偏好使用 OpenID Connect(工作負載身份聯盟)或受管理身份。
如果你無法避免使用秘密,千萬不要在程式碼或輔助文件中硬編碼它們。 敵人會掃描存放庫,搜尋公開的機密數據以惡意探索。 設定 Azure 金鑰保存庫 之類的秘密存放區,並參考 Azure Pipelines 中的存放區,以安全地擷取密鑰、秘密或憑證。 如需詳細資訊,請參閱 保護管線和 CI/CD 工作流程。 您也可以在 GitHub Actions 工作流程中使用 金鑰保存庫 秘密。
使用強化的DevOps工作站來建置和部署程式代碼
平台和開發小組通常會在 Azure 平臺上或 Azure DevOps 和 GitHub 等其他服務上提高許可權。 此存取可大幅增加潛在的受攻擊面。 實作護欄來保護您用來開發和部署程式代碼的任何端點和工作站。
使用強化 的安全系統管理工作站 (SAWs) 將任何變更部署至高風險和生產環境。 如需詳細資訊,請參閱使用 零信任 保護端點。
進行安全性掃描和測試
無論您是將應用程式程式代碼或基礎結構部署為程式代碼,請在管線中實 作DevSecOps最佳做法和控制件 。 在 CI/CD 旅程中早期整合安全性,以避免稍後發生成本高昂的安全性缺口。 建立策略,以在管線中實作靜態程序代碼分析、單元測試、秘密掃描和套件/相依性掃描。
適用於雲端的 Microsoft Defender 等企業安全性工具可以與 DevOps 工具整合。 例如,適用於雲端的 Defender 可以在 CI/CD 工作流程中識別易受攻擊的容器映像。 針對 GitHub Actions 和存放庫,使用 GitHub 進階安全性 進行程式代碼和秘密掃描和相依性檢閱。
定期檢閱稽核事件,以監視和響應系統管理員和其他使用者的非預期使用模式。 您可以 存取、篩選和匯出 Azure DevOps 組織的稽核記錄 。 針對長期記憶體和詳細的記錄查詢,請建立 Azure 監視器 Log Analytics 工作區的稽核串流,或建立安全性資訊和事件管理 (SIEM) 系統,例如 Microsoft Sentinel。