我正在尝试生成一个 azure 存储帐户共享访问密钥,以便我可以将它与 azcopy 一起使用以从我的存储帐户中的所有容器中检索文件。
我已经使用 Azure 门户成功生成了一个密钥,并证明这适用于 azcopy
但我正在努力获得等效的密钥以使用有效的 PowerShell 生成。
Powershell 查询
az storage container generate-sas --account-name $SaName --account-key $accountKey --permissions 'rl' --start $start --expiry $expiry --name $SaName --https-only --output tsv
Azure 门户 (GUI) 结果
sv=2019-12-12
&ss=b
&srt=sco
&sp=rl
&se=2021-02-08T17:40:26Z
&st=2021-02-08T09:40:26Z
&spr=https
&sig=REDACTED
Powershell 结果
st=2021-02-08T17%3A17%3A47Z
&se=2021-02-08T17%3A47%3A47Z
&sp=rl
&spr=https
&sv=2018-11-09
&sr=c
&sig=REDACTED
我想第一个问题是我还没有找到添加缺失和 ss=b srt=sco (not sr) 的方法,似乎没有这些参数可用,也许如果它们在那里,sig 会有正确的哈希值。
我已经在 Azure Cloudshell 以及我自己的机器上使用 az 1.12.1 进行了尝试
答案 0 :(得分:2)
命令 az storage container generate-sas 不是 powershell 命令,而是 azure cli command。
因为在 Azure 门户中,您生成的是 container level sas-token
,但在 azure cli 中,您实际上是通过使用 az storage container generate-sas 生成 account level sas-token
。
要生成 az storage account generate-sas --account-key "xxxxx" --account-name your_storage_account_name --expiry 2020-02-10 --https-only --permissions rl --resource-types sco --services b
,您应该使用此 azure cli 命令:az storage account generate-sas。
示例如下:
ss=b srt=sco
这里是测试结果,生成了account level sas-token
:
如果您想使用 powershell 生成 $account_name = "yy1"
$account_key = "xxxxxxx"
$context = New-AzStorageContext -StorageAccountName $account_name -StorageAccountKey $account_key
#you can also add other parameter as per your need, like StartTime, ExpiryTime etc.
New-AzStorageAccountSASToken -Service Blob -ResourceType Service,Container,Object -Permission rl -Context $context
,请使用此 powershell 命令:New-AzStorageAccountSASToken。示例如下(您可以根据需要添加其他参数):
{{1}}
测试结果如下: