Azure 原則豁免結構
Azure 原則豁免功能可用來將資源階層或個別資源從計劃或定義的評估中豁免。 豁免的資源會計入整體合規性,但無法評估或有暫時豁免。 如需詳細資訊,請參閱了解 Azure 原則中的適用性。 Azure 原則豁免也適用於下列 Resource Manager 模式:Microsoft.Kubernetes.Data
、Microsoft.KeyVault.Data
和 Microsoft.Network.Data
。
您可以使用 JavaScript 物件標記法 (JSON) 來建立原則豁免。 原則豁免包含下列項目的元素:
原則豁免會建立為資源階層或授與豁免的個別資源上的子物件。 無法在資源提供者模式元件層級建立豁免。 如果移除豁免適用的父代資源,則也會移除該豁免。
例如,下列 JSON 會顯示資源對名為 resourceShouldBeCompliantInit
的計劃指派豁免類別中的原則豁免。 資源只會從計劃中的兩個原則定義中豁免:customOrgPolicy
自訂原則定義 (policyDefinitionReferenceId
:requiredTags
) 和允許的位置內建原則定義 ( policyDefinitionReferenceId
:allowedLocations
):
{
"id": "/subscriptions/{subId}/resourceGroups/{rgName}/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",
"policyDefinitionReferenceId": [
"requiredTags",
"allowedLocations"
],
"exemptionCategory": "waiver",
"expiresOn": "2020-12-31T23:59:00.0000000Z",
"assignmentScopeValidation": "Default"
}
}
顯示名稱和描述
您可以使用 displayName
和 description
來識別原則豁免,並提供內容以搭配特定資源使用。 displayName
的長度上限為 128 個字元,而 description
的長度上限為 512 個字元。
中繼資料
metadata
屬性允許建立儲存相關資訊所需的任何子屬性。 在範例中,屬性 requestedBy
、approvedBy
、approvedOn
和 ticketRef
包含客戶值,可提供要求豁免的人員、核准者及何時以及要求的內部追蹤票證的相關資訊。 這些 metadata
屬性是範例,但並非必要,而且 metadata
不限於這些子屬性。
原則指派識別碼
此欄位必須是原則指派或計劃指派的完整路徑名稱。 policyAssignmentId
是字串,而不是陣列。 此屬性會定義父資源階層或個別資源從中豁免的指派。
原則定義識別碼
如果 policyAssignmentId
是用於計劃指派,則必須使用 policyDefinitionReferenceId
屬性來指定計劃中主題資源可豁免的原則定義。 因為可以從一或多個包含的原則定義中豁免資源,因此此屬性是陣列。 值必須符合 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",
"policyDefinitionReferenceId": [
"limitSku",
"limitType"
],
"exemptionCategory": "Waiver",
"resourceSelectors": [
{
"name": "TemporaryMitigation",
"selectors": [
{
"kind": "resourceLocation",
"in": [
"westcentralus"
]
}
]
}
]
},
"systemData": { ...
},
"id": "/subscriptions/{subId}/resourceGroups/{rgName}/providers/Microsoft.Authorization/policyExemptions/DemoExpensiveVM",
"type": "Microsoft.Authorization/policyExemptions",
"name": "DemoExpensiveVM"
}
您可以在範例的 resourceLocation
清單中新增或移除區域。 資源選取器允許更彈性地建立和管理豁免的位置及方式。
指派範圍驗證 (預覽)
在大部分的案例中,系統會驗證豁免範圍,以確保其位於原則指派範圍內或底下。 選擇性的 assignmentScopeValidation
屬性可允許豁免略過此驗證,並在指派範圍之外建立。 此驗證適用於需要將訂用帳戶從某個管理群組 (MG) 移至另一個管理群組的情況,但該移動會因為訂用帳戶內資源的屬性而遭到原則封鎖。 在此案例中,可以為訂用帳戶在其目前的 MG 中建立豁免,以從目的地 MG 上的原則指派中豁免其資源。 如此一來,當訂用帳戶移至目的地 MG 時,作業便不會遭到封鎖,因為資源已從適用的原則指派中豁免。 下列範例顯示此屬性的用法:
{
"properties": {
"policyAssignmentId": "/providers/Microsoft.Management/managementGroups/{mgName}/providers/Microsoft.Authorization/policyAssignments/CostManagement",
"policyDefinitionReferenceId": [
"limitSku",
"limitType"
],
"exemptionCategory": "Waiver",
"assignmentScopeValidation": "DoNotValidate",
},
"systemData": { ...
},
"id": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyExemptions/DemoExpensiveVM",
"type": "Microsoft.Authorization/policyExemptions",
"name": "DemoExpensiveVM"
}
assignmentScopeValidation
的允許值為 Default
和 DoNotValidate
。 如果未指定,就會發生預設驗證程序。
所需的權限
管理原則豁免物件所需的 Azure 角色型存取控制 (Azure RBAC) 權限位於 Microsoft.Authorization/policyExemptions
作業群組中。 內建角色資源原則參與者和安全性管理員具有 read
和 write
權限,而原則深入解析資料寫入者 (預覽) 則具有 read
權限。
因為授與豁免的影響,豁免有額外的安全性措施。 除了需要資源階層或個別資源上的 Microsoft.Authorization/policyExemptions/write
作業之外,豁免的建立者必須在目標指派上具有 exempt/Action
動詞。
豁免建立和管理
對於有時限或具體的情節,建議進行豁免,在這些情節中,仍應追蹤資源或資源階層,否則將對其進行評估,但有一個特定的原因不應對其進行合規性評估。 例如,如果環境具有已指派的內建定義 Storage accounts should disable public network access
(識別碼:b2982f36-99f2-4db5-8eff-283140c09693
),且效果設定為稽核。 根據合規性評定,資源 StorageAcc1
不合規,但 StorageAcc1
必須針對商務目的啟用公用網路存取。 此時,應提交要求以建立針對 StorageAcc1
的豁免資源。 建立豁免之後,StorageAcc1
會在合規性檢閱中顯示為「豁免」。
定期重新審查您的豁免,以確保所有符合條件的項目都已適當豁免,並立即移除任何不符合豁免條件的項目。 屆時,也可以刪除過期的豁免資源。
下一步
- 了解 Azure Resource Graph 來查詢豁免。
- 了解排除與豁免之間的差異。
- 檢閱 Microsoft.Authorization policyExemptions 資源類型。
- 了解如何取得合規性資料。
- 了解如何補救不符合規範的資源。