使用Terraform创建关联私有存储账户的SQL Server漏洞评估资源失败
问题根因
你遇到的504网关超时本质是SQL Server漏洞评估服务无法访问配置的私有存储账户,请求超时触发了网关报错,核心有以下几个配置错误:
- 漏洞评估资源同时配置了存储账户访问密钥和托管身份权限,私有存储场景下不支持使用存储密钥进行认证,密钥认证模式下服务会尝试走公网访问存储,被存储账户的公网禁用规则拦截
- 存储账户网络规则中
private_link_access块配置错误,你填写的endpoint_resource_id为SQL Server资源ID,实际需要填写存储私有端点的资源ID,导致私有端点访问存储的请求被拦截 - 漏洞评估资源缺少显式依赖,可能在私有DNS记录、角色分配未完成的情况下就触发创建,此时SQL Server无法正确解析存储的私有IP,访问公网IP被拦截
- 若SQL Server未启用系统分配托管身份,会导致预先配置的存储访问权限不生效,同样会触发访问失败超时
修复方案
- 移除漏洞评估资源中的存储密钥配置,修改
azurerm_mssql_server_vulnerability_assessment代码如下:
resource "azurerm_mssql_server_vulnerability_assessment" "mssql_vulnerability_assessment" { server_security_alert_policy_id = azurerm_mssql_server_security_alert_policy.mssql_security_alert_policy.id storage_container_path = "${azurerm_storage_account.sql_defender_storage_account.primary_blob_endpoint}${azurerm_storage_container.sql_defender_storage_account_container.name}/" # 移除storage_account_access_key配置行,改用托管身份认证 recurring_scans { enabled = true } # 增加显式依赖,确保私有链路、权限配置完成后再创建 depends_on = [ azurerm_private_dns_a_record.sql_defender_storage_account, azurerm_role_assignment.sql_blob_container_contributor ] }
- 修正存储账户的
private_link_access配置,修改azurerm_storage_account.sql_defender_storage_account的network_rules块:
network_rules { default_action = var.deny_public_access ? "Deny" : "Allow" bypass = [ "AzureServices", "Logging", "Metrics" ] private_link_access { endpoint_resource_id = azurerm_private_endpoint.mssql_server_defender_storage_account.id # 替换为私有端点ID } }
- 确认
azurerm_mssql_server资源已启用系统分配托管身份,配置示例:
resource "azurerm_mssql_server" "this" { # 其他原有配置 identity { type = "SystemAssigned" } }
- 确认私有DNS区域变量
var.blob_storage_dns_zone取值为privatelink.blob.core.windows.net,和Azure官方要求的Blob存储私有DNS区域名称一致。
内容的提问来源于stack exchange,提问作者vkourt
相关产品推荐
相关产品推荐

