获取用于使用链接模板进行 ARM 部署的 blob 存储容器的 SAS 令牌
Getting a SAS token for blob storage container doing an ARM deployment with Linked Templates
我想做的是在我的本地系统上使用 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
包含 2 个名为 deploymentContainerSasToken
和 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
这会输出一个很好的 SAS 令牌,我可以使用。
st=2019-11-18T00%3A00Z&se=2019-11-18T14%3A30Z&sp=rl&sv=2018-03-28&sr=c&sig=aZn3cx%2BNCnN2YhXD9%2AeTJa6TQL/pUIpbsbP4HKtFN/4%3D
当通过 Azure CLI 运行 部署时,我收到无法访问链接模板(the/subfolder/buildversion.1+52/templates/function-app.json
、the/subfolder/buildversion.1+52/templates/storage.json
)的消息。
所以我尝试使用生成的 SAS 令牌从浏览器下载它们并获得以下内容。
<?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 令牌,但是 List
和 Read
权限我应该可以访问它,对吗?
发布管道工作正常,我正在使用那边的 Azure Blob 文件副本来设置适当的参数。
此时我有点迷茫。
当 运行 从本地系统(其中链接模板驻留在某个子容器中)获取用于链接模板的工作 SAS 令牌的正确方法是什么。
根据您提供的信息,您希望为 Azure Blob 存储容器中的文件夹生成 SAS 令牌。是不可能的。因为 Azure blob 存储没有 'Folder' 这个概念。详情请参考document and the article。
因此,请为包含您需要访问的 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
我想做的是在我的本地系统上使用 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
包含 2 个名为 deploymentContainerSasToken
和 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
这会输出一个很好的 SAS 令牌,我可以使用。
st=2019-11-18T00%3A00Z&se=2019-11-18T14%3A30Z&sp=rl&sv=2018-03-28&sr=c&sig=aZn3cx%2BNCnN2YhXD9%2AeTJa6TQL/pUIpbsbP4HKtFN/4%3D
当通过 Azure CLI 运行 部署时,我收到无法访问链接模板(the/subfolder/buildversion.1+52/templates/function-app.json
、the/subfolder/buildversion.1+52/templates/storage.json
)的消息。
所以我尝试使用生成的 SAS 令牌从浏览器下载它们并获得以下内容。
<?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 令牌,但是 List
和 Read
权限我应该可以访问它,对吗?
发布管道工作正常,我正在使用那边的 Azure Blob 文件副本来设置适当的参数。
此时我有点迷茫。
当 运行 从本地系统(其中链接模板驻留在某个子容器中)获取用于链接模板的工作 SAS 令牌的正确方法是什么。
根据您提供的信息,您希望为 Azure Blob 存储容器中的文件夹生成 SAS 令牌。是不可能的。因为 Azure blob 存储没有 'Folder' 这个概念。详情请参考document and the article。
因此,请为包含您需要访问的 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