首页 文章

Azure存储 - 生成SAS令牌(Portal与PowerShell

提问于
浏览
1

在我们的CI / CD管道中,我试图自动为其他系统使用的容器创建SAS令牌 . 每个SAS令牌“指向”共享访问策略 .

我的第一个想法是将此添加到我们的PowerShell后期部署脚本中,以便我们可以在扩展时向脚本添加新容器(包括SAS令牌和共享访问策略)的创建 . 一切正常,我得到了他的策略和生成的SAS令牌,但我遇到了一件与通过Azure门户生成SAS令牌不同的事情 . 我希望有人可以对这种差异有所了解 .

PowerShell script (run as part of deploy pipeline in VSTS)

Select-AzureRmSubscription -SubscriptionId $useSubscription
Set-AzureRmContext -SubscriptionId $useSubscription

$accountKeys = Get-AzureRmStorageAccountKey -ResourceGroupName $useResourceGroupName -Name $storageAccountName
$storageContext = New-AzureStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $accountKeys[0].Value 
$expiryTime = (get-date).AddYears(1)
$permission = "rwl"

New-AzureStorageContainerStoredAccessPolicy -Context $storageContext -Container "test-container" -Policy "testPolicy" -ExpiryTime $expiryTime -Permission $permission

$sasToken = New-AzureStorageContainerSASToken  -Name "test-container" -Policy "testPolicy" -Context $storageContext
$sasToken = $sasToken.substring(1)

Write-Host "SAS token (ref shared access policy): $sasToken"

$sasToken2 = New-AzureStorageContainerSASToken -Context $storageContext -Container tibp-userprofiles -Permission rwl
Write-Host 'SAS token: ' $($sasToken2)

The output is currently:

SAS token (ref shared access policy): sv=2015-04-05&sr=c&si=tibpsaptest2&sig=rkzN3ocRZUrz5ub2IcVPKGIARvw3%2B2rh1G3yKmnSXhA%3D
SAS token:  ?sv=2015-04-05&sr=c&sig=9kMVFE7U61P1ikK27ylXqXiIkSaj71OImdM88RrtJfs%3D&se=2017-05-22T08%3A40%3A39Z&sp=rwl

我的问题是为什么sv设置为2015-04-05使用Pwershell cmdlet而不是2016-05-31的最新版本?如果我生成一个干净的SAS令牌(没有共享访问策略支持),我会得到相同的sv结果 .

如果我使用Azure门户生成SAS令牌(使用相同的存储帐户和容器),我将sv设置为最新版本(2016-05-31) .

The output using Azure Portal:

?sv=2016-05-31&ss=b&srt=sco&sp=rwl&se=2017-05-22T17:36:58Z&st=2017-05-22T09:36:58Z&spr=https&sig=UTibTnwmwYl3k3iIYj63VbYItL5eV4K4t6PEZ7ihi3E%3D

CI / CD pipline使用VSTS运行,我使用标准Azure PowerShell任务来运行脚本 .

Azure PowerShell version in VSTS

1 回答

  • 1

    您可以使用以下cmdlet生成SAS令牌,结果与Portal相同 .

    $now=get-date
    
    New-AzureStorageContainerSASToken -Name <container name> -Context $storageContext -Permission rwl -StartTime $now.AddHours(-1) -ExpiryTime $now.AddMonths(1)
    

    我的测试结果如下

    ?sv=2015-04-05&sr=c&sig=tMG2TwiAGXkDqwFbj7%2BRjI52qXUKU9NDI%2BmkxMY%2BjtM%3D&st=2017-05-22T00%3A41%3A50Z&se=2017-06-22T01%3A41%3A50Z&sp=rwl
    

    除了API版本 ?sv=2015-04-05 之外,您可以检查它们是否相同 . 有关SAS的更多信息,请参阅link .

    更新:

    我知道原因,Azure Portal使用最新的API版本生成SAS令牌,但您的本地Azure PowerShell不使用最新版本 .

    您可以使用以下cmdlet检查Azure PowerShell版本 .

    Get-Module -ListAvailable -Name Azure -Refresh
    

    在最新版本(现在4.01)上使用最新的API版本 . 您可以从link下载错误的安装程序 .

    PS C:\Users\v-shshui> New-AzureStorageContainerSASToken -Name vhds -Context $storageContext -Permission rwl -StartTime $now.AddHours(-1) -ExpiryTime $now.AddMonths(1)
    ?sv=2016-05-31&sr=c&sig=zdrwTEEmvTn6rjoJPVWOdQYzggrvygTHGoBsOBYgzuI%3D&st=2017-05-22T07%3A56%3A21Z&se=2017-06-22T08%3A56%3A21Z&sp=rwl
    

相关问题