Получите последнюю версию сертификата из хранилища ключей Azure в шаблоне ARM - PullRequest
0 голосов
/ 28 января 2019

Создание шаблона ARM, для которого требуется установить сертификат SSL, который находится внутри хранилища ключей Azure.Если я укажу сертификат с отпечатком, он будет работать нормально:

https://contoso.vault.azure.net/secrets/web01-test-contoso-com/968bf207451149d3aceb390065af9d3a

Но поскольку сертификат находится в режиме отсчета времени, это жестко кодирует зависимость, которая может устареть в шаблоне ARM.Я бы предпочел просто указать последнюю версию (как это показано на портале).Однако я не нашел никакой документации, которая показывает, как это сделать, или даже упоминает, если это возможно.

Я провел пару экспериментов, используя:

https://contoso.vault.azure.net/secrets/web01-test-contoso-com

и

https://contoso.vault.azure.net/secrets/web01-test-contoso-com/latest

Но в обоих случаях я получаю одно и то же сообщение об ошибке:

message '{
   "error": {
     "code": "InvalidParameter",
     "message": "https://contoso.vault.azure.net/secrets/web01-test-contoso-com/latest is 
 not a valid versioned Key Vault Secret URL. It should be in the format 
 https://<vaultEndpoint>/secrets/<secretName>/<secretVersion>.",
     "target": "certificateUrl"
   }
}'

Поэтому мой вопрос: Как я могу ссылаться на сертификат таким образом, чтобы получить последнюю версию?

Для ясности я использую URL-адрес в разделе secrets шаблона ARM для виртуальной машины следующим образом, который получает сертификат из хранилища ключей Azure и устанавливает его в сертификат Windowsstore.

"secrets": [
    {
      "sourceVault": {
        "id": "[resourceId(parameters('keyVaultResourceGroupName'), 'Microsoft.KeyVault/vaults', parameters('keyVaultName'))]"
      },
      "vaultCertificates": [
        {
          "certificateUrl": "https://contoso.vault.azure.net/secrets/web01-test-contoso-com/latest",
          "certificateStore": "My"
        }
      ]
    }
]

ПРИМЕЧАНИЕ: Мне показалось бы странным, что вы можете указать самую последнюю версию ОС для установки, но вы не можете указать, чтобы установить последнюю версиюсертификат.

Ответы [ 2 ]

0 голосов
/ 08 августа 2019

Согласно aswer @ 4c74356b41, я сделал это самостоятельно в скрипте python.

      data = json.loads(kv_auth_response.content)
      #
      ## Lets find youngest vesrion of certificate
      #
      if len(data['value']) > 0:
         for x in range(len(data['value'])):
             if x == 0:
                youngest = data['value'][x]['attributes']['exp']
                cert_url = data['value'][x]
             if data['value'][x]['attributes']['exp'] > youngest:
                youngest = data['value'][x]['attributes']['exp']
                cert_url = data['value'][x]
         arry = cert_url['id'].split('/')
...
         cert_version = arry[len(arry)-1]

На первом шаге цикла значение даты истечения присваивается переменной «младший».На следующих шагах скрипт сравнивает дату истечения с ним и назначает, когда условие выполнено.После того, как скрипт цикла разделяется на «yougests» cert_url и назначает последнюю часть массива переменной «cert_version».

Полный обзор этой проблемы вы можете увидеть в моем скрипте для BYOC для пользовательского домена.Ссылка: https://github.com/przemika/azure-byoc-for-custom-domain/blob/master/start-byoc.py

0 голосов
/ 28 января 2019

Нет прямого \ простого способа сделать это.Key Vault не совсем подходит для работы с шаблонами.

Как и полагает juunas, вы можете написать сценарий или использовать собственное расширение сценария для извлечения этих данных непосредственно из хранилища ключей, например, с помощью идентификатора управляемой службы.

...