You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Terraform中获取Azure Windows Web App入站IP配置SQL防火墙规则?

如何用Terraform配置Azure Web App访问MSSQL的防火墙规则

首先要明确一个关键逻辑:Azure Web App作为客户端访问MSSQL服务器时,是从出站IP地址发起请求的,而非入站IP。入站IP是外部用户访问Web App时使用的地址,和Web App主动连接MSSQL的场景无关,这也是azurerm_windows_web_app资源没有暴露inbound_ip_address属性的原因——这个属性对你的需求来说没用。

正确的做法是将Web App的出站IP地址添加到MSSQL的防火墙规则中,具体Terraform配置可以参考以下两种方式:

方式1:为每个出站IP创建单独的防火墙规则

如果Web App有多个离散的出站IP,用for_each遍历所有出站IP逐个创建规则:

resource "azurerm_mssql_firewall_rule" "web_app_outbound" {
  for_each         = toset(split(",", azurerm_windows_web_app.api.outbound_ip_addresses))
  name             = "web-app-outbound-${each.value}"
  server_id        = azurerm_mssql_server.api.id
  start_ip_address = each.value
  end_ip_address   = each.value
}

方式2:合并出站IP到单个规则(仅当IP连续时适用)

如果Web App的出站IP是连续网段,可以提取首尾IP创建覆盖规则(这种情况较少见):

locals {
  outbound_ips = split(",", azurerm_windows_web_app.api.outbound_ip_addresses)
  first_ip     = local.outbound_ips[0]
  last_ip      = local.outbound_ips[length(local.outbound_ips)-1]
}

resource "azurerm_mssql_firewall_rule" "web_app_outbound" {
  name             = "web-app-outbound-range"
  server_id        = azurerm_mssql_server.api.id
  start_ip_address = local.first_ip
  end_ip_address   = local.last_ip
}

额外说明

  • Azure Web App的出站IP地址列表可通过azurerm_windows_web_app的outbound_ip_addresses属性获取,该属性返回逗号分隔的IP字符串。
  • 如果Web App使用了VNet集成,应通过配置VNet内的防火墙规则或服务端点来允许访问,而非直接添加出站IP。

内容的提问来源于stack exchange,提问作者Yoro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 00:36:27