Azure 存储帐户阻止容器创建的网络规则

Azure 存储帐户阻止容器创建的网络规则,azure,azure-cli,Azure,Azure Cli,按照的说明进行操作 看起来默认存储帐户中有什么东西阻止了创建新容器的能力;然而,“defaultAction”是允许的: 以下Azure CLI: az storage container create --account-name meaningfulname --name nancy --auth-mode login 。。。导致错误的原因可能是解释存储帐户的网络规则: The request may be blocked by network rules of storage accou

按照的说明进行操作

看起来默认存储帐户中有什么东西阻止了创建新容器的能力;然而,
“defaultAction”
允许的

以下Azure CLI:

az storage container create --account-name meaningfulname --name nancy --auth-mode login
。。。导致错误的原因可能是解释存储帐户的网络规则:

The request may be blocked by network rules of storage account. Please check network rule set using 'az storage account show -n accountname --query networkRuleSet'.
If you want to change the default action to apply when no rule matches, please use 'az storage account update'.
使用上述消息中的建议,帐户名称上的“show”命令给出:

> az storage account show -n meaningfulname --query networkRuleSet
{
  "bypass": "AzureServices",
  "defaultAction": "Allow",
  "ipRules": [],
  "virtualNetworkRules": []
}
我认为Azure CLI将是可以绕过并执行操作的“服务”之一。而且,在我看来,默认的行为是相当宽容的


我已经通过错误消息和命令(以及变体)进行了搜索。在我不知道的Azure CLI的怪癖方面,似乎没有太多的内容,所以这可能是显而易见的,以至于人们没有写任何东西。我认为我没有复制当前的
网络规则集
配置就足够了。我无法使用与您相同的
networkRuleSet
配置重现此问题。因此,在创建容器或查询
networkRuleSet
时,您可以仔细检查存储帐户是否有打字错误

默认情况下,存储帐户接受来自任何网络上客户端的连接。要限制对选定网络的访问,必须首先更改默认操作

如果您只需要允许从某些特定IP地址或特定子网访问您的存储帐户并允许Azure服务,您可以这样添加它

{
  "bypass": "AzureServices",
  "defaultAction": "Deny",
  "ipRules": [
    {
      "action": "Allow",
      "ipAddressOrRange": "100.100.100.100"
    }
  ],
  "virtualNetworkRules": [
    {
      "action": "Allow",
      "virtualNetworkResourceId": "subnetID"
    }
  ]
}
使用Azure CLI,将默认规则设置为默认允许网络访问

az storage account update --resource-group "myresourcegroup" --name "mystorageaccount" --default-action Deny

az storage account update --resource-group "myresourcegroup" --name "mystorageaccount" --default-action Allow
有关更多详细信息,请参阅

编辑
在本例中,您将
--auth mode
参数设置为登录。您需要确保您登录Azure CLI的Azure AD安全主体具有针对Blob或队列存储执行数据操作的权限。有关Azure存储中RBAC角色的更多信息,请参阅。

不确定这是否有用

如果使用CLI更新存储帐户的“防火墙和虚拟网络”部分并使其可用于所有网络,则需要一些时间才能生效。我观察到,大约需要10-30秒才能生效


尝试等待30秒,然后尝试az container create语句。它应该可以工作。

尽管选择的答案不同

可能还有另一个原因,就像我的情况一样。在创建Microsoft文档中所述的容器之前,您需要担任该角色

在创建容器之前,请分配存储Blob数据 贡献者角色给你自己。即使您是帐户所有者, 您需要显式权限才能对数据库执行数据操作 存储帐户

还要注意

Azure角色分配可能需要几分钟才能传播

从命令中删除
--auth模式登录
。像这样使用它:

az存储容器创建\
--帐户名helloworld12345\
--名称图像\
--公共访问容器
如果我们不设置
--auth模式
,它将使用默认的auth模式
。它将查询存储帐户中的帐户密钥



如果命令中需要RBAC角色,请使用
--auth模式登录。有关存储中RBAC角色的更多信息,请访问。

存储帐户是否有防火墙限制?我不知道是否添加了防火墙限制。我以为
az存储帐户show-n…
正在查询这个。是否有其他方法确定是否存在防火墙限制?(我认为
ipRules
等同于防火墙限制)您能检查我的编辑是否有用吗?