You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Web App+SQL私有端点零信任架构配置与测试咨询

Azure Web App与SQL零信任协作配置及问题排查

一、私有DNS生效验证方法

私有DNS仅在关联的VNet内部生效,测试需在VNet内资源(如你的Web App)中执行:

  • 登录Web App的Kudu控制台,运行命令:nslookup <你的SQL服务器名>.database.windows.net
    • 若返回私有端点所在子网的IP,说明私有DNS正常工作;
    • 若返回公网IP,检查:
      1. 私有DNS区域privatelink.database.windows.net是否已关联Web App所在的VNet;
      2. SQL私有端点的DNS记录是否自动注册到该私有DNS区域;
      3. Web App的VNet集成是否已正确配置,确保其使用VNet内的DNS解析。

注:本地环境未通过VPN/ExpressRoute接入VNet时,直接nslookup会返回公网IP,属于正常现象。

二、关闭SQL公网访问

SQL仍能通过公网访问是因为默认公网访问处于开启状态,需关闭:

Terraform配置示例

resource "azurerm_mssql_server" "example" {
  # 其他基础配置...
  public_network_access_enabled = false # 关闭公网访问
}

关闭后,SQL仅接受来自私有端点、VNet集成资源或信任服务的流量。

三、实现零信任入站规则:仅允许Web App访问SQL

  1. 配置SQL VNet防火墙规则
    添加Web App集成子网的CIDR到SQL允许列表,确保只有该子网的流量能访问SQL:
resource "azurerm_mssql_virtual_network_rule" "webapp_access" {
  name             = "webapp-sql-access-rule"
  server_id        = azurerm_mssql_server.example.id
  subnet_id        = azurerm_subnet.webapp_integration.id
  ignore_missing_vnet_service_endpoint = true # 若子网未开启SQL服务端点可设为true,建议优先开启服务端点
}
  1. 强化身份验证(可选)
    禁用SQL账号登录,改用Azure AD身份验证,让Web App通过托管标识访问SQL,进一步缩小授权范围:
resource "azurerm_mssql_active_directory_administrator" "example" {
  server_name         = azurerm_mssql_server.example.name
  resource_group_name = azurerm_resource_group.example.name
  login_username      = "sql-ad-admin"
  object_id           = "<Azure AD组/用户的Object ID>"
  tenant_id           = data.azurerm_client_config.current.tenant_id
}

四、实现零信任出站规则:SQL仅能向Web App发起流量

通过SQL所在子网的NSG(网络安全组)限制出站流量:

  1. 拒绝默认所有出站流量
    NSG默认允许所有出站,需添加优先级较高的拒绝规则:
resource "azurerm_network_security_rule" "deny_all_outbound" {
  name                        = "DenyAllOutbound"
  priority                    = 100
  direction                   = "Outbound"
  access                      = "Deny"
  protocol                    = "*"
  source_port_range           = "*"
  destination_port_range      = "*"
  destination_address_prefix  = "*"
  resource_group_name         = azurerm_resource_group.example.name
  network_security_group_name = azurerm_network_security_group.sql_subnet.name
}
  1. 添加允许访问Web App的出站规则
    允许SQL访问Web App的出站IP(若Web App配置了私有端点,可替换为私有IP范围):
resource "azurerm_network_security_rule" "allow_sql_to_webapp" {
  name                        = "AllowSQLToWebApp"
  priority                    = 50 # 优先级高于拒绝规则
  direction                   = "Outbound"
  access                      = "Allow"
  protocol                    = "Tcp"
  source_port_range           = "*"
  destination_port_range      = "443" # Web App HTTPS端口
  destination_address_prefixes = split(",", azurerm_app_service.example.outbound_ip_addresses)
  resource_group_name         = azurerm_resource_group.example.name
  network_security_group_name = azurerm_network_security_group.sql_subnet.name
}
  1. 补充必要系统流量(可选)
    若SQL需要Azure AD验证、日志上传等系统流量,可添加允许到特定Azure服务的规则(如destination_address_prefix = "AzureCloud.<你的区域>"),但需最小化授权范围。

内容的提问来源于stack exchange,提问作者Nayden Van

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 06:06:29