使用 PowerShell 生成 Azure 存储帐户 SAS 密钥

Generate Azure Storage Account SAS Key using PowerShell

我正在尝试生成一个 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(不是 sr)的方法,似乎没有这些参数可用,也许如果它们在那里sig 将具有正确的哈希值。

我已经在 Azure Cloudshell 以及我自己的机器上用 az 1.12.1 试过了

命令az storage container generate-sas is not powershell command, it's azure cli command.

因为在 Azure 门户中,您正在生成 account level sas-token,但在 azure cli 中,您实际上是通过使用 az storage container generate-sas.

生成 container level sas-token

要生成 account level sas-token,您应该使用此 azure cli 命令:az storage account generate-sas

示例如下:

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

这里是测试结果,生成了ss=b srt=sco

如果您想使用 powershell 生成 account level sas-token,请使用此 powershell 命令:New-AzStorageAccountSASToken。示例如下(您可以根据需要添加其他参数):

$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

测试结果如下: