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

如何在ARM模板中将存储账户的Public network access设置为Disabled

问题分析与解决方案

你的问题核心在于ARM模板使用的API版本过低,导致publicNetworkAccess属性未被正确识别。

具体原因

你当前使用的API版本是2017-10-01,而publicNetworkAccess这个控制公网访问状态的属性,是在2020-08-01及之后的API版本中才正式引入并生效的。旧版本API会直接忽略这个属性,转而根据networkAcls的配置来推断公网访问状态:

  • 当networkAcls.defaultAction设为Deny,且ipRules、virtualNetworkRules为空数组时,Azure确实会拒绝所有公网访问,但门户会显示为“Enabled from selected virtual networks and IP Addresses”——这是因为系统认为你配置了网络ACL规则(即使是空规则),而非直接禁用公网访问。

解决方案

将模板中的apiVersion更新为2020-08-01或更晚的版本(比如最新的2023-01-01),修改后的资源定义示例如下:

{
    "type": "Microsoft.Storage/storageAccounts",
    "name": "[parameters('storageAccountName')]",
    "apiVersion": "2023-01-01",
    "sku": {
        "name": "[parameters('storageAccountSku')]",
        "tier": "[parameters('storageAccountTier')]"
    },
    "kind": "StorageV2",
    "location": "[parameters('storageAccountLocation')]",
    "tags": {},
    "identity": {
        "type": "SystemAssigned"
    },
    "properties": {
        "defaultToOAuthAuthentication": false,
        "supportsHttpsTrafficOnly": true,
        "AllowBlobPublicAccess": false,
        "networkAcls": {
            "resourceAccessRules": [],
            "bypass": "AzureServices",
            "defaultAction": "Deny",
            "ipRules": [],
            "virtualNetworkRules": []
        },
        "publicNetworkAccess": "Disabled",
        "accessTier": "Hot"
    }
}

更新API版本后,模板中的publicNetworkAccess: "Disabled"会被正确解析,存储账户的公网访问状态将显示为Disabled,和你的预期一致。

补充说明

你之前认为“虚拟网络和IP地址设为空数组等同于Public access=Disabled”的逻辑并不准确:

  • 空数组+defaultAction=Deny是通过网络ACL规则拦截所有公网流量,属于“ACL层面的拒绝”;
  • publicNetworkAccess=Disabled是直接禁用存储账户的公网端点,属于“端点层面的禁用”,两者实现逻辑不同,门户显示状态也有区别。只有在支持该属性的新API版本中,才能通过设置publicNetworkAccess直接得到你想要的显示状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:53:22