如何在 RM 模板中为存储帐户解析 SAS URL

How to resolve SAS URL for Storage Account in RM Template

我正在尝试创建 RM 模板来创建网站并将其配置为登录到 blob 存储。

我看到了这个 ,它展示了如何配置它。

json 看起来有点像:

{
  "id": "/subscriptions/.../config/logs",
  "name": "logs",
  "type": "Microsoft.Web/sites/config",
  "location": "North Central US",
  "properties": {
    "applicationLogs": {
      "fileSystem": {
        "level": "Off"
      },
      "azureBlobStorage": {
        "level": "Information",
        "sasUrl": "...",
        "retentionInDays": 14
      }
    },
    ...
}

但是,我无法弄清楚 sasUrl 应该如何 calculated/resolved 到这个文件中?

要为容器创建 SASurl,您可以使用 New-AzureStorageContainerSASToken

像这样的脚本应该工作

 $context = New-AzureStorageContext -StorageAccountName $name `
                      -StorageAccountKey ((Get-AzureRmStorageAccountKey `
                      -ResourceGroupName $rg -Name $name).Key1)
  New-AzureStorageContainerSASToken -Name sql 
                                    -Permission rwdl -Context $context 

您可能需要将 -FullUri 添加到最后一个的末尾。

Moim,我认为您不能在模板中创建 sasToken。正如 MichaelB 提到的,您可以在部署之前创建它,然后将其作为参数传递或简单地将其硬编码在模板中(不理想,因为这是一个秘密)。要添加到 Michael 的代码中的几件事:1) 您需要完整的 URL 和一个容器,以及 2) 您需要在令牌上设置一个到期时间,这样它就不会过期并阻止登录它。例如:

$SasToken = New-AzureStorageContainerSASToken -Container 'logs'
   -Context $context -Permission rwdl -ExpiryTime (Get-Date).AddYears(1) -FullUri

另一种方法是创建一个 sasToken,将其存储在 Azure KeyVault 中,然后在模板中引用该 KeyVault 密码。这个博客有几篇文章介绍了如何设置:http://www.codeisahighway.com/how-to-refer-an-azure-key-vault-secret-in-an-azure-resource-manager-deployment-template/