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

Posted

技术标签:

【中文标题】使用 PowerShell 生成 Azure 存储帐户 SAS 密钥【英文标题】:Generate Azure Storage Account SAS Key using PowerShell 【发布时间】:2021-05-12 09:02:29 【问题描述】:

我正在尝试生成一个 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 进行了尝试

【问题讨论】:

看起来像New-AzStorageAccountSASToken 的内置帮助中的第一个示例显示了如何制作帐户级别的令牌。你试过了吗? 【参考方案1】:

命令az storage container generate-sas不是powershell命令,是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

这是测试结果:

【讨论】:

感谢 az storage account generate-sas 工作。有关信息,您可以在 Windows 上的 powershell 会话中运行 az 命令,如果您像我一样安装了 az 模块,但在运行时这将从 Azure 函数运行

以上是关于使用 PowerShell 生成 Azure 存储帐户 SAS 密钥的主要内容,如果未能解决你的问题,请参考以下文章

错误:尚未正确初始化 Azure PowerShell 上下文。请导入模块并重试

Azure 函数 - Powershell 和 Azure 存储表(插入或替换)

使用 Powershell 列出所有 Azure 存储帐户和网络规则

使用 powershell 在 Azure 中不同订阅的存储容器之间复制 blob

如何使用 powershell/Azure CLI 列出有权访问 Azure DevOps 项目存储库的用户?

有没有办法使用 powershell 获取经典 Azure 存储帐户的密钥?