Azure 原則豁免結構

Azure 原則豁免功能可用來免除資源階層或個別資源的評估計劃或定義。 豁免的資源會計入整體合規性,但無法評估或暫時豁免。 如需詳細資訊,請參閱瞭解 Azure 原則 中的適用性。 Azure 原則 豁免也適用於下列專案Resource Manager 模式:Microsoft.Kubernetes.Data、Microsoft.KeyVault.Data 和 Microsoft.Network.Data。

您可以使用 JavaScript 物件標記法 (JSON) 來建立原則豁免。 原則豁免包含下列項目的元素:

原則豁免會建立為資源階層上的子物件,或授與豁免的個別資源。 無法在資源提供者模式元件層級建立豁免。 如果移除豁免適用的父代資源,則也會移除該豁免。

例如,下列 JSON 會顯示資源豁免類別中的原則豁免,以命名resourceShouldBeCompliantInit為 的方案指派。 資源只豁免計劃中的兩個原則定義,customOrgPolicy自訂原則定義 (policyDefinitionReferenceIdrequiredTags: ) 和 [允許的位置] 內建原則定義 ( policyDefinitionReferenceId : ) : ): allowedLocations

{
    "id": "/subscriptions/{subId}/resourceGroups/ExemptRG/providers/Microsoft.Authorization/policyExemptions/resourceIsNotApplicable",
    "apiVersion": "2020-07-01-preview",
    "name": "resourceIsNotApplicable",
    "type": "Microsoft.Authorization/policyExemptions",
    "properties": {
        "displayName": "This resource is scheduled for deletion",
        "description": "This resources is planned to be deleted by end of quarter and has been granted a waiver to the policy.",
        "metadata": {
            "requestedBy": "Storage team",
            "approvedBy": "IA",
            "approvedOn": "2020-07-26T08:02:32.0000000Z",
            "ticketRef": "4baf214c-8d54-4646-be3f-eb6ec7b9bc4f"
        },
        "policyAssignmentId": "/subscriptions/{mySubscriptionID}/providers/Microsoft.Authorization/policyAssignments/resourceShouldBeCompliantInit",
        "policyDefinitionReferenceIds": [
            "requiredTags",
            "allowedLocations"
        ],
        "exemptionCategory": "waiver",
        "expiresOn": "2020-12-31T23:59:00.0000000Z",
        "assignmentScopeValidation": "Default"
    }
}

顯示名稱和描述

您可以使用 displayName描述 來識別原則豁免,並提供內容以搭配特定資源使用。 displayName 的長度上限為 128 個字元,而 描述 的最大長度為 512 個字元。

中繼資料

元數據屬性允許建立儲存相關信息所需的任何子屬性。 在此範例中,requestedBy、approvedByapprovedOnticketRef 的屬性會包含客戶值,以提供要求豁免的人員、核准者及時間,以及要求的內部追蹤票證的相關信息。 這些 元數據 屬性是範例,但並非必要,而且 元數據 不限於這些子屬性。

原則指派識別碼

此欄位必須是原則指派或計劃指派的完整路徑名稱。 policyAssignmentId 是字串,而不是陣列。 此屬性會定義父資源階層或個別資源的指派豁免

原則定義識別碼

policyAssignmentId如果 是用於計劃指派,則 policyDefinitionReferenceIds 屬性可用來指定主體資源具有豁免之方案的原則定義。 由於資源可以豁免一或多個包含的原則定義,此屬性是 陣列。 這些值必須符合欄位中計劃定義中的 policyDefinitions.policyDefinitionReferenceId 值。

豁免類別

存在兩個豁免類別,並用來群組豁免:

  • 緩和:因為原則意圖是透過另一種方法符合,因此會授與豁免。
  • 豁免:因為暫時接受資源的不符合規範狀態,因此會授與豁免。 使用此類別的另一個原因是資源或資源階層應該從方案中的一或多個定義中排除,但不應該從整個計劃中排除。

到期

若要設定資源階層或個別資源不再 豁免 指派的時間,請設定 expiresOn 屬性。 這個選擇性屬性必須是通用 ISO 8601 DateTime 格式 yyyy-MM-ddTHH:mm:ss.fffffffZ

注意

達到日期時 expiresOn ,不會刪除原則豁免。 物件會保留以供記錄保留,但不再接受豁免。

