Terraform azurerm_windows_function_app的ip_restrictions配置报错求助
问题解决:azurerm_windows_function_app ip_restriction 配置报错
报错原因
你使用的AzureRM Provider v3.38.0存在schema验证bug,当ip_restriction块使用virtual_network_subnet_id时,错误地要求必填headers、ip_address或service_tag属性,与官方文档描述不符。同时你的配置逻辑也不符合需求(当前配置是拒绝指定子网,而非仅允许该子网访问)。
解决方案
1. 升级AzureRM Provider版本
将provider版本升级至v3.40.0及以上(该版本修复了此schema验证问题),修改provider配置块:
terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = ">= 3.40.0" } } }
执行terraform init -upgrade完成版本升级。
2. 修正ip_restriction配置逻辑
要实现拒绝所有流量,仅允许指定子网访问,需要配置两条规则:
- 高优先级规则允许指定子网访问
- 低优先级规则拒绝所有其他流量
示例配置:
resource "azurerm_windows_function_app" "windows_function_app" { # 其他属性省略... site_config { # 其他site_config属性省略... ip_restriction = [ # 允许指定子网访问,优先级100(数字越小优先级越高) { action = "Allow" virtual_network_subnet_id = data.terraform_remote_state.netsec_outputs.outputs.vnet_subnets_info["APIM"].id name = "Allow APIM Subnet" priority = 100 }, # 拒绝所有其他流量,优先级200 { action = "Deny" ip_address = "0.0.0.0/0" name = "Deny All" priority = 200 } ] } }
3. 临时 workaround(若无法升级provider)
如果必须使用v3.38.0,可在ip_restriction块中添加空的headers属性绕过验证:
ip_restriction = [ { action = "Allow" virtual_network_subnet_id = data.terraform_remote_state.netsec_outputs.outputs.vnet_subnets_info["APIM"].id name = "Allow APIM Subnet" priority = 100 headers = [] # 临时添加空headers绕过验证 }, { action = "Deny" ip_address = "0.0.0.0/0" name = "Deny All" priority = 200 headers = [] } ]
内容的提问来源于stack exchange,提问作者Chinchachee
相关产品推荐
相关产品推荐

