Azure Policy 豁免结构
Azure Policy 例外功能用于免除资源层次结构或单个资源对计划或定义的评估。 免除的资源计入总体符合性,但不能被评估或具有暂时豁免。 有关详细信息,请参阅了解 Azure Policy 中的适用性。 Azure Policy 豁免还适用于以下资源管理器模式:Microsoft.Kubernetes.Data、Microsoft.KeyVault.Data。
使用 JavaScript 对象表示法 (JSON) 创建策略例外。 策略例外包含以下各项的元素:
策略例外创建为资源层次结构上的子对象,或创建为被授予例外的单个资源。 无法在资源提供程序模式组件级别创建豁免。 如果删除豁免所应用到的父资源,则也会删除豁免。
例如,以下 JSON 在名为 resourceShouldBeCompliantInit
的计划分配的资源的“豁免”类别中显示了策略例外。 该资源仅受到计划中两个策略定义的豁免,即 customOrgPolicy
自定义策略定义( policyDefinitionReferenceId
: requiredTags
) 和允许的位置内置策略定义 ( 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 的最大长度为 128 个字符,description 的最大长度为 512 个字符。
元数据
通过“元数据”属性,可以创建存储相关信息所需的任何子属性。 在示例中,属性“requestedBy”、“approvedBy”、“approvedOn”和“ticketRef”包含客户值,以提供有关免除请求者、批准者、批准时间,以及该请求的内部跟踪工单的信息。 这些“元数据”属性是示例,但不是必需的,且“元数据”不仅限于这些子属性 。
策略分配 ID
此字段必须是策略分配或计划分配的完整路径名称。
policyAssignmentId
是字符串,而不是数组。 此属性定义父级资源层次结构或单个资源是从哪个分配免除的。
策略定义 ID
如果 policyAssignmentId
用于计划分配,则 policyDefinitionReferenceIds 属性可用于指定主题资源可豁免计划中的哪些策略定义。 由于可以从一个或多个包含的策略定义中免除资源,因此此属性是一个数组。 这些值必须与 policyDefinitions.policyDefinitionReferenceId
字段中的计划定义中的值相匹配。
例外类别
存在两个例外类别,用于组例外:
- 缓解:由于通过另一种方法满足了策略意图,因此授予了豁免。
- 豁免:由于暂时接受资源的不合规状态,因此授予了豁免。 使用此类别的另一个原因是,对于某些资源或资源层次结构,应将其从计划中的一个或多个定义中排除,但不应将其从整个计划中排除。
过期时间
若要设置不再从分配中豁免资源层次结构或单个资源的时间,请设置 expiresOn 属性。 此可选属性必须采用通用 ISO 8601 日期/时间格式 yyyy-MM-ddTHH:mm:ss.fffffffZ
。
注意
达到 expiresOn
日期后,策略例外不会被删除。 该对象会保留用于记录,但不再受到免除。
资源选择器
豁免支持可选属性resourceSelectors
。 该属性在豁免中的作用方式与在分配中的作用方式相同,允许根据资源类型、资源位置或资源是否有存储位置,以受控方式将例外逐步推出或回滚到某些资源子集中。 有关如何使用资源选择器的详细信息,请参阅分配结构。 下面是利用资源选择器的豁免示例 JSON。 在该示例中,仅chinaeast2
中的资源可不进行策略分配:
{
"properties": {
"policyAssignmentId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/CostManagement",
"policyDefinitionReferenceIds": [
"limitSku", "limitType"
],
"exemptionCategory": "Waiver",
"resourceSelectors": [
{
"name": "TemporaryMitigation",
"selectors": [
{
"kind": "resourceLocation",
"in": [ "chinaeast2" ]
}
]
}
]
},
"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"
}
assignmentScopeValidation
的允许值为Default
和DoNotValidate
。 如未指定,将发生默认验证过程。
所需的权限
管理策略例外对象所需的 Azure RBAC 权限位于 Microsoft.Authorization/policyExemptions
操作组中。 内置角色资源策略参与者和安全管理员都具有 read
和 write
权限,策略见解数据编写者(预览版)具有 read
权限。
鉴于授予免除的影响,免除具有额外的安全措施。 除了要求对资源层次结构或单个资源进行 Microsoft.Authorization/policyExemptions/write
操作外,例外的创建者还必须在目标分配上具有 exempt/Action
谓词。
豁免创建和管理
对于存在时间限制或具体的方案(其中仍应对资源或资源层次结构进行跟踪,否则将对其进行评估,但有特定原因不应评估其合规性),建议使用排除。 例如,如果环境分配了内置定义 Storage accounts should disable public network access
(ID: b2982f36-99f2-4db5-8eff-283140c09693
),效果设置为审核。 在合规性评估时,资源“StorageAcc1”不符合要求,但 StorageAcc1 必须出于业务目的启用公共网络访问。 此时,应提交请求以创建面向 StorageAcc1 的豁免资源。 创建豁免后,StorageAcc1 将在合规性评审中显示为豁免。
定期重新访问豁免,以确保所有符合条件的项目都得到适当豁免,并及时移除任何不再有资格豁免的项目。 此时,也可以删除已过期的豁免资源。
后续步骤
- 在豁免中利用 Azure Resource Graph 查询。
- 了解排除与豁免之间的差异。
- 研究 Microsoft.Authorization policyExemptions 资源类型。
- 了解如何获取符合性数据。
- 了解如何修正不符合的资源。