共用方式為

在 Azure Virtual Network Manager 中使用 Azure Policy 配置网络组

本文介绍如何在 Azure 虚拟网络管理器中使用 Azure Policy 来有条件地定义网络组成员身份。 使用 Azure Policy 定义网络组成员身份可以自动将配置部署到网络资源,从而为组织创建可缩放的动态虚拟网络环境。

Azure Policy 概述

Azure Policy 通过将这些资源的属性与所需的业务规则进行比较来评估 Azure 中的资源。 这些以 JSON 格式描述的业务规则称为策略定义。 创建业务规则后,策略定义将分配给 Azure 支持的任何资源范围,例如管理组、订阅、资源组或单个资源。 策略分配适用于该分配的 Resource Manager 范围内的所有资源。 借助 Azure Policy 中的范围详细了解范围的使用情况。

网络组策略定义

在 Azure Policy 中创建和实现策略首先要创建策略定义资源。 每个策略定义都有强制条件,以及满足条件时发生的已定义效果。

使用 Azure 虚拟网络管理器 的网络组,策略定义包括用于匹配符合条件的虚拟网络的条件表达式,并指定匹配虚拟网络加入的网络组。 addToNetworkGroup 效果用于将资源放置在目标网络组中。 下面是具有 addToNetworkGroup 效果的策略规则定义示例。 对于所有自定义策略,mode 属性设置为 Microsoft.Network.Data 以面向网络组资源提供程序,并且为 Azure Virtual Network Manager 创建策略定义时需要进行该设置。

注释

Azure Policy 目前仅支持虚拟网络的网络组成员身份定义。

"mode": "Microsoft.Network.Data",
"policyRule": {
      "if": {
        "allOf": [
          {
            "field": "Name",
            "contains": "-gen"
          }
        ]
      },
      "then": {
        "effect": "addToNetworkGroup",
        "details": {
          "networkGroupId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup2/providers/Microsoft.Network/networkManagers/myAVNM/networkGroups/myNG"
        }
      }
}

重要

定义策略时, networkGroupId 必须是目标网络组的完整资源 ID,如示例定义中所示。 它不支持策略定义中的参数化。 如果需要参数化网络组,可以利用 Azure 资源管理器模板创建策略定义和分配。

当 Azure Policy 与 Azure Virtual Network Manager 一起使用时,该策略面向 Microsoft.Network.Data。 由于此行为,需要在策略定义中指定 policyTypeCustom创建策略以在 Azure 虚拟网络管理器中动态添加成员时,会在创建策略时自动应用该策略。 只需在通过 Azure Policy 或其他工具在 Azure 虚拟网络管理器仪表板外部创建新策略定义时,才需要选择custom

下面是策略定义示例,其中 policyType 属性设置为 Custom


"properties": {
      "displayName": "myProdAVNM",
      "policyType": "Custom",
      "mode": "Microsoft.Network.Data",
      "metadata": {
        "category": "Azure Virtual Network Manager",
        "createdBy": "-----------------------------",
        "createdOn": "2023-04-10T15:35:35.9308987Z",
        "updatedBy": null,
        "updatedOn": null
      }
}

详细了解策略定义结构

创建策略分配

类似于 Virtual Network Manager 配置,策略定义在创建时不会立即生效。 若要开始应用,必须创建一个策略分配,用于分配要在给定范围进行评估的定义。 目前,范围中的所有资源都根据定义进行评估,这允许你在多个位置分配单个可重用定义,以便进行更精细的组成员身份控制。 详细了解 Azure Policy 的分配结构

可以通过 Azure 虚拟网络管理器或 Azure Policy 创建策略定义和分配。

所需的权限

若要将网络组与 Azure Policy 配合使用,用户需要以下权限:

  • Microsoft.Authorization/policyassignments/WriteMicrosoft.Authorization/policydefinitions/Write 在你的分配范围内是必需的。
  • 目标网络组需要 < /gt;。 此权限允许从目标网络组中添加和删除成员资源。
  • 使用集定义同时分配多个策略时, Microsoft.Network/networkManagers/networkGroups/join/action 需要同时分配所有定义并发权限。

若要设置所需权限,可以借助基于角色的访问控制为用户分配内置角色:

  • 目标网络组的网络参与者角色
  • 目标范围级别的“资源策略参与者”角色。

要实现更精细的角色分配,可以使用 权限和 Microsoft.Network/networkManagers/networkGroups/join/action 权限创建policy/write

重要

若要使用 Azure Policy 修改 Azure 虚拟网络管理器网络组,必须仅通过 Azure Role-Based 访问控制(RBAC)角色分配授予访问权限。 不支持经典管理员或旧版授权。 这意味着,如果你的帐户仅分配了共同管理员订阅角色,则你对网络组没有任何权限。

除了所需的权限,订阅和管理组还必须向以下资源提供程序注册:

  • 创建虚拟网络需要 Microsoft.Network
  • 使用 Azure Policy 需要 Microsoft.PolicyInsights

若要设置所需的提供程序,请使用 Azure PowerShell 中的 Register-AzResourceProvider 或 Azure CLI 中的 az provider register

有用的提示

类型筛选

配置策略定义时,建议包含一个类型条件,以将其范围限制为虚拟网络。 此条件允许策略筛选出非虚拟网络作,并提高策略资源的效率。

区域切片

策略资源是全局性的,这意味着无论区域如何,对策略定义的任何更改都会对分配范围下的所有资源生效。 如果需要区域切片或逐步推出,建议包括条件 where location in [] 。 然后,可以逐步展开位置列表,逐步推出网络组成员身份和后续配置部署。

分配范围

如果遵循使用 Azure 管理组的最佳做法,则可能已在分层结构中组织资源。 使用策略分配,可以将相同的策略定义分配给层次结构中的多个不同范围,从而可以更精细地控制哪些资源符合网络组的条件。

删除与网络组关联的 Azure Policy 定义

你可能在不再需要 Azure Policy 定义的情况下。 方案包括删除与策略关联的网络组,或者具有不再需要的未使用策略。 若要删除策略,必须删除策略关联对象,然后在 Azure Policy 中删除策略定义。 删除完成后,将新定义关联到网络组时,不再重新引用定义名称。

后续步骤