Azure 获取用于blob存储容器的SAS令牌使用链接模板执行ARM部署

Azure 获取用于blob存储容器的SAS令牌使用链接模板执行ARM部署,azure,azure-storage,azure-resource-manager,arm-template,azure-cli,Azure,Azure Storage,Azure Resource Manager,Arm Template,Azure Cli,我尝试在本地系统上使用Azure CLI部署ARM模板,因为我想先在本地尝试更改,然后再将其推送到存储库 我们使用链接模板,这意味着我必须指定链接模板所在的URL和SAS令牌,以便访问这些文件 我试图执行的脚本如下所示 az group deployment create --resource-group myResourceGroupName ` --template-file azuredeploy.json ` --parameters az

我尝试在本地系统上使用Azure CLI部署ARM模板,因为我想先在本地尝试更改,然后再将其推送到存储库

我们使用链接模板,这意味着我必须指定链接模板所在的URL和SAS令牌,以便访问这些文件

我试图执行的脚本如下所示

az group deployment create --resource-group myResourceGroupName `
            --template-file azuredeploy.json `
            --parameters azuredeploy.d.parameters.json `
            --parameters local.parameters.json
azuredeploy.json
文件包含主模板以及对其他链接模板的引用。
azuredeploy.d.parameters.json文件包含所有常规环境参数(如定价层等)。
local.parameters.json
包含两个参数,分别称为
DeploymentContainerAstoken
deploymentContainerUri
(SAS令牌和链接模板的位置)

我创建SAS令牌的步骤如下

$end=date -u -d "30 minutes" '+%Y-%m-%dT%H:%MZ'
$start=date '+%Y-%m-%dT00:00Z'

az storage container generate-sas `
            --account-name "mydeploymentfiles" `
            --account-key "[thePrimaryKey]" `
            --name "the/subfolder/buildversion.1+52/templates" `
            --start $start `
            --expiry $end `
            --permissions lr `
            --output tsv
<?xml version="1.0" encoding="utf-8"?>
<Error>
    <Code>AuthenticationFailed</Code>
    <Message>Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly
        including the signature.
        RequestId:2c0412dc-201e-0038-6b97-9e01ef000000
        Time:2019-11-19T05:11:12.2088927Z</Message>
    <AuthenticationErrorDetail>Signature not valid in the specified time frame: Start [Mon, 18 Nov 2019 00:00:00 GMT] -
        Expiry [Mon, 18 Nov 2019 14:30:00 GMT] - Current [Tue, 19 Nov 2019 05:11:12 GMT]</AuthenticationErrorDetail>
</Error>
这输出了一个很好的SAS令牌,我可以使用它

st=2019-11-18T00%3A00Z&se=2019-11-18T14%3A30Z&sp=rl&sv=2018-03-28&sr=c&sig=aZn3cx%2BNCnN2YhXD9%2AETJA6QL/pUIpbsbP4HKtFN/4%3D

