Azure 原則 指派結構
Azure 原則 會使用原則指派來定義指派哪些原則或計劃的資源。 原則指派可以在指派時判斷該資源群組的參數值,以便重複使用原則定義,以因應符合不同合規性需求之相同資源屬性。
注意
如需 Azure 原則 範圍的詳細資訊,請參閱瞭解 Azure 原則 中的範圍。
您可以使用 JavaScript 物件表示法 (JSON) 來建立原則指派。 原則指派包含下列項目的元素:
例如,下列 JSON 顯示 DoNotEnforce 模式中具有動態參數的原則指派:
{
"properties": {
"displayName": "Enforce resource naming rules",
"description": "Force resource names to begin with DeptA and end with -LC",
"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": {
"type": "SystemAssigned"
},
"resourceSelectors": [],
"overrides": []
}
}
所有 Azure 原則 範例都在 Azure 原則 範例中。
顯示名稱和描述
您可以使用 displayName 和 描述 來識別原則指派,並提供內容以搭配特定資源集使用。 displayName 的長度上限為 128 個字元,而 描述 的最大長度為 512 個字元。
中繼資料
選擇性 metadata
屬性會儲存原則指派的相關信息。 客戶可以在 中 metadata
定義任何對組織有用的屬性和值。 不過,Azure 原則 會使用一些通用屬性。 每個 metadata
屬性的限制為1,024個字元。
一般元數據屬性
assignedBy
(string):建立指派之安全性主體的易記名稱。createdBy
(string):建立指派之安全性主體的 GUID。createdOn
(string):指派建立時間的通用 ISO 8601 DateTime 格式。parameterScopes
(object):索引鍵/值組的集合,其中索引鍵符合 strongType 設定的參數名稱,而值會定義入口網站中用來提供可用資源清單的 強類型。 如果範圍與指派範圍不同,入口網站會設定此值。 如果設定,入口網站中原則指派的編輯會自動將參數的範圍設定為此值。 不過,範圍未鎖定為值,而且可以變更為另一個範圍。下列範例適用於名為
backupPolicyId
的parameterScopes
strongType 參數,會在入口網站中編輯指派時設定資源選取範圍。"metadata": { "parameterScopes": { "backupPolicyId": "/subscriptions/{SubscriptionID}/resourcegroups/{ResourceGroupName}" } }
updatedBy
(string):如果有的話,更新指派之安全性主體的易記名稱。updatedOn
(string):如果有的話,指派更新時間的通用 ISO 8601 DateTime 格式。evidenceStorages
(object):建議的預設記憶體帳戶,應該用來保存證明有效manual
原則指派的證據。 屬性displayName
是記憶體帳戶的名稱。 屬性evidenceStorageAccountID
是記憶體帳戶的資源標識碼。 屬性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個值。
資源選取器可以包含多個選取器。 若要適用於資源選取器,資源必須符合其所有選取器所指定的需求。 此外,最多可以在單一指派中指定10 個資源選取器 。 當資源滿足上述任一資源選取器時,就會評估範圍中的資源。
Overrides
選擇性 overrides
屬性可讓您變更原則定義的效果,而不需修改基礎原則定義或使用原則定義中的參數化效果。
覆寫最常見的使用案例是具有大量相關聯原則定義的原則計劃。 在此情況下,管理多個原則效果可能會耗用大量的系統管理工作,尤其是在需要不時更新效果時。 覆寫可用來同時更新方案內多個原則定義的效果。
讓我們來看一個範例 假設您有一個名為 CostManagement 的原則方案,其中包含具有policyDefinitionReferenceId
corpVMSizePolicy 的自定義原則定義,以及 的單一效果audit
。 假設您想要指派 CostManagement 方案 ,但還不想看到此原則回報的合規性。 此原則的「稽核」效果可以透過計劃指派的覆寫來取代為「已停用」,如下列範例所示:
{
"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
。value
:覆寫現有值的新值。 支援的值為 效果。selectors
:(選擇性) 屬性,用來判斷原則指派應接受覆寫的範圍。kind
:選取器的屬性,描述哪些特性會縮小覆寫的範圍。 允許的值為kind: policyEffect
:policyDefinitionReferenceId
:這會指定計劃指派內應對效果覆寫採取哪些原則定義。
in
:指定kind
之 的允許值清單。 無法與notIn
搭配使用。 最多可以包含50個值。notIn
:指定kind
之 不允許的值清單。 無法與in
搭配使用。 最多可以包含50個值。
請注意,一個覆寫可用來取代許多原則的效果,方法是在 policyDefinitionReferenceId 陣列中指定多個值。 單一覆寫最多可用於 50 個 policyDefinitionReferenceIds,而單一原則指派最多可以包含 10 個覆寫,並以指定的順序進行評估。 建立指派之前,覆寫中選擇的效果會根據原則規則和參數允許的值清單進行驗證(在效果參數 化的情況下)。
強制模式
enforcementMode 屬性可讓客戶在不起始原則效果或觸發 Azure 活動記錄中的項目的情況下,在現有資源上測試原則的結果。
此案例通常稱為「What If」,且符合安全部署做法。 enforcementMode 與 Disabled 效果不同,因為該效果可防止資源評估完全發生。
此屬性有下列值:
[模式] | JSON 值 | 類型 | 手動補救 | 活動記錄項目 | 描述 |
---|---|---|---|---|---|
啟用 | Default | 字串 | Yes | 是 | 原則效果會在資源建立或更新期間受到強制執行。 |
已停用 | DoNotEnforce | 字串 | 是 | 否 | 原則效果不會在資源建立或更新期間受到強制執行。 |
如果未在原則或方案定義中指定 enforcementMode,則會使用 Default 值。 即使 enforcementMode 設定為 DoNotEnforce,也可以針對 deployIfNotExists 原則啟動補救工作。
已排除的範圍
指派 的範圍 包括所有子資源容器和子資源。 如果子資源容器或子資源不應該套用定義,則可以藉由設定 notScopes 來排除每個容器的評估。 這個屬性是一個陣列,可用來排除評估中一或多個資源容器或資源。 建立初始指派之後,可以新增或更新 notScopes 。
注意
排除的資源與豁免的資源不同。 如需詳細資訊,請參閱了解 Azure 原則範圍。
原則定義識別碼
此欄位必須是原則定義或計劃定義的完整路徑名稱。
policyDefinitionId
是字串,而不是陣列。 每次評估原則指派時,都會擷取指派原則定義或計劃的最新內容。 如果經常將多個原則指派在一起,建議改用 方案 。
不符合規範的訊息
若要設定自定義訊息,描述資源與原則或方案定義不相容的原因,請在指派定義中設定 nonComplianceMessages
。 此節點是項目的陣列 message
。 此自定義訊息除了不符合規範的預設錯誤訊息之外,也是選擇性的。
重要
只有 Resource Manager 模式定義的定義或方案才支援不符合規範的自定義訊息。
"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。 相同的原則定義可重複使用不同部門的不同參數集,同時提供彈性,減少原則定義的重複和複雜度。
身分識別
對於效果設定為 deployIfNotExist 或修改的原則指派,必須具有身分識別屬性,才能對不符合規範的資源執行補救。 使用身分識別時,用戶也必須指定指派的位置。
注意
單一原則指派只能與一個系統或使用者指派的受控識別相關聯。 不過,如有必要,該身分識別可以指派多個角色。
# System-assigned identity
"identity": {
"type": "SystemAssigned"
}
# User-assigned identity
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/SubscriptionID/resourceGroups/testResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/test-identity": {}
}
},
下一步
- 瞭解原則 定義結構。
- 了解如何以程式設計方式建立原則。
- 了解如何取得合規性資料。
- 了解如何補救不符合規範的資源。
- 透過使用 Azure 管理群組來組織資源來檢閱何謂管理群組。