Маркер SAS как SecureString не работает с развертыванием шаблона ARM с помощью Azure PowerShell - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть несколько вложенных шаблонов ARM, предназначенных для развертывания с использованием Azure PS.

Единственный способ сделать это - разместить эти шаблоны в Azure blob container, а затем сгенерировать SAS token и отправить их2 параметра в main ARM template (который указывает на вложенные).

Вот мой PS, который генерирует токен SAS:

$SasToken = ConvertTo-SecureString -AsPlainText -Force (New-AzureStorageContainerSASToken -Container $StorageContainerName -Context $StorageAccount.Context -Permission r -ExpiryTime (Get-Date).AddHours(4))

Вот 2 части моего сценария развертывания, которыепередать токен в основной шаблон ARM:

$Parameters['_artifactsLocationSasToken'] = $SasToken

и

New-AzureRmResourceGroupDeployment -Name ((Get-ChildItem $TemplateFile).BaseName + '-' + ((Get-Date).ToUniversalTime()).ToString('MMdd-HHmm')) `
    -ResourceGroupName $ResourceGroupName `
    -TemplateFile $TemplateFile `
    -TemplateParameterObject $Parameters `
    -Force -Verbose `
    -ErrorVariable ErrorMessages

Вот объявление для параметра приема в основной шаблон ARM:

"_artifactsLocationSasToken": {
      "type": "securestring"
    }

Вот шаблон вложенного ресурса (который является БД космоса) в том же главном шаблоне ARM:

{
      "apiVersion": "2017-05-10",
      "dependsOn": [
        "[concat('Microsoft.Resources/deployments/', variables('vnetConfig').Name)]"
      ],
      "name": "[variables('cosmosDbConfig').Name]",
      "properties": {
        "mode": "Incremental",
        "templateLink": {
          "uri": "[concat(parameters('_artifactsLocation'), '/', variables('nestedTemplatesFolder'), '/cosmosdb.json', parameters('_artifactsLocationSasToken'))]"
        },
        "parameters": {
          "cosmosDbConfig": {
            "value": "[variables('cosmosDbConfig')]"
          }
        }
      },
      "type": "Microsoft.Resources/deployments"
    }

Когда я запускаю их, я получаю эту ошибку:

Ошибка: Код = InvalidTemplate;Сообщение = Проверка шаблона развертывания завершилась неудачно: 'Предоставленное значение для параметра шаблона' _artifactsLocationSasToken 'в строке' 16 'и столбце' 39 'недопустимо.'

Если я введу жесткий код, SAS tokenво вложенном шаблонном ресурсе (в основном шаблоне) и измените тип с securestring на string, это просто работает!Что мне не хватает?

Ответы [ 2 ]

0 голосов
/ 28 марта 2019

Я обнаружил, что вы можете воспроизвести эту проблему, т. Е. "Ошибка проверки шаблона" при передаче токена SAS в шаблон ARM в качестве параметра.

В моем случае токен SAS использовался дляНастройка приложения «WEBSITE_RUN_FROM_PACKAGE» приложения-функции Azure.

Мое решение этой проблемы заключалось в добавлении префикса значения токена SAS (который я передал из PowerShell в шаблон ARM) чем-то - так, чтобы онобольше не был действительным URL.Например, если вы добавляете маркер SAS к нижнему подчеркиванию и передаете его в шаблон ARM, эта проблема больше не возникает.Затем вы можете удалить префикс подчеркивания из шаблона ARM.

0 голосов
/ 14 февраля 2019

Кажется, вы пропустили uri() в templateLink, попробуйте тот, как показано ниже, посмотрите этот образец , который также использует securestring.

"templateLink": {
          "uri": "[uri(concat(parameters('_artifactsLocation'), '/', variables('nestedTemplatesFolder'), '/cosmosdb.json', parameters('_artifactsLocationSasToken')))]"
        }
...