首页 > 解决方案 > 动态 IP 限制以添加 IP 地址、vnet 和服务标签 terraform azure

问题描述

到目前为止,在先前主题的帮助下,我能够使用以下代码部署具有 IP 限制的 App 服务:

多变的

locals {
ip_address_list2 = [            {     
                  ip_add : "20.20.20.3/32",
                  subnet_id = null,
                  service_tag               = null,
                  prior : "140",
                  name = "test1"
            },
           {     
                  ip_add : "10.10.10.2/32",
                  subnet_id = null,
                  service_tag               = null,
                  prior : "141",
                  name = "test2"
            },
            {
                 ip_add : "0.0.0.0/0",
                 subnet_id = null,
                 service_tag               = "AppService"
                 prior : "142",
                 name = "Service_Tag"
            }]}

应用服务:

  site_config {
  dynamic "ip_restriction" {
for_each = local.ip_address_list2
  content {
    ip_address  = ip_restriction.value["ip_add"]
    action                    = "Allow"
    priority                  = ip_restriction.value["prior"]
    virtual_network_subnet_id = ip_restriction.value["subnet_id"]
    service_tag = ip_restriction.value["service_tag"]
    name = ip_restriction.value["name"]
  }}}

但是,如果我为子网添加以下变量,我会收到错误:

        {
             ip_add : "0.0.0.0/0",
             subnet_id = azurerm_subnet.subnet.id,
             service_tag               = null
             prior : "143",
             name = "VirtualNetwork"
        }

截图错误

错误:创建应用服务“hook-service”(资源组“RG-DEV-TEST”):web.AppsClient#CreateOrUpdate:发送请求失败:StatusCode=0 -- 原始错误:Code="BadRequest" Message="IpSecurityRestriction is无效。只能指定 IpAddress 或 VnetSubnetResourceId 属性。” Details=[{"Message":"IpSecurityRestriction 无效。只能指定 IpAddress 或 VnetSubnetResourceId 属性。"},{"Code":"BadRequest"},{"ErrorEntity":{"Code":"BadRequest"," ExtendedCode":"51021","Message":"IpSecurityRestriction 无效。只能指定 IpAddress 或 VnetSubnetResourceId 属性。","MessageTemplate":"{0} 无效。{1}","Parameters":["

注意:仅使用terraform 计划的验证可以无误地完成。仅在terraform apply后才观察到错误

谢谢

标签: azure-web-app-serviceterraform-provider-azureazure-rm

解决方案


您应该使用以下内容:

locals {
 ip_address_list = [            {     
                  ip_add : "20.20.20.3/32",
                  prior : "140",
                  name = "test1"
            },
           {     
                  ip_add : "10.10.10.2/32",
                  prior : "141",
                  name = "test2"
            }
 ]
ip_address_list2=[            {
                 subnet = "${data.azurerm_subnet.name.id}" ,
                 name = "test3"
                 prior ="143"
            }]
            }

然后你可以使用:

  site_config {
    dynamic "ip_restriction"{
      for_each=local.ip_address_list
      content{
        ip_address  = ip_restriction.value["ip_add"]
    action                    = "Allow"
    priority                  = ip_restriction.value["prior"]
    name = ip_restriction.value["name"]
      }
    }
dynamic "ip_restriction"  {
  for_each = local.ip_address_list2
  content{
    name = ip_restriction.value["name"]
    virtual_network_subnet_id = ip_restriction.value["subnet"]
    priority = ip_restriction.value["prior"]
  }
}
}

输出:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

注意: 对于 IP_address 限制,您必须提供 ip_add 、 Prior 和 name。但是对于子网限制,您必须只提供子网 ID、优先级和名称。提供 service_tag 会出现同样的错误。


推荐阅读