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

时间:2020-04-23 22:03:35

标签: azure azure-cli

按照the Azure CLI "quickstart" on creating a blob的说明进行操作。

默认存储帐户中的某些内容似乎阻止了创建新容器的功能;但是,"defaultAction"Allow

以下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'.

使用以上消息的建议,帐户名称上的“显示”命令将给出:

> az storage account show -n meaningfulname --query networkRuleSet
{
  "bypass": "AzureServices",
  "defaultAction": "Allow",
  "ipRules": [],
  "virtualNetworkRules": []
}

我认为Azure CLI将属于可以绕过并执行操作的“服务”。而且,在我看来,默认操作是相当宽松的。

我已经完成了根据错误消息和命令(以及变体)进行搜索的工作。我不知道Azure CLI的怪异之处似乎没有很多,所以也许这是如此明显,以至于人们还没有写下任何东西。我不认为我要复制

4 个答案:

答案 0 :(得分:1)

不确定这是否有帮助...

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

尝试等待30秒,然后尝试az容器create语句。应该可以。

答案 1 :(得分:0)

当前的networkRuleSet配置就足够了。我无法使用与您相同的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

有关更多详细信息,请参见Change the default network access rule

编辑

在这种情况下,您将--auth-mode参数设置为登录到authorize with Azure AD credentials。您需要确保用于登录Azure CLI的Azure AD安全主体具有对Blob或队列存储执行数据操作的权限。有关Azure存储中RBAC角色的更多信息,请参见Manage access rights to Azure Storage data with RBAC

答案 2 :(得分:0)

尽管选择的答案不同。

可能还有其他原因,例如我的情况。您必须先扮演角色,然后才能按照Microsoft文档here

的说明创建容器

在创建容器之前,分配存储Blob数据 自己的贡献者角色。即使您是帐户所有者, 您需要明确的权限才能针对 存储帐户。

还请注意

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

答案 3 :(得分:0)

从您的命令中删除 --auth-mode login。像这样使用它:

az storage container create \
--account-name helloworld12345 \
--name images \
--public-access container

如果我们不设置 --auth-mode,它会使用默认的 auth-mode key。这将查询存储帐户中的帐户密钥

https://docs.microsoft.com/en-us/azure/storage/blobs/authorize-data-operations-cli


如果您的命令中需要 RBAC 角色,请使用 --auth-mode login。有关存储中 RBAC 角色的更多信息,请访问 https://docs.microsoft.com/en-us/azure/storage/common/storage-auth-aad-rbac-cli