你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure Policy 豁免结构

Azure Policy 例外功能用于免除资源层次结构或单个资源对计划或定义的评估。 免除的资源计入总体符合性,但不能被评估或具有暂时豁免。 有关详细信息,请参阅了解 Azure Policy 中的适用性。 Azure Policy 豁免还适用于以下资源管理器模式Microsoft.Kubernetes.DataMicrosoft.KeyVault.DataMicrosoft.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"
  }
}

显示名称和说明

使用 displayNamedescription 来标识策略豁免,并提供其与特定资源配合使用时的上下文。 displayName 的最大长度为 128 个字符,description 的最大长度为 512 个字符。

元数据

通过 metadata 属性,可创建存储相关信息所需的任何子属性。 在示例中,属性 requestedByapprovedByapprovedOnticketRef 包含客户值,以提供有关豁免请求者、批准者、批准时间,以及该请求的内部跟踪工单的信息。 这些 metadata 属性是示例,但不是必需的,且 metadata 不仅限于这些子属性。

策略分配 ID

此字段必须是策略分配或计划分配的完整路径名称。 policyAssignmentId 是字符串,而不是数组。 此属性定义父级资源层次结构或单个资源是从哪个分配免除的。

策略定义 ID

如果 policyAssignmentId 用于计划分配,则 policyDefinitionReferenceId 属性可用于指定主题资源可豁免计划中的哪些策略定义。 由于可以从一个或多个包含的策略定义中免除资源,因此该属性是一个数组。 这些值必须与 policyDefinitions.policyDefinitionReferenceId 字段中的计划定义中的值相匹配。

例外类别

存在两个例外类别,用于组例外:

  • 缓解:由于通过另一种方法满足了策略意图,因此授予了豁免。
  • 豁免:由于暂时接受资源的不合规状态,因此授予了豁免。 使用此类别的另一个原因是从一个计划中的一个或多个定义中排除一个资源或资源层次结构,但不应将其从整个计划中排除。

过期日期

若要设置不再从分配中豁免资源层次结构或单个资源的时间,请设置 expiresOn 属性。 此可选属性必须采用通用 ISO 8601 日期/时间格式 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的允许值为DefaultDoNotValidate。 如未指定,则执行默认验证过程。

所需的权限

管理策略豁免对象所需的 Azure 基于角色的访问控制 (Azure RBAC) 权限位于 Microsoft.Authorization/policyExemptions 操作组中。 内置角色资源策略参与者安全管理员都具有 readwrite 权限,策略见解数据编写者(预览版)具有 read 权限。

鉴于授予豁免的影响,豁免具有额外的安全措施。 除了要求对资源层次结构或单个资源进行 Microsoft.Authorization/policyExemptions/write 操作外,例外的创建者还必须在目标分配上具有 exempt/Action 谓词。

豁免创建和管理

对于存在时间限制或具体的方案(其中仍应对资源或资源层次结构进行跟踪,否则将对其进行评估,但有特定原因不应评估其合规性),建议使用排除。 例如,如果环境分配了内置定义 Storage accounts should disable public network access (ID: b2982f36-99f2-4db5-8eff-283140c09693),效果设置为审核。 在合规性评估时,资源 StorageAcc1 不符合要求,但 StorageAcc1 必须出于业务目的启用公用网络访问。 此时,应提交请求以创建面向 StorageAcc1 的豁免资源。 创建豁免后,StorageAcc1 将在合规性评审中显示为“豁免”

定期重新访问豁免,以确保所有符合条件的项目都得到适当豁免,并及时移除任何没有豁免资格的项目。 此时,也可删除已过期的豁免资源。

后续步骤