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

使用 Azure Policy 在 Azure Virtual Network Manager 中定义动态网络组成员身份

本文介绍如何使用 Azure Policy 条件语句创建具有动态成员身份的网络组。 通过从下拉菜单选择参数和运算符,使用基本编辑器创建这些条件语句。 你还将了解如何使用高级编辑器更新现有网络组的条件语句。

Azure Policy 是一项支持大规模强制实施按资源治理的服务。 它可用于指定定义组成员身份的条件表达式,而不是虚拟网络的显式列表。 此条件会继续动态地支持网络组,并允许虚拟网络在满足条件更改时不执行任何 Network Manager 操作自动加入和离开组。

重要

Azure Virtual Network Manager 现已正式发布,可用于 Virtual Network Manager 和中心辐射型连接配置。 网格连接配置仍以公共预览版提供。

安全配置和安全管理员规则在以下区域中正式发布:

  • 澳大利亚东部
  • 澳大利亚东南部
  • 巴西南部
  • 巴西东南部
  • 东亚
  • 北欧
  • 法国南部
  • 德国中西部
  • 印度中部
  • 印度南部
  • 印度西部
  • 以色列中部
  • 意大利北部
  • 日本东部
  • Jio 印度西部
  • 韩国中部
  • 挪威东部
  • 挪威西部
  • 波兰中部
  • 卡塔尔中部
  • 南非北部
  • 南非西部
  • 瑞典中部
  • 瑞典南部
  • 瑞士北部
  • 阿拉伯联合酋长国北部
  • 美国东部
  • 英国北部
  • 美国中西部地区

所有其他区域仍处于公共预览版。

此预览版在提供时没有附带服务级别协议,不建议将其用于生产工作负荷。 某些功能可能不受支持或者受限。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款

先决条件

参数和运算符

使用条件语句选择具有动态成员资格的虚拟网络。 对于需要进一步缩小所选虚拟网络范围的情况,可以使用 AND 和 OR 等逻辑运算符来定义多个条件语句 。

支持的参数列表:

Parameters 高级编辑器字段
Name Name
ID Id
标记 tag['tagName']
订阅名称 [subscription().Name]
订阅 ID [subscription().Id]
订阅标记 [subscription().tags['tagName']]
资源组名称 [resourceGroup().Name]
资源组 ID [resourceGroup().Id]
资源组标记 [resourceGroup().tags['tagName']]

支持的运算符列表:

运算符 高级编辑器
Contains "contains": <>
不包含 "notcontains": <>
位于 "in": <>
不位于 "notin": <>
等于 "equals": <>
不等于 "notequals": <>
包含任意 "contains": <>
包含所有 "contains": <>
不包含任何 "notcontains": <>
Exists "exists": true
不存在 "exists": false

注意

Exists 和 Does not exist 运算符只能与 Tags 参数一起使用 。

基本编辑器

假设订阅中具有以下虚拟网络。 每个虚拟网络都有一个名为 environment 的关联标记,相应的标记值为 Production 或 Test

虚拟网络 标记名称 标记值
myVNet01-EastUS 环境 production
myVNet01-WestUS 环境 production
myVNet02-WestUS 环境 测试
myVNet03-WestUS 环境 测试

如果只想选择其标记具有键值对 environment 等于 production 的虚拟网络。 若要开始使用基本编辑器创建条件语句,需要创建新的网络组。

  1. 转到 Azure Virtual Network Manager 实例,在“设置”下选择“网络组”。 然后选择“+ 创建”以创建新的网络组。

  2. 为网络组输入“名称”和可选的“说明”,然后选择“添加”。

  3. 从列表中选择网络组,然后选择“创建 Azure 策略”。

  4. 输入“策略名称”并保留“范围”选择(除非需要更改)。

  5. 在“条件”下,从“参数”下的下拉列表中选择“标记”,然后从“运算符”下的下拉列表中选择“键值对”

  6. 在“条件下”输入“environment”和“production”然后选择“预览资源”。 应该会看到 myVNet01-EastUS 和 myVNet01-WestUS 显示在列表中。

    Screenshot of Create Azure Policy window setting tag with key value pair.

  7. 选择“关闭”和“保存”

  8. 几分钟后,选择网络组,然后在“设置”下选择“组成员”。 应该只会看到 myVNet01-WestUS 和 myVNet01-WestUS。

