原則指派會定義哪些資源需要依照原則定義或計畫進行評估。 此外,原則指派可以在指派時判斷該資源群組的參數值,讓您可以重複使用原則定義,來處理具有不同合規性需求的相同資源屬性。
您可以使用 JavaScript 物件標記法 (JSON) 來建立原則指派。 原則指派中包含以下的項目:
例如,下列 JSON 顯示 DoNotEnforce 模式中具有參數的範例原則指派要求:
{
"properties": {
"displayName": "Enforce resource naming rules",
"description": "Force resource names to begin with DeptA and end with -LC",
"definitionVersion": "1.*.*",
"metadata": {
"assignedBy": "Cloud Center of Excellence"
},
"enforcementMode": "DoNotEnforce",
"notScopes": [],
"policyDefinitionId": "/subscriptions/{mySubscriptionID}/providers/Microsoft.Authorization/policyDefinitions/ResourceNaming",
"nonComplianceMessages": [
{
"message": "Resource names must start with 'DeptA' and end with '-LC'."
}
],
"parameters": {
"prefix": {
"value": "DeptA"
},
"suffix": {
"value": "-LC"
}
},
"identity": {
"principalId": "<PrincipalId>",
"tenantId": "<TenantId>",
"identityType": "SystemAssigned",
"userAssignedIdentities": null
},
"location": "westus",
"resourceSelectors": [],
"overrides": [],
}
}
Scope
指派資源建立時間所使用的範圍是資源適用性的主要決定因素。 如需指派範圍的詳細資訊,請參閱了解 Azure 原則範圍。
政策定義 ID 與版本
此欄位必須是原則定義或計畫定義的完整路徑名稱。
policyDefinitionId 是字串,而不是陣列。 每次評估原則指派時,系統都會擷取指派原則定義或方案的最新內容。 如果會經常將多個原則指派在一起,建議改用計畫。
無論是內建或自訂的定義與計畫,你都可以利用 definitionVersion 這些來評估。 根據預設,版本會設定為最新的主要版本,並自動擷取次要和修補程式變更。
- 若要自動擷取定義的任何次要變更,版本號碼會是
#.*.*。 萬用字元代表自動擷取更新。 - 若要釘選到次要版本路徑,版本格式會是
#.#.*。 - 所有修補變更必須自動自動執行以確保安全。 修補程式變更僅限於文字變更和緊急情況案例。
顯示名稱和描述
您可使用 displayName 和 description 來識別原則指派,並提供內容以搭配特定資源組使用。
displayName 的長度上限為 128 個字元,而 description 的長度上限為 512 個字元。
中繼資料
選擇性 metadata 屬性會儲存原則指派的資訊。 客戶可以在 metadata 中,定義適合組織的任何屬性和值。 不過,Azure 原則中會使用一些「通用」屬性。 每個 metadata 屬性都有 1024 個字元的限制。
通用中繼資料屬性
-
assignedBy(字串):易記名稱,針對建立指派的安全性主體。 -
createdBy(字串):GUID,針對建立指派的安全性主體。 -
createdOn(字串):指派建立時間的通用 ISO 8601 DateTime 格式。 -
updatedBy(字串):易記名稱,針對更新指派的安全性主體 (如果有的話)。 -
updatedOn(字串):指派更新時間 (如果有的話) 的通用 ISO 8601 DateTime 格式。
案例特定中繼資料屬性
parameterScopes(物件):索引鍵/值組的集合,其中索引鍵符合 strongType 設定的參數名稱,且該值會定義入口網站中用來提供可用資源清單的資源範圍,方法是比對 strongType。 如果該範圍與指派範圍不同,入口網站就會設定此值。 如果設定此值,入口網站中的原則指派就會進行編輯,自動將參數的範圍設定為此值。 不過,該範圍不會鎖定在該值,而且可以變更為另一個範圍。下列
parameterScopes的範例適用於名為 的backupPolicyId參數,此參數會在入口網站中的指派受到編緝時設定資源選取的範圍。"metadata": { "parameterScopes": { "backupPolicyId": "/subscriptions/{SubscriptionID}/resourcegroups/{ResourceGroupName}" } }evidenceStorages(物件):建議的預設儲存體帳戶,該帳戶應該用來保存對具有manual效果的原則指派的證明辨識項。displayName屬性是儲存體帳戶的名稱。evidenceStorageAccountID屬性是儲存體帳戶的資源 ID。evidenceBlobContainer屬性是您打算用來儲存辨識項的 Blob 容器名稱。{ "properties": { "displayName": "A contingency plan should be in place to ensure operational continuity for each Azure subscription.", "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/{definitionId}", "metadata": { "evidenceStorages": [ { "displayName": "Default evidence storage", "evidenceStorageAccountId": "/subscriptions/{subscriptionId}/resourceGroups/{rg-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name}", "evidenceBlobContainer": "evidence-container" } ] } } }
資源選取器
選用 resourceSelectors 屬性可讓您根據資源位置、資源類型或資源是否具有位置等因素,逐步推出原則指派,以輔助安全部署做法 (SDP)。 使用資源選取器時,Azure 原則只會評估適用於資源選取器中所制定規格的資源。 資源選擇器也可用來縮小豁免與登記範圍。
在下列範例情節中,只有在資源的位置是美國東部或美國西部時,才會評估新的原則指派。
{
"properties": {
"policyDefinitionId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyDefinitions/ResourceLimit",
"definitionVersion": "1.1.*",
"resourceSelectors": [
{
"name": "SDPRegions",
"selectors": [
{
"kind": "resourceLocation",
"in": [
"eastus",
"westus"
]
}
]
}
]
},
"systemData": { ...
},
"id": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/ResourceLimit",
"type": "Microsoft.Authorization/policyAssignments",
"name": "ResourceLimit"
}
當您準備好擴充原則的評估範圍時,只需要更新指派即可。 下列範例顯示我們的原則指派,其中已將另外兩個 Azure 區域新增至 SDPRegions 選取器。 請注意,在此範例中,SDP 表示安全部署做法:
{
"properties": {
"policyDefinitionId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyDefinitions/ResourceLimit",
"definitionVersion": "1.1.*",
"resourceSelectors": [
{
"name": "SDPRegions",
"selectors": [
{
"kind": "resourceLocation",
"in": [
"eastus",
"westus",
"centralus",
"southcentralus"
]
}
]
}
]
},
"systemData": { ...
},
"id": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/ResourceLimit",
"type": "Microsoft.Authorization/policyAssignments",
"name": "ResourceLimit"
}
資源選取器具有下列屬性:
name:資源選取器的名稱。selectors:(選用) 應對用來判斷哪些資源子集適用於原則指派的屬性進行評估,確認其是否合規。kind:選取器的屬性,該屬性會描述哪個特性會縮小評估資源集的範圍。 每一種類型只能在單一資源選取器中使用一次。 允許的值包括:resourceLocation:這個屬性會用來根據其類型選取資源。 無法在與resourceWithoutLocation相同的資源選取器中使用。resourceType:這個屬性會用來根據其類型選取資源。resourceWithoutLocation:這個屬性會用來在沒有位置的訂用帳戶層級選取資源。 目前僅支援subscriptionLevelResources。 無法在與resourceLocation相同的資源選取器中使用。
in:指定kind的允許值清單。 無法與notIn搭配使用。 最多可以包含 50 個值。notIn:指定kind的不允許值清單。 無法與in搭配使用。 最多可以包含 50 個值。
資源選取器可以包含多個 selectors。 資源必須符合其所有選取器所指定的需求,才適用於資源選取器。 此外,在單一指派中最多可指定 10 個 resourceSelectors。 當資源滿足上述任一資源選取器時,系統就會對範圍內的資源進行評估。
覆寫
選用 overrides 屬性可讓您變更原則定義的效果,而不需變更基礎原則定義,或在原則定義中使用參數化效果。
覆蓋效果最常見的使用案例是原則計畫,內含大量相關的原則定義。 在此情況下,管理多個原則效果可能會需要進行大量的系統管理工作,特別是在需要隨時更新效果時。 覆寫可用來同時更新方案內多個原則定義的效果。
接著我們來看一下範例。 想像您有一個名為 CostManagement 的原則方案,其中包含具有 policyDefinitionReferenceIdcorpVMSizePolicy 的自訂原則定義,以及 audit 的單一效果。 假設您想要指派 CostManagement 方案,但還不想查看此原則回報的合規性。 此原則的 audit 效果可以透過方案指派的覆寫來取代為 disabled,如下列範例所示:
{
"properties": {
"policyDefinitionId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policySetDefinitions/CostManagement",
"overrides": [
{
"kind": "policyEffect",
"value": "disabled",
"selectors": [
{
"kind": "policyDefinitionReferenceId",
"in": [
"corpVMSizePolicy"
]
}
]
}
]
},
"systemData": { ...
},
"id": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/CostManagement",
"type": "Microsoft.Authorization/policyAssignments",
"name": "CostManagement"
}
覆寫的另一個常見使用案例是推出新版本的定義。 如需安全更新指派版本的建議步驟,請參閱原則安全部署。
覆寫具有下列屬性:
kind:指派覆寫的屬性。 支援的種類為policyEffect與definitionVersion。 定義版本僅支援內建定義與倡議。 它們不支援自訂定義或倡議。value:覆寫現有值的新值。 針對kind: policyEffect,支援的值為效果 (部分機器翻譯)。 針對kind: definitionVersion,支援的版本號碼必須大於或等於指派中所指定的definitionVersion。selectors:(選用) 用來判斷原則指派的哪個範圍應採用覆寫的屬性。kind:選取器的屬性,該屬性會描述哪個特性可縮小覆寫的範圍。kind: policyEffect的允許值:policyDefinitionReferenceId:此屬性會指定方案指派內哪些原則定義應採用效果覆寫。resourceLocation:這個屬性會用來根據其類型選取資源。 無法在與resourceWithoutLocation相同的資源選取器中使用。
kind: definitionVersion允許的值為:-
resourceLocation:這個屬性會用來根據其類型選取資源。 無法在與resourceWithoutLocation相同的資源選取器中使用。
in:指定kind的允許值清單。 無法與notIn搭配使用。 最多可以包含 50 個值。notIn:指定kind的不允許值清單。 無法與in搭配使用。 最多可以包含 50 個值。
一個覆寫可用來取代許多原則的效果,方法是在 policyDefinitionReferenceId 陣列中指定多個值。 單一覆寫最多可用於 50 個 policyDefinitionReferenceId,而單一原則指派最多可以包含 10 個覆寫,這些覆寫會以指定的順序進行評估。 建立指派之前,系統會根據原則規則和參數允許的值清單,來驗證覆寫中選擇的效果 (以防發生效果參數化的情況)。
強制模式
此enforcementMode屬性讓客戶能夠控制現有資源上的政策結果,而無需啟動政策影響或觸發 Azure 活動日誌中的項目。
此屬性有下列值:
| [模式] | JSON 值 | 類型 | 手動補救 | 活動記錄項目 | 描述 |
|---|---|---|---|---|---|
| 啟用 | 預設 | 字串 | 是 | 是 | 原則效果會在資源建立或更新期間受到強制執行。 |
| 已停用 | DoNotEnforce | 字串 | 是 | 否 | 原則效果不會在資源建立或更新期間受到強制執行。 |
| Enroll | Enroll | 字串 | 是 | 是的,已註冊資源 | 政策效果僅在資源建立或更新時強制執行,適用於已登記在指派中的資源。 |
如果未在原則或計畫定義中指定 enforcementMode,便會使用 Default 值。
即使 設定為 DoNotEnforce,您還是可以針對 enforcementMode 原則啟動補救工作。 欲了解更多關於 Enroll 模式的資訊,請參閱 Azure 原則 註冊結構。
用於 Default 標準政策指派,政策效果應適用於範圍內所有資源。
當您想在執行前評估保單分配時使用 DoNotEnforce 。 此模式適合測試新指派、檢視合規影響,或在政策效果執行前驗證政策邏輯。
選擇執行模式
使用符合你希望分配如何影響資源的執行模式。
| Scenario | 強制模式 |
|---|---|
| 在資源建立或更新時,對所有範圍內的資源強制執行政策效果。 | Default |
| 評估合規性時,不強制執行政策影響或在 Azure 活動日誌中寫下拒絕條目。 | DoNotEnforce |
| 透過保單登記,讓該指派可供分階段執行。 | Enroll |
用於 Default 標準政策指派,政策效果應適用於範圍內所有資源。
當您想在執行前評估保單分配時使用 DoNotEnforce 。 此模式適合測試新指派、檢視合規影響,或在政策效果執行前驗證政策邏輯。
當你想讓分配透過保單登記進行分階段執行時,可以使用 Enroll 。 在此模式下,範圍擁有者可建立註冊資源,指示應對特定範圍執行。 當沒有註冊資源時,政策評估與預設使用的 DoNotEnforce 指派相同,但此行為可設定。 這個模式很適合你想慢慢批次並加入子示波器到指派時。
排除的範圍
指派的範圍包括所有子資源容器和子資源。 如果子資源容器或子資源不應該套用定義,那麼便可以藉由設定 來將其從評估中「排除」notScopes。 這個屬性是一個陣列,可從評估中排除一或多個資源容器或資源。
在建立初始指派之後,您可以新增或更新 notScopes。
附註
「排除」的資源與「豁免」的資源不同。 如需詳細資訊,請參閱了解 Azure 原則範圍。
不符合規範的訊息
若要設定自訂訊息,其中描述資源為何與原則或計畫定義不相容,那麼請在指派定義中設定 nonComplianceMessages。 這個節點是 message 項目的陣列。 除了不符合規範的預設錯誤訊息之外,此自訂訊息也是一種訊息,而且是選擇性的。
重要事項
只有在具有資源管理員模式定義的定義或計畫上,不符合規範的自訂訊息才會受到支援。
"nonComplianceMessages": [
{
"message": "Default message"
}
]
如果該指派適用於計畫,則可以針對計畫中的每個原則定義設定不同的訊息。 訊息會使用 policyDefinitionReferenceId 計畫定義中設定的值。 如需詳細資訊,請參閱原則定義屬性。
"nonComplianceMessages": [
{
"message": "Default message"
},
{
"message": "Message for just this policy definition by reference ID",
"policyDefinitionReferenceId": "10420126870854049575"
}
]
參數
原則指派的這個小節會提供原則定義或計畫定義中所定義的參數值。 此設計可讓您重複使用具有不同資源的原則或計畫定義,但請檢查不同的商業價值或結果。
"parameters": {
"prefix": {
"value": "DeptA"
},
"suffix": {
"value": "-LC"
}
}
在此範例中,先前在原則定義中受到定義的參數是 prefix 和 suffix。 這個特定原則指派會將 prefix 設定為 DeptA,並將 suffix 設定為 -LC。 可藉由不同部門的不同參數集重複使用相同的原則定義,以便減少原則定義的重複問題和複雜度,同時提供彈性。
身分識別
效果設定為 deployIfNotExists 或 modify 的原則指派必須具有身分識別屬性,才能對不符合規範的資源進行補救。 單一原則指派只能與一個系統指派或使用者指派的受控識別相關聯。 不過,如有必要,可以將多個角色指派給該身分識別。
使用系統指派的受控識別指派也必須指定最上層 location 屬性,以判斷部署的位置。 位置無法設定為 global,而且無法變更。
location 屬性只會在 Rest API 2018-05-01 版和更新版本中指定。 如果在未使用身分識別的指派中指定位置,則會忽略位置。
# System-assigned identity
"identity": {
"principalId": "<PrincipalId>",
"tenantId": "<TenantId>",
"identityType": "SystemAssigned",
"userAssignedIdentities": null
},
"location": "westus",
...
# User-assigned identity
"identity": {
"identityType": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/SubscriptionID/resourceGroups/{rgName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/test-identity": {}
}
},
附註
對於 deployIfNotExists 政策而言,ARM 範本部署時總是使用指派身份。 然而,當目標資源被建立或更新時,請求者的身份會被用於評估。
例如,想像一個原則將 Microsoft.Insights/diagnosticSettings 部署在 Microsoft.KeyVault/vaults 上。 當建立金鑰庫時,呼叫者身份會被用來取得 Microsoft.Insights/diagnosticSettings 資源,以評估政策定義的存在條件。 若符合條件,則會使用原則指派的身份識別來在金鑰保存庫部署診斷設定。 這表示呼叫者需要 Microsoft.Insights/diagnosticSettings/read permissions,指派則需要 Microsoft.Insights/diagnosticSettings/write permissions。
後續步驟
- 了解原則定義結構。
- 了解如何以程式設計方式建立原則。
- 了解如何取得合規性資料。
- 了解如何補救不符合規範的資源。
- 透過使用 Azure 管理群組來組織資源來檢閱何謂管理群組。