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 設定的參數名稱,而值會定義入口網站中用來提供可用資源清單的 強類型。 如果範圍與指派範圍不同,入口網站會設定此值。 如果設定,入口網站中原則指派的編輯會自動將參數的範圍設定為此值。 不過,範圍未鎖定為值,而且可以變更為另一個範圍。

    下列範例適用於名為 backupPolicyIdparameterScopes 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」,且符合安全部署做法。 enforcementModeDisabled 效果不同,因為該效果可防止資源評估完全發生。

此屬性有下列值:

[模式] 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"
    }
}

在這裡範例中,先前在原則定義中定義的參數是 prefixsuffix。 此特定原則指派會將 設定 prefixDeptAsuffix - 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": {}
    }
  },

下一步