按照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的怪异之处似乎没有很多,所以也许这是如此明显,以至于人们还没有写下任何东西。我不认为我要复制
答案 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。