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

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

在本文中,你将了解如何在 Azure Virtual Network Manager 中使用 Azure Policy 来定义动态网络组成员身份。 通过动态网络组,你可以在组织中创建可缩放的动态调整的虚拟网络环境。

Azure Policy 概述

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

注意

Azure Policy 仅用于定义动态网络组成员身份。

网络组策略定义

在 Azure Policy 中创建和实现策略首先要创建策略定义资源。 每个策略定义都具有一些条件(用于强制执行策略定义)以及在满足条件时发生的定义效果。

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

"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资源提供程序属性。 因此,需要在策略定义中指定 Custom 的 policyType。 在 Virtual Network Manager 中创建策略以动态添加成员时,会在创建策略时自动应用此策略。 只需在通过 Azure Policy 或 Virtual Network Manager 仪表板以外的其他工具创建新策略定义时,才需要选择 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 的分配结构

可以使用 API/PS/CLI 或 Azure Policy 门户创建策略定义和分配。

所需的权限

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

  • Microsoft.Authorization/policyassignments/WriteMicrosoft.Authorization/policydefinitions/Write 在你的分配范围内是必需的。
  • 需要对“添加到网络组”部分中引用的目标网络组执行 Microsoft.Network/networkManagers/networkGroups/join/action 操作。 此权限允许从目标网络组中添加和移除对象。
  • 使用集定义同时分配多个策略时,在分配时分配的所有定义都需要并发 Microsoft.Network/networkManagers/networkGroups/join/action 权限。

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

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

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

重要

若要修改 AVNM 动态组,必须仅通过 Azure RBAC 角色分配授予访问权限。 不支持经典管理员/旧式授权;这意味着,如果你的帐户仅分配有共同管理员订阅角色,则你对 AVNM 动态组没有权限。

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

  • 创建虚拟网络需要 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中删除策略定义。 删除完成后,在将新定义关联到网络组时,无法重复使用或重新引用定义名称。

后续步骤