資源選取器

豁免支援選擇性屬性 resourceSelectors。 此屬性在指派中的運作方式與豁免方式相同,允許根據資源類型、資源位置,或資源是否具有位置,以受控方式逐步推出或復原特定資源子集。 如需如何使用資源選取器的詳細資訊,請參閱 指派結構。 以下是使用資源選取器的範例豁免 JSON。 在此範例中,只有 中的 westcentralus 資源會豁免原則指派:

{
    "properties": {
        "policyAssignmentId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/CostManagement",
        "policyDefinitionReferenceIds": [
            "limitSku", "limitType"
        ],
        "exemptionCategory": "Waiver",
        "resourceSelectors": [
            {
                "name": "TemporaryMitigation",
                "selectors": [
                    {
                        "kind": "resourceLocation",
                        "in": [ "westcentralus" ]
                    }
                ]
            }
        ]
    },
    "systemData": { ... },
    "id": "/subscriptions/{subId}/resourceGroups/demoCluster/providers/Microsoft.Authorization/policyExemptions/DemoExpensiveVM",
    "type": "Microsoft.Authorization/policyExemptions",
    "name": "DemoExpensiveVM"
}

您可以從範例中的清單中新增或移除 resourceLocation 區域。 資源選取器可讓您更彈性地建立及管理豁免的位置及管理方式。

指定範圍驗證 (預覽)

在大部分情況下,會驗證豁免範圍,以確保其位於原則指派範圍或原則指派範圍內。 選擇性 assignmentScopeValidation 屬性可允許豁免略過此驗證,並在指派範圍之外建立。 這適用於需要將訂用帳戶從一個管理群組 (MG) 移至另一個管理群組的情況,但由於訂用帳戶內的資源屬性,該移動會遭到原則封鎖。 在此案例中,可以為其目前 MG 中的訂用帳戶建立豁免,以豁免其資源免於目的地 MG 的原則指派。 如此一來,當訂用帳戶移至目的地 MG 時,作業就不會遭到封鎖,因為資源已經豁免有問題的原則指派。 此屬性的使用說明如下:

{
    "properties": {
        "policyAssignmentId": "/providers/Microsoft.Management/managementGroups/{mgB}/providers/Microsoft.Authorization/policyAssignments/CostManagement",
        "policyDefinitionReferenceIds": [
            "limitSku", "limitType"
        ],
        "exemptionCategory": "Waiver",
        "assignmentScopeValidation": "DoNotValidate",
    },
    "systemData": { ... },
    "id": "/subscriptions/{subIdA}/providers/Microsoft.Authorization/policyExemptions/DemoExpensiveVM",
    "type": "Microsoft.Authorization/policyExemptions",
    "name": "DemoExpensiveVM"
}

允許的assignmentScopeValidationDefault值為 與 DoNotValidate。 如果未指定,則會發生預設驗證程式。

所需的權限

管理原則豁免物件所需的 Azure RBAC 許可權位於作業群組中 Microsoft.Authorization/policyExemptions 。 內建角色資源原則參與者和安全性 管理員 具有 readwrite 許可權,且 Policy Insights 數據寫入器 (預覽) 具有 read 許可權。

因為授與豁免的影響,豁免有額外的安全性措施。 除了需要 Microsoft.Authorization/policyExemptions/write 資源階層或個別資源的作業之外,豁免的建立者必須在目標指派上具有 exempt/Action 動詞。

豁免建立和管理

建議針對資源或資源階層仍應追蹤並評估特定案例的豁免,但有特定原因不應評估合規性。 例如,如果環境已將內建定義 Storage accounts should disable public network access (ID: ) b2982f36-99f2-4db5-8eff-283140c09693指派 給效果 設定為 稽核。 在合規性評估時,資源“儲存體 Acc1” 不符合規範,但 儲存體 Acc1 必須啟用公用網路存取,才能用於商務用途。 此時,應該提交要求,以建立以 儲存體 Acc1 為目標的豁免資源。 建立豁免之後,儲存體 Acc1 會顯示為合規性檢閱中的豁免

定期重新流覽您的豁免,以確保所有合格專案都已適當豁免,並立即移除任何不再符合豁免資格的專案。 屆時,也可以刪除已過期的豁免資源。

下一步