如何在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
相关产品推荐
相关产品推荐

