如何使用Terraform为Azure APIM配置专用终结点?
如何用Terraform配置Azure APIM专用终结点
核心配置逻辑
Azure APIM的专用终结点需要以下组件协同配置:
- 已创建的APIM实例(支持外部模式或内部模式,内部模式默认仅允许VNet内访问,外部模式可同时兼容公网与专用终结点)
- 虚拟网络及专用子网(子网必须禁用
PrivateEndpointNetworkPolicies) - 专用终结点资源,关联APIM的专用链接服务
- APIM与专用终结点的连接批准(微软托管服务需手动/自动批准,取决于配置)
完整Terraform代码示例
假设你已存在APIM实例和虚拟网络,以下是添加专用终结点的完整配置:
1. 创建专用子网(若未存在)
resource "azurerm_subnet" "apim_pe_subnet" { name = "apim-private-endpoint-subnet" resource_group_name = azurerm_resource_group.example.name virtual_network_name = azurerm_virtual_network.example.name address_prefixes = ["10.0.2.0/24"] # 专用终结点所在子网必须禁用此策略 private_endpoint_network_policies_enabled = false }
2. 配置APIM专用终结点
resource "azurerm_private_endpoint" "apim_pe" { name = "apim-private-endpoint" resource_group_name = azurerm_resource_group.example.name location = azurerm_resource_group.example.location subnet_id = azurerm_subnet.apim_pe_subnet.id private_service_connection { name = "apim-private-service-connection" private_connection_resource_id = azurerm_api_management.example.id subresource_names = ["gateway"] # APIM专用链接的固定子资源值 is_manual_connection = false # false为自动批准(需对应权限),true则需手动在APIM门户批准 } # 可选:添加专用DNS区域关联,实现VNet内通过APIM默认域名访问 private_dns_zone_group { name = "apim-dns-group" private_dns_zone_ids = [azurerm_private_dns_zone.apim_private_zone.id] } }
3. 配置专用DNS区域(推荐)
若需在VNet内通过APIM默认域名(如xxx.azure-api.net)访问,需创建并关联专用DNS区域:
resource "azurerm_private_dns_zone" "apim_private_zone" { name = "privatelink.azure-api.net" resource_group_name = azurerm_resource_group.example.name } # 关联DNS区域到目标虚拟网络 resource "azurerm_private_dns_zone_virtual_network_link" "apim_dns_link" { name = "apim-dns-vnet-link" resource_group_name = azurerm_resource_group.example.name private_dns_zone_name = azurerm_private_dns_zone.apim_private_zone.name virtual_network_id = azurerm_virtual_network.example.id registration_enabled = false }
常见报错及解决
你遇到的配置报错,大概率是以下原因之一:
- 子网策略未禁用:专用终结点所在子网必须设置
private_endpoint_network_policies_enabled = false,否则无法创建 - 子资源名称错误:APIM专用链接的子资源固定为
gateway,填其他值会直接报错 - 权限不足:若设置
is_manual_connection = false,Terraform使用的服务主体需拥有APIM的Microsoft.ApiManagement/service/privateEndpointConnections/write权限,否则自动批准失败,此时可改为is_manual_connection = true,再到APIM门户的「专用终结点连接」中手动批准 - VNet配置冲突:若APIM为内部模式(
virtual_network_type = "Internal"),需确保专用终结点子网与APIM绑定的VNet一致,且无网络策略冲突
验证方式
部署完成后可通过以下方式确认配置生效:
- 登录Azure门户,进入APIM实例的「专用终结点连接」,查看连接状态为「已批准」
- 在VNet内的虚拟机上测试访问APIM的专用IP或默认域名,确认可正常连接
内容的提问来源于stack exchange,提问作者Asterix
相关产品推荐
相关产品推荐

