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

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

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

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

先决条件

参数和运算符

使用条件语句选择具有动态成员资格的虚拟网络。 对于需要进一步缩小所选虚拟网络范围的情况,可以使用 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 显示在列表中。

    “创建 Azure Policy”窗口设置标记的屏幕截图,其中包含键值对。

  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逻辑运算符分隔两个条件语句。

  • 基本编辑器:

    使用 OR 逻辑运算符的网络组条件语句的屏幕截图。

  • 高级运算符:

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

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

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

  • 基本编辑器:

    同时使用 OR 和 AND 逻辑运算符的网络组条件语句的屏幕截图。

  • 高级编辑器:

{
   "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 进行筛选,以提高效率。 自动为通过门户指定的任何条件追加此条件。

后续步骤