通过Azure CLI运行部署时,我收到一条消息:无法访问链接的模板(
the/subfolder/buildversion.1+52/templates/function app.json
the/subfolder/buildversion.1+52/templates/storage.json

因此,我尝试从浏览器下载它们,使用生成的SAS令牌,并得到以下结果

$end=date -u -d "30 minutes" '+%Y-%m-%dT%H:%MZ'
$start=date '+%Y-%m-%dT00:00Z'

az storage container generate-sas `
            --account-name "mydeploymentfiles" `
            --account-key "[thePrimaryKey]" `
            --name "the/subfolder/buildversion.1+52/templates" `
            --start $start `
            --expiry $end `
            --permissions lr `
            --output tsv
<?xml version="1.0" encoding="utf-8"?>
<Error>
    <Code>AuthenticationFailed</Code>
    <Message>Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly
        including the signature.
        RequestId:2c0412dc-201e-0038-6b97-9e01ef000000
        Time:2019-11-19T05:11:12.2088927Z</Message>
    <AuthenticationErrorDetail>Signature not valid in the specified time frame: Start [Mon, 18 Nov 2019 00:00:00 GMT] -
        Expiry [Mon, 18 Nov 2019 14:30:00 GMT] - Current [Tue, 19 Nov 2019 05:11:12 GMT]</AuthenticationErrorDetail>
</Error>
我想这是有原因的,因为我正在为文件所在的容器创建一个SAS令牌,但是通过
列表
读取
权限,我应该可以访问它,对吗

发布管道工作正常,我正在使用那边的Azure Blob文件副本来设置适当的参数

在这一点上我有点不知所措


从本地系统运行链接模板时,获取用于链接模板的工作SAS令牌的正确方法是什么,链接模板位于某个子容器中。

根据您提供的信息,您希望为Azure Blob存储容器中的文件夹生成SAS令牌。这是不可能的。因为Azure blob存储没有“文件夹”概念。有关更多详细信息,请参阅和。

因此,请为包含需要访问的blob的容器或要访问的每个blob生成SAS令牌。比如说

#generate sas token for container
az storage container generate-sas `
            --account-name "<you account name>" `
            --account-key "<your account key>" `
            --name "<your container name>" `
            --start $start `
            --expiry $end `
            --permissions lr `
            --output tsv
# generate sas token for one blob
az storage container generate-sas `
            --account-name "<you account name>" `
            --account-key "<your account key>" `
            --name "<your Blob name>" `
            --container-name "<your container name>" `
            --start $start `
            --expiry $end `
            --permissions r `
            --output tsv
#为容器生成sas令牌
az存储容器生成sas`
--帐户名“”`
--帐户密钥“”`
--名称“”`
--start$start`
--到期$end`
--权限`
--输出tsv
#为一个blob生成sas令牌
az存储容器生成sas`
--帐户名“”`
--帐户密钥“”`
--名称“”`
--容器名称“”`
--start$start`
--到期$end`
--权限`
--输出tsv

根据您提供的信息,您希望为Azure Blob存储容器中的文件夹生成SAS令牌。这是不可能的。因为Azure blob存储没有“文件夹”概念。有关更多详细信息,请参阅和。

因此,请为包含需要访问的blob的容器或要访问的每个blob生成SAS令牌。比如说

#generate sas token for container
az storage container generate-sas `
            --account-name "<you account name>" `
            --account-key "<your account key>" `
            --name "<your container name>" `
            --start $start `
            --expiry $end `
            --permissions lr `
            --output tsv
# generate sas token for one blob
az storage container generate-sas `
            --account-name "<you account name>" `
            --account-key "<your account key>" `
            --name "<your Blob name>" `
            --container-name "<your container name>" `
            --start $start `
            --expiry $end `
            --permissions r `
            --output tsv
#为容器生成sas令牌
az存储容器生成sas`
--帐户名“”`
--帐户密钥“”`
--名称“”`
--start$start`
--到期$end`
--权限`
--输出tsv
#为一个blob生成sas令牌
az存储容器生成sas`
--帐户名“”`
--帐户密钥“”`
--名称“”`
--容器名称“”`
--start$start`
--到期$end`
--权限`
--输出tsv

sas令牌似乎已过期?能否提供容器的结构?你的容器有一些子目录吗?@Stanley:令牌不能过期(或者不应该过期),因为我也在2020年1月1日试用过,而且还经常更新令牌。@Jim:我试图联系的url是:
https://myStorageAccount.blob.core.windows.net/artifacts/someSubfolder/0.1.0-branch-name.1+52/templates/function app.json?st=2019-11-18T00%3A00Z&se=2019-11-18T14%3A30Z&sp=rl&sv=2018-03-28&sr=c&sig=aZn3cx%2BYCmN2MhXA9%2BnTJa6TQL/pMIpbsbD4HPtFN/4%3R
。因此,文件夹结构是
/artifacts/someSubfolder/0.1.0-branch-name.1+52/templates/
我还尝试将
+
更改为
%2B
,但无效。sas令牌似乎已过期?请提供容器的结构好吗?你的容器有一些子目录吗?@Stanley:令牌不能过期(或者不应该过期),因为我也在2020年1月1日试用过,而且还经常更新令牌。@Jim:我试图联系的url是:
https://myStorageAccount.blob.core.windows.net/artifacts/someSubfolder/0.1.0-branch-name.1+52/templates/function app.json?st=2019-11-18T00%3A00Z&se=2019-11-18T14%3A30Z&sp=rl&sv=2018-03-28&sr=c&sig=aZn3cx%2BYCmN2MhXA9%2BnTJa6TQL/pMIpbsbD4HPtFN/4%3R
。因此,文件夹结构是
/artifacts/someSubfolder/0.1.0-branch-name.1+52/templates/
我还尝试将
+
更改为
%2B
,但没有效果。这很有意义,谢谢!Azure DevOps中的步骤也应该说明这一点,因为这些字段被称为
Container
Blob Prefix
。这很有意义,谢谢!Azure DevOps中的步骤也应该说明这一点,因为这些字段被称为
Container
Blob Prefix