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

如何在存储账户Bicep模块中兼容Network ACL与publicNetworkAccess?

解决方案

通过在模块中引入参数开关,动态控制存储账户的网络配置,就能在同一模块中实现两种公网访问模式:

  • 新增布尔参数isTemplateStorageAccount,用来区分当前创建的是链接模板存储账户还是常规存储账户
  • 根据参数值,分别配置publicNetworkAccess和networkAcls:
    • 若为链接模板存储账户(isTemplateStorageAccount = true):设置publicNetworkAccess = 'Enabled',同时将networkAcls.defaultAction设为Allow,不配置任何IP/VNet限制,实现「对所有网络启用」
    • 若为常规存储账户(isTemplateStorageAccount = false):同样设置publicNetworkAccess = 'Enabled',但将networkAcls.defaultAction设为Deny,并添加指定的允许IP/VNet规则,实现「从选定虚拟网络和IP地址启用」,后续可正常添加私有端点

Bicep代码示例

param storageAccountName string
param isTemplateStorageAccount bool = false

// 常规存储账户专用参数:允许访问的IP地址和子网ID
param allowedIpAddresses array = []
param allowedSubnetIds array = []

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
  name: storageAccountName
  location: resourceGroup().location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    publicNetworkAccess: 'Enabled'
    // 动态生成网络ACL规则
    networkAcls: !isTemplateStorageAccount ? {
      defaultAction: 'Deny'
      ipRules: allowedIpAddresses.map(ip => ({
        value: ip
        action: 'Allow'
      }))
      virtualNetworkRules: allowedSubnetIds.map(subnetId => ({
        id: subnetId
        action: 'Allow'
      }))
    } : {
      defaultAction: 'Allow'
    }
  }
}

使用说明

  • 创建链接模板存储账户时,传入参数isTemplateStorageAccount = true即可,无需配置allowedIpAddresses和allowedSubnetIds
  • 创建常规存储账户时,保持isTemplateStorageAccount默认值false,传入需要允许的IP地址和子网ID,就能实现指定网络访问限制

内容的提问来源于stack exchange,提问作者Filip Drzewiecki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:43:17