重要

“基本编辑器”仅在创建 Azure 策略期间可用。 创建策略后,将使用 Virtual Network Manager 的“策略”部分中的 JSON 或通过 Azure Policy 完成所有编辑。

高级编辑器

高级编辑器可用于在创建网络组或更新现有网络组期间选择虚拟网络。 基于 JSON 的高级编辑器对于有经验的用户创建和更新复杂的 Azure Policy 条件语句很有用。

使用高级编辑器创建新策略

  1. 转到 Azure Virtual Network Manager 实例,在“设置”下选择“网络组”。 然后选择“+ 创建”以创建新的网络组。

  2. 为网络组输入“名称”和可选的“说明”,然后选择“添加”。

  3. 从列表中选择网络组,然后选择“创建 Azure 策略”。

  4. 输入“策略名称”并保留“范围”选择(除非需要更改)。

  5. 在“条件”下,选择“高级(JSON)编辑器”打开编辑器。

  6. 在文本框中输入以下 JSON 代码,然后选择“保存”:

       {
       "field": "Name",
       "contains": "myVNet01"
       }
    
  7. 几分钟后,选择网络组,然后在“设置”下选择“组成员”。 应该只会看到 myVNet01-WestUS 和 myVNet01-EastUS。

重要

使用虚拟网络管理器创建的任何 Azure 策略都将位于 Azure Policy 服务区域中。 删除虚拟网络管理器实例时,不会从 Azure Policy 分配和定义中删除这些策略。 需要手动删除这些策略。 了解如何删除 Azure Policy

编辑现有策略

  1. 选择在上一部分创建的网络组。 然后选择“策略”选项卡。

  2. 选择在上一部分创建的策略。

  3. 你将在高级编辑器视图中看到如下所示的网络组的条件语句:

    [
      {
         "field": "Name",
         "contains": "myVNet01"
      }
    ]
    
  4. 若要为不包含 WestUS 的 Name 字段添加其他条件语句,请在高级编辑器中输入以下内容:

    {
       "allOf": [
    
          {
             "field": "Name",
             "contains": "VNet01"
          },
          {
             "field": "Name",
             "notcontains": "WestUS"
          }
       ]
    }
    

    "allOf" 参数包含由 AND 逻辑运算符分隔的条件语句。

  5. 选择“保存”。

  6. 几分钟后,选择网络组,然后在“设置”下选择“组成员”。 应该只会看到 myVNet01-EastUS。

有关可在高级编辑器中使用的参数和运算符的完整列表,请参阅参数和运算符

更多示例

下面是高级编辑器中条件语句的更多示例。

示例 1:仅 OR 运算符

此示例使用 OR逻辑运算符分隔两个条件语句。

  • 基本编辑器:

    Screenshot of network group conditional statement using the OR logical operator.

  • 高级运算符:

    {
       "anyOf": [
          {
             "field": "Name",
             "contains": "myVNet01"
          },
          {
             "field": "Name",
             "contains": "myVNet02"
          }
       ]
    }
    

"anyOf" 参数包含由 OR 逻辑运算符分隔的条件语句。

示例 2:同时使用 AND 和 OR 运算符

  • 基本编辑器:

    Screenshot of network group conditional statement using both OR and AND logical operator.

  • 高级编辑器:

{
   "allOf": [
      {
         "anyOf": [
            {
               "field": "Name",
               "contains": "myVNet01"
            },
            {
               "field": "Name",
               "contains": "myVNet02"
            }
         ]
      },
      {
         "field": "Name",
         "notcontains": "West"
      }
   ]
}

代码中同时使用 "allOf""anyOf"。 由于 AND 运算符位于列表末尾,因此它处于包含具有 OR 运算符的两个条件语句的代码外部 。

示例 3:在高级编辑器中使用自定义标记值

此示例创建了一个条件语句,用于查找名称包含 myVNet 且 environment 标记等于 production 的虚拟网络。

  • 高级编辑器:

    
       {
            "allOf": [
              {
                 "field": "Name",
                 "contains": "myVNet"
              },      
              {
                 "field": "tags['environment']",
                 "equals": "production"
              }
            ]    
       }
    
    

    注意

    条件应按资源类型 Microsoft.Network/virtualNetwork 进行筛选,以提高效率。 自动为通过门户指定的任何条件追加此条件。

后续步骤