在我们的 CI/CD 管道中,我试图为其他系统使用的容器自动创建 SAS 令牌。每个 SAS 令牌“指向”一个共享访问策略。
我的第一个想法是将其添加到我们的 PowerShell 部署后脚本中,以便我们可以在扩展时将新容器的创建(包括 SAS 令牌和共享访问策略)添加到脚本中。一切正常,我得到了他的策略和生成的 SAS 令牌,但我遇到了一件与通过 Azure 门户生成 SAS 令牌时不同的事情。我希望有人可以阐明这种差异。
PowerShell 脚本(在 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)
目前的输出是:
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
我的问题是为什么使用 Pwershell cmdlet 将 sv 设置为 2015-04-05 而不是最新版本 2016-05-31?如果我生成一个干净的 SAS 令牌(不受共享访问策略的支持),我会为 sv 得到相同的结果。
如果我使用 Azure 门户(使用相同的存储帐户和容器)生成 SAS 令牌,我会将 sv 设置为最新版本(2016-05-31)。
使用 Azure 门户的输出:
?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 管道使用 VSTS 运行,我使用标准 Azure PowerShell 任务来运行脚本。