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

如何使用Bicep为现有Azure安全策略添加新域且保留原有关联?

解决Front Door安全策略添加新域时覆盖原有关联的问题

问题原因

增量模式下,ARM部署会严格按照模板定义的属性更新资源。如果Bicep代码硬编码了associations数组(仅包含当前新域),部署时会直接替换安全策略中原有关联数组,导致旧域的安全策略被移除。

解决方案

通过Bicep的tryGetResource函数读取现有安全策略的关联信息,合并新旧域后再部署,确保所有已关联的域都被保留。具体逻辑如下:

  1. 尝试获取已存在的安全策略资源;
  2. 提取现有关联的所有域ID;
  3. 将新域ID与现有域ID合并去重;
  4. 构建包含所有域的关联数组,部署更新安全策略。

完整Bicep代码示例

// 尝试读取现有安全策略,不存在则返回null
var existingSecurityPolicy = tryGetResource('Microsoft.Cdn/profiles/securitypolicies@2022-11-01-preview', fdprofile.name, securityPolicyName)

// 提取现有安全策略中所有关联的域ID
var existingDomainIds = existingSecurityPolicy != null 
  ? flatten(existingSecurityPolicy.properties.parameters.associations[*].domains[*].id) 
  : []

// 合并现有域ID与新域ID,自动去重
var allDomainIds = union(existingDomainIds, [fdEndpoint.id])

// 构建包含所有域的关联配置
var updatedAssociations = [
  {
    domains: allDomainIds.map(domainId => ({ id: domainId }))
    patternsToMatch: ['/*']
  }
]

resource security_policies 'Microsoft.Cdn/profiles/securitypolicies@2022-11-01-preview' = {
  parent: fdprofile
  name: securityPolicyName
  properties: {
    parameters: {
      wafPolicy: {
        id: waf.id
      }
      associations: updatedAssociations
      type: 'WebApplicationFirewall'
    }
  }
}

说明

  • tryGetResource函数会尝试获取指定安全策略资源,首次部署时返回null,此时直接用新域创建安全策略;
  • flatten和union函数用于处理域ID的提取与合并,避免重复关联同一域;
  • 该方案无需感知其他应用服务的存在,仅通过读取现有安全策略配置实现增量更新,符合你的部署场景要求。

内容的提问来源于stack exchange,提问作者Don Chambers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 09:05:31