Azure 原則指派的安全部署
隨著您的環境擴展,受控持續部署 (CD) 管線的需求也隨著漸進式曝光控制而增加。 因此,Microsoft 建議 DevOps 小組遵循安全部署做法 (SDP) 架構。 Azure 原則定義和指派的安全部署有助於限制原則資源非預期行為的影響。
使用 Azure 原則實作 SDP 的高階方法,是透過通道來逐步推出原則指派,以偵測出在影響重要雲端基礎結構之前,於早期階段影響環境的原則變更。
部署通道可以透過各種方式進行組織。 在本操作說明教學課程中,通道會除以不同的 Azure 區域,Ring 0 代表非關鍵、低流量的位置,而 Ring 5 表示最重要、最高流量的位置。
使用拒絕或附加效果安全部署 Azure 原則指派的步驟
當我們了解如何將 SDP 架構套用至使用 deny
或 append
原則效果的 Azure 原則指派時,請使用下列流程圖作為參考。
注意
若要深入了解 Azure 原則效果,請參閱了解效果的運作方式。
流程圖步驟編號:
選取原則定義之後,請在包含所有部署通道的最高層級範圍指派原則。 套用 [資源選取器],以使用
"kind": "resource location"
屬性將適用性縮小至最不重要的通道。 使用 [指派覆寫]audit
設定 效果類型。eastUS
位置與效果為audit
的樣本選取器:"resourceSelectors": [{ "name": "SDPRegions", "selectors": [{ "kind": "resourceLocation", "in": [ "eastUS" ] }] }], "overrides":[{ "kind": "policyEffect", "value": "Audit" }]
部署指派並完成初始合規性掃描之後,請驗證合規性結果是否符合預期。
您也應該設定執行合規性檢查的自動化的測試。 合規性檢查應包含下列邏輯:
- 收集合規性結果
- 如果合規性結果符合預期,則管線應該會繼續
- 如果合規性結果不符合預期,則管線應該會失敗,且您應該開始偵錯
例如,您可以使用特定持續整合/持續部署 (CI/CD) 管線中的其他工具來設定合規性檢查。
在每個推出階段,應用程式健康情況檢查應確定服務的穩定性和原則的影響。 如果結果因應用程式組態而未符合預期,請適當地重構應用程式。
展開資源選取器屬性值以包含下一個通道來重複。 位置和驗證預期的合規性結果和應用程式健康情況。 具有新增位置值的範例選取器:
"resourceSelectors": [{ "name": "SDPRegions", "selectors": [{ "kind": "resourceLocation", "in": [ "eastUS", "westUS"] }] }]
一旦使用
audit
模式成功將原則指派給所有通道之後,管線應該觸發一項工作,以將原則效果變更為deny
,並將資源選取器重設為與 Ring 0 相關聯的位置。 一個區域和效果設定為拒絕的範例選取器:"resourceSelectors": [{ "name": "SDPRegions", "selectors": [{ "kind": "resourceLocation", "in": [ "eastUS" ] }] }], "overrides":[{ "kind": "policyEffect", "value": "Deny" }]
變更效果之後,自動化的測試應該檢查是否如預期般執行強制執行。
在資源選取器組態中包含更多通道來重複。
針對所有生產通道重複此流程。
使用修改或 deployIfNotExists 效果安全部署 Azure 原則指派的步驟
使用 modify
或 deployIfNotExists
效果的原則步驟類似於先前使用強制模式和觸發補救工作之其他動作所說明的步驟。
使用修改的步驟 5-9 檢閱下列流程圖:
流程圖步驟編號:
選取原則定義之後,請在包含所有部署通道的最高層級範圍指派原則。 套用 [資源選取器],以使用
"kind": "resource location"
屬性將適用性縮小至最不重要的通道。 將指派的 [強制模式] 設定為 [DoNotEnforce]。eastUS
位置與 enforcementMode 為 DoNotEnforce 的範例選取器:"resourceSelectors": [{ "name": "SDPRegions", "selectors": [{ "kind": "resourceLocation", "in": [ "eastUS" ] }] }], "enforcementMode": "DoNotEnforce"
部署指派並完成初始合規性掃描之後,請驗證合規性結果是否符合預期。
您也應該設定執行合規性檢查的自動化的測試。 合規性檢查應包含下列邏輯:
- 收集合規性結果
- 如果合規性結果符合預期,則管線應該會繼續
- 如果合規性結果不符合預期,則管線應該會失敗,且您應該開始偵錯
您可以在持續整合/持續部署 (CI/CD) 管線內使用其他工具來設定合規性檢查。
在每個推出階段,應用程式健康情況檢查應確定服務的穩定性和原則的影響。 如果結果因應用程式組態而未符合預期,請適當地重構應用程式。
您也可以觸發補救工作,以補救現有不符合規範的資源。 確定補救工作會如預期般將資源帶入合規性。
藉由展開資源選取器屬性值來重複,以包含下一個通道的位置,以及驗證預期的合規性結果和應用程式健康情況。 具有新增位置值的範例選取器:
"resourceSelectors": [{ "name": "SDPRegions", "selectors": [{ "kind": "resourceLocation", "in": [ "eastUS", "westUS"] }] }]
當您使用 DoNotEnforce 模式成功將原則指派給所有通道之後,管線應該觸發將原則
enforcementMode
變更為 [預設] 啟用的工作,並將資源選取器重設為與 Ring 0 相關聯的位置。 一個區域和效果設定為拒絕的範例選取器:"resourceSelectors": [{ "name": "SDPRegions", "selectors": [{ "kind": "resourceLocation", "in": [ "eastUS" ] }] }], "enforcementMode": "Default",
變更效果之後,自動化的測試應該檢查是否如預期般執行強制執行。
在資源選取器組態中包含更多通道來重複。
針對所有生產通道重複此流程。
在 Azure 原則指派內安全地更新內建定義版本的步驟
在現有的指派中,套用 overrides 以更新最不重要通道的定義版本。 我們會使用 overrides 的組合來變更 definitionVersion 和 overrides 條件內的 selectors,以縮小
"kind": "resource location"
屬性的適用性。 在指定位置之外的任何資源,都會繼續根據指派中definitionVersion
最上層屬性的版本進行評估。 範例會覆寫將定義版本更新為2.0.*
,並將其僅套用至EastUs
中的資源。"overrides":[{ "kind": "definitionVersion", "value": "2.0.*", "selectors": [{ "kind": "resourceLocation", "in": [ "eastus"] }] }]
更新指派並完成初始合規性掃描之後,請驗證合規性結果是否符合預期。
您也應該設定執行合規性檢查的自動化的測試。 合規性檢查應包含下列邏輯:
- 收集合規性結果
- 如果合規性結果符合預期,則管線應該會繼續
- 如果合規性結果不符合預期,則管線應該會失敗,且您應該開始偵錯
例如,您可以使用特定持續整合/持續部署 (CI/CD) 管線中的其他工具來設定合規性檢查。
在每個推出階段,應用程式健康情況檢查應確定服務的穩定性和原則的影響。 如果結果因應用程式組態而未符合預期,請適當地重構應用程式。
展開資源選取器屬性值以包含下一個通道來重複。 位置和驗證預期的合規性結果和應用程式健康情況。 具有新增位置值的範例:
"overrides":[{ "kind": "definitionVersion", "value": "2.0", "selectors": [{ "kind": "resourceLocation", "in": [ "eastus", "westus"] }] }]
成功在 _selectors 中包含所有必要的位置之後,您就可以移除覆寫,並更新指派內的 definitionVersion 屬性:
"properties": {
"displayName": "Enforce resource naming rules",
"description": "Force resource names to begin with DeptA and end with -LC",
"definitionVersion": "2.0.*",
}
下一步
- 了解如何以程式設計方式建立原則。
- 檢閱 Azure 原則即程式碼工作流程。
- 研究 Microsoft 關於安全部署做法的指導。
- 檢閱補救不符合 Azure 原則規範的資源。