如何通过Terraform为Azure应用配置分配子网并限制私有访问
实现Azure应用配置的子网访问限制(Terraform方案)
要限制Azure应用配置仅允许特定子网访问,核心是通过**专用终结点(Private Endpoint)**实现,同时关闭公共网络访问入口。以下是完整的Terraform配置步骤:
1. 确保目标子网支持专用终结点
假设你已有目标VNet和子网,若子网之前启用了私有终结点网络策略,需先禁用(否则无法部署专用终结点):
resource "azurerm_subnet" "restricted_subnet" { name = "restricted-subnet" resource_group_name = azurerm_resource_group.example.name virtual_network_name = azurerm_virtual_network.example.name address_prefixes = ["10.0.1.0/24"] # 必须禁用此策略才能部署专用终结点 private_endpoint_network_policies_enabled = false }
2. 创建带网络限制的应用配置实例
创建应用配置时直接关闭公共网络访问,仅允许专用终结点连接:
resource "azurerm_app_configuration" "sensitive_config" { name = "sensitive-app-config" resource_group_name = azurerm_resource_group.example.name location = azurerm_resource_group.example.location # 关闭公共网络访问,仅允许专用终结点 public_network_access_enabled = false # 可选:启用软删除防止敏感配置误删 soft_delete_retention_days = 7 }
3. 部署专用终结点关联目标子网
创建专用终结点,将应用配置与指定子网绑定:
resource "azurerm_private_endpoint" "app_config_pe" { name = "app-config-pe" resource_group_name = azurerm_resource_group.example.name location = azurerm_resource_group.example.location subnet_id = azurerm_subnet.restricted_subnet.id private_service_connection { name = "app-config-psc" private_connection_resource_id = azurerm_app_configuration.sensitive_config.id subresource_names = ["configurationStores"] # 应用配置固定子资源名称 is_manual_connection = false } }
4. 配置私有DNS解析(可选但推荐)
若需要子网内资源通过应用配置默认域名访问,需配置私有DNS关联:
# 创建应用配置对应的私有DNS区域 resource "azurerm_private_dns_zone" "app_config_zone" { name = "privatelink.azconfig.io" resource_group_name = azurerm_resource_group.example.name } # 将DNS区域与VNet关联 resource "azurerm_private_dns_zone_virtual_network_link" "app_config_dns_link" { name = "app-config-dns-link" resource_group_name = azurerm_resource_group.example.name private_dns_zone_name = azurerm_private_dns_zone.app_config_zone.name virtual_network_id = azurerm_virtual_network.example.id } # 为专用终结点添加DNS记录 resource "azurerm_private_dns_a_record" "app_config_dns_record" { name = azurerm_app_configuration.sensitive_config.name zone_name = azurerm_private_dns_zone.app_config_zone.name resource_group_name = azurerm_resource_group.example.name ttl = 300 records = [azurerm_private_endpoint.app_config_pe.private_service_connection[0].private_ip_address] }
验证效果
部署完成后:
- 仅目标子网内的资源可访问该应用配置
- 公共网络无法连接到该实例
- 配置私有DNS后,子网内资源可直接通过应用配置默认域名访问
内容的提问来源于stack exchange,提问作者gera1390
相关产品推荐
相关产品推荐

