虚拟网络对等与服务端点:如何实现两个Azure应用服务互通
Azure App Service跨VNet对等后403错误排查
问题背景
- 手动创建App Service A,部署在vnetA的subnetA中
- 通过Terraform创建App Service B,部署在vnetB的subnetB中
- 已建立两个虚拟网络的对等连接,且确认地址空间无重叠
- subnetB已配置应用服务委派和
Microsoft.Web服务端点,但AppA调用AppB仍返回403错误
当前subnetB的Terraform配置
resource "azurerm_subnet" "subnetB" { name = "subnetB" resource_group_name = "rgB" virtual_network_name = "vnetB" address_prefixes = [cidrsubnet(azurerm_virtual_network.vnetB.address_space[0], 2, 1)] delegation { name = "appServiceDelegation" service_delegation { name = "Microsoft.Web/serverFarms" actions = ["Microsoft.Network/virtualNetworks/subnets/action"] } } service_endpoints = ["Microsoft.Web"] }
可能遗漏的配置项
1. App Service B的访问限制未添加对等VNet允许规则
默认情况下,配置了VNet集成的App Service仅允许自身VNet内的流量访问。需要手动将vnetA的地址空间加入App Service B的允许列表:
resource "azurerm_app_service" "appB" { # 基础配置... site_config { ip_restriction { name = "AllowVnetA" ip_address = "<vnetA的地址前缀,例如10.0.0.0/16>" priority = 100 action = "Allow" } } }
2. 确认VNet对等连接的双向配置
检查vnetA与vnetB的对等连接是否为双向:
- 两边对等连接均需启用允许转发流量
- 若涉及网关传输,需同步启用允许网关传输
3. 验证App Service B的VNet集成配置
确保App Service B已正确关联到subnetB,Terraform中需添加以下配置:
resource "azurerm_app_service" "appB" { # 其他配置... virtual_network_subnet_id = azurerm_subnet.subnetB.id }
4. subnetA添加Microsoft.Web服务端点
若App Service A需通过服务端点访问App Service B,需在subnetA的配置中添加Microsoft.Web服务端点(无论subnetA是手动还是Terraform创建)。
5. 检查NSG入站规则
- 检查subnetB关联的NSG,添加入站规则允许vnetA的地址空间访问80/443端口
- 检查subnetA关联的NSG,添加出站规则允许访问vnetB的地址空间及80/443端口
内容的提问来源于stack exchange,提问作者sobrod
相关产品推荐
相关产品推荐

