Azure 原則指派結構
原則指派會定義哪些資源需要依照原則定義或計畫進行評估。 此外,原則指派可以在指派時判斷該資源群組的參數值,讓您可以重複使用原則定義,來處理具有不同合規性需求的相同資源屬性。
您可以使用 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": {
"type": "SystemAssigned"
},
"resourceSelectors": [],
"overrides": []
}
}
範圍
指派資源建立時間所使用的範圍是資源適用性的主要決定因素。 如需指派範圍的詳細資訊,請參閱了解 Azure 原則範圍。
原則定義識別碼和版本 (預覽)
此欄位必須是原則定義或計畫定義的完整路徑名稱。 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
的 strongType 參數,此參數會在入口網站中的指派受到編緝時設定資源選取的範圍。"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
選用 overrides
屬性可讓您變更原則定義的效果,而不需變更基礎原則定義,或在原則定義中使用參數化效果。
覆蓋效果最常見的使用案例是原則計畫,內含大量相關的原則定義。 在此情況下,管理多個原則效果可能會需要進行大量的系統管理工作,特別是在需要隨時更新效果時。 覆寫可用來同時更新方案內多個原則定義的效果。
讓我們來看一個範例 想像您有一個名為 CostManagement 的原則方案,其中包含具有 policyDefinitionReferenceId
corpVMSizePolicy 的自訂原則定義,以及 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
與policyVersion
。value
:覆寫現有值的新值。 針對kind: policyEffect
,支援的值為效果 (部分機器翻譯)。 針對kind: policyVersion
,支援的版本號碼必須大於或等於指派中所指定的definitionVersion
。selectors
:(選用) 用來判斷原則指派的哪個範圍應採用覆寫的屬性。kind
:選取器的屬性,該屬性會描述哪個特性可縮小覆寫的範圍。kind: policyEffect
的允許值:policyDefinitionReferenceId
:此屬性會指定方案指派內哪些原則定義應採用效果覆寫。resourceLocation
:這個屬性會用來根據其類型選取資源。 無法在與resourceWithoutLocation
相同的資源選取器中使用。
kind: policyVersion
允許的值為:resourceLocation
:這個屬性會用來根據其類型選取資源。 無法在與resourceWithoutLocation
相同的資源選取器中使用。
in
:指定kind
的允許值清單。 無法與notIn
搭配使用。 最多可以包含 50 個值。notIn
:指定kind
的不允許值清單。 無法與in
搭配使用。 最多可以包含 50 個值。
一個覆寫可用來取代許多原則的效果,方法是在 policyDefinitionReferenceId
陣列中指定多個值。 單一覆寫最多可用於 50 個 policyDefinitionReferenceId
,而單一原則指派最多可以包含 10 個覆寫,這些覆寫會以指定的順序進行評估。 建立指派之前,系統會根據原則規則和參數允許的值清單,來驗證覆寫中選擇的效果 (以防發生效果參數化的情況)。
強制模式
enforcementMode
屬性可讓客戶在不起始原則效果或不觸發 Azure 活動記錄中項目的情況下,測試現有資源的原則結果。
我們通常稱此為「假設狀況」,而且符合安全部署的做法。 enforcementMode
與 Disabled 效果不同,因為該效果會完全不讓資源評估發生。
此屬性有下列值:
[模式] | JSON 值 | 類型 | 手動補救 | 活動記錄項目 | 描述 |
---|---|---|---|---|---|
啟用 | Default | 字串 | Yes | 是 | 原則效果會在資源建立或更新期間受到強制執行。 |
已停用 | DoNotEnforce | 字串 | 是 | 否 | 原則效果不會在資源建立或更新期間受到強制執行。 |
如果未在原則或計畫定義中指定 enforcementMode
,便會使用 Default 值。 即使 enforcementMode
設定為 DoNotEnforce,您還是可以針對 deployIfNotExists 原則啟動補救工作。
已排除的範圍
指派的範圍包括所有子資源容器和子資源。 如果子資源容器或子資源不應該套用定義,那麼便可以藉由設定 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
的原則指派,必須具有身分識別屬性,才能對不符合規範的資源進行補救。 當指派使用身分識別時,使用者也必須指定指派的位置。
注意
單一原則指派只能與一個系統指派的受控識別或使用者指派的受控識別相關聯。 不過,如有必要,可以將多個角色指派給該身分識別。
# System-assigned identity
"identity": {
"type": "SystemAssigned"
}
# User-assigned identity
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/SubscriptionID/resourceGroups/{rgName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/test-identity": {}
}
},
下一步
- 了解原則定義結構。
- 了解如何以程式設計方式建立原則。
- 了解如何取得合規性資料。
- 了解如何補救不符合規範的資源。
- 透過使用 Azure 管理群組來組織資源來檢閱何謂管理群組。