Можете ли вы получить доступ к связанному шаблону руки в частном BLOB-объекте с помощью клавиш списка?

Есть ли способ получить доступ к связанному шаблону в частном хранилище BLOB-объектов с помощью «listkeys». Таким образом, мне не нужно генерировать токен SAS каждый раз при развертывании. Что-то вроде:

"Concat('DefaultEndpointsProtocol=https;AccountName=',variables('StorageAccountName'),';AccountKey=',listKeys(resourceId('otherResourceGroup', 'Microsoft.Storage/storageAccounts', variables('StorageAccountName')), providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value)]"

To go in:

"parameters": {
    "sasToken": { "type": "securestring" }
},
"resources": [
    {
        "apiVersion": "2017-05-10",
        "name": "linkedTemplate",
        "type": "Microsoft.Resources/deployments",
        "properties": {
          "mode": "incremental",
          "templateLink": {
            "uri": "[concat('https://storagecontosotemplates.blob.core.windows.net/templates/helloworld.json', parameters('sasToken'))]",
            "contentVersion": "1.0.0.0"
          }
        }
    }
],

В документе MS об этом не упоминается, но его можно было бы легко развернуть без создания токена.

В ответ на вопрос Тому, почему я не могу использовать keyVault, потому что он по-прежнему требует его ввода. Вот код токена, который должен быть внутри параметров:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "adminUsername": {
      "value": "cmdbAdmin"
    },
    "adminPassword": {
      "reference": {
        "keyVault": {
          "id": "/subscriptions/c8727b53-932a-4f48-9fa1-00765c554992/resourceGroups/AnsibleTest1/providers/Microsoft.KeyVault/vaults/ansibletest"
        },
        "secretName": "adminPassword"
      }
    },

... и это выглядит так в шаблонах Azure. Как видите, вам все равно нужно будет ввести некоторые учетные данные :(

Шаблоны Azure


person Beefcake    schedule 08.11.2017    source источник
comment
Чтобы ответить на ваш прямой вопрос, нет. Не могли бы вы подробнее рассказать о сценарии? В голову пришли следующие моменты: 1) нужно ли размещать их во вложении; 2) нужно ли обеспечивать безопасность; 3) сколько клиентов необходимо для развертывания таким образом (усложнить управление KeyVault) и т. Д.   -  person bmoore-msft    schedule 10.11.2017


Ответы (1)


было бы легко развернуть без создания токена

  "Concat('DefaultEndpointsProtocol=https;AccountName=',variables('StorageAccountName'),';AccountKey=',listKeys(resourceId('otherResourceGroup', 'Microsoft.Storage/storageAccounts', variables('StorageAccountName')), providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value)]"

Код, который вы упомянули, получает строку подключения из учетной записи хранения. Хранилище Azure предоставляет первичный и вторичный ключи, поэтому мы можем использовать API ключей списка для получения ключей учетной записи. Но для токена SAS нам нужно его сгенерировать, нам нужно указать время начала, время истечения срока действия, разрешение на доступ и т. д. Исходя из моего опыта, нет такого же способа, как listkey, для сгенерированного токена sas.

Таким образом, мне не нужно генерировать токен SAS каждый раз, когда я

Но мы могли бы хранить токен SAS в Key Vault, тогда мы могли бы получить значение динамически в шаблоне ARM. Подробную информацию мы могли бы сослаться на это блог.

 {
  "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {

    "sasToken": {
      "reference": {
        "keyVault": {
          "id": "/subscriptions/{subscriptionId}/resourceGroups/{resource group name}/providers/Microsoft.KeyVault/vaults/MyUniqueKeyVaultName"
        },
        "secretName": "secretName"
      }
    }
  }

}
person Tom Sun - MSFT    schedule 09.11.2017
comment
На данный момент я использую в качестве параметра токен SAS. Причина, по которой я спрашиваю, заключается в том, что мой JSON будет загружен в шаблоны Azure, а затем предоставлен клиенту. идея заключалась в том, чтобы клиенту не приходилось генерировать токен SAS каждый раз, когда он хотел развернуть машину. Кроме того, у меня есть вложенный шаблон, поэтому для того, чтобы идея keyVault работала над самим вложенным шаблоном, его нужно будет ввести в качестве параметра, но это не работает, когда вы используете шаблоны Azure, если идея предназначена для конечного пользователя. просто заполнить пару строк / параметров (имя, hdd gb, теги и т. д.) Ваш ответ правильный, но не для меня - person Beefcake; 09.11.2017
comment
Для Keyvault токен sas хранит значение в Azure, а не помещает его в качестве параметра в paramter.json. - person Tom Sun - MSFT; 09.11.2017
comment
Мы можем получить sastoken из хранилища ключей Azure динамически с помощью keyvault secretName. - person Tom Sun - MSFT; 09.11.2017
comment
Подождите ... вы говорите, что я могу поместить этот код keyvault в раздел параметров родительского шаблона, а НЕ в файл * .parameters.json? - person Beefcake; 09.11.2017