你当前正在访问 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 目前以公共预览版提供。 此预览版在提供时没有附带服务级别协议,不建议将其用于生产工作负荷。 某些功能可能不受支持或者受限。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款

参数和运算符

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

支持的参数列表:

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

支持的运算符列表:

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

注意

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

基本编辑器

假设订阅中具有以下虚拟网络。 每个虚拟网络都有一个关联的“生产”或“测试”标记 。 只需选择具有“生产”标记且名称中包含 VNet-A 的虚拟网络。

  • VNet-A-EastUS - 生产
  • VNet-A-WestUS - 生产
  • VNet-B-WestUS - 测试
  • VNet-C-WestUS - 测试
  • VNetA - 生产
  • VNetB - 测试

若要开始使用基本编辑器创建条件语句,需要创建新的网络组。

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

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

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

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

  5. 在“条件”下,从“参数”下的下拉列表中选择“Tags”,然后从“运算符”下的下拉列表中选择“Exist”。

  6. 在“条件”下输入“Prod”,然后选择“保存”。

  7. 几分钟后,选择网络组,然后在“设置”下选择“组成员”。 列表中应仅显示 VNet-A-EastUS、VNet-A-WestUS 和 VNetA。

注意

“基本编辑器”仅在创建 Azure 策略期间可用。

高级编辑器

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

  1. 选择在上一部分创建的网络组。 然后选择“条件语句”选项卡。

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

    {
       "allOf": [
          {
             "field": "tags['Environment']",
             "exists": true
          },
          {
             "field": "Name",
             "contains": "VNet-A"
          }
       ]
    }
    

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

  3. 若要为不包含 WestUS 的 Name 字段添加其他条件语句,请在高级编辑器中输入以下内容:

    {
       "allOf": [
          {
             "field": "tags['Environment']",
             "exists": true
          },
          {
             "field": "Name",
             "contains": "VNet-A"
          },
          {
             "field": "Name",
             "notcontains": "WestUS"
          }
       ]
    }
    
  4. 然后选择“评估”。 列表中应仅显示 VNet-A-EastUS 虚拟网络。

  5. 选择“查看 + 保存”,然后在通过验证后选择“保存” 。

有关可在高级编辑器中使用的参数和运算符的完整列表,请参阅参数和运算符。 有关更多示例,请参阅下文:

更多示例

示例 1:仅 OR 运算符

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

  • 基本编辑器:

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

  • 高级运算符:

    {
       "anyOf": [
          {
             "field": "Name",
             "contains": "VNet-A"
          },
          {
             "field": "Name",
             "contains": "VNetA"
          }
       ]
    }
    

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

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

  • 基本编辑器:

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

  • 高级编辑器:

{
   "allOf": [
      {
         "anyOf": [
            {
               "field": "Name",
               "contains": "VNet-A"
            },
            {
               "field": "Name",
               "contains": "VNetA"
            }
         ]
      },
      {
         "field": "Name",
         "notcontains": "West"
      }
   ]
}

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

注意

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

后续步骤