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