Обновите сертификат настраиваемого домена Azure CDN из сценария - PullRequest
0 голосов
/ 13 апреля 2019

Как запустить Azure CDN для чтения последней версии настраиваемого сертификата из хранилища ключей без простоев?

Моя настройка CDN работает нормально, но, учитывая Let's Encrypt, сертификат является недолговечным и требует автоматизациидля обновлений.Выполнение az keyvault certificate import достаточно просто в Azure CLI для обновления сертификата в хранилище ключей, но что дальше?Как сообщить Azure CDN, чтобы начать использовать новую версию сертификата?

Неудачные попытки

  • Ожидание в течение пары часов.Ничего не произошло.
  • Запуск az cdn custom-domain enable-https в домене с уже включенным HTTPS.Результат: внутренняя неправильная конфигурация и пара часов простоя, чтобы сначала отключить пользовательский домен, а затем включить его.Однако сертификат был обновлен.

Из портала Azure

Во всплывающей подсказке портала Azure для версии сертификата настраиваемого домена указано « Выберите версию сертификата, которую вы хотите использовать. По умолчаниюмы будем использовать последнюю версию."Это верно при создании конечной точки, но как начать использовать последнюю версию?Последняя версия уже выбрана из выпадающего списка, но я выбрал предыдущую версию и выбрал последнюю версию.Это позволило «Сохранить».

Сохранение формы привело к безотказному обновлению сертификата.Хорошо, но, учитывая автоматизацию и создание сценариев, на самом деле это не тот путь.

Вещи, которые могут помочь, но я еще не проверял

  • Применение ARM-шаблонаCDN-setup
  • Powershell Az.Cdn имеет Start-AzCdnEndpoint / Stop-AzCdnEndpoint командлетов.Может быть полезно, но 100% гарантия создания простоев.

Могу ли я попробовать что-нибудь в следующем цикле обновления?

Ответы [ 2 ]

2 голосов
/ 15 мая 2019

Запуск az cdn custom-domain enable-https в домене с уже включенным HTTPS. Результат: внутренняя неверная конфигурация и пара часов простоя, чтобы сначала отключить пользовательский домен, а затем включить его.

Если вы имеете в виду, что вы сделали az cdn custom-domain enable-https без флага --custom-domain-https-parameters, , то я полагаю, что это говорит о том, что он должен начать следовать за процессом автоматической сертификации Digicert. По крайней мере, именно это он и сделал для моего домена, когда я попробовал.

FWIW, несмотря на то, что написано в документации, даже самая последняя версия az не распознает этот флаг (azure-cli (2.0.57) + cdn (0.2.0), который вы получаете в свежем контейнере azuresdk/azure-cli-python:latest). Я не уверен, откуда документы получают это. Может не существовать.

Он был добавлен всего 2 месяца назад в .Net SDK, , но еще не в Azure PowerShell Enable-AzCdnCustomDomainHttps. Я предполагаю, что это может скоро попасть в PS.

Сохранение формы привело к безотказному обновлению сертификата. Хорошо, но с учетом автоматизации и написания сценариев, на самом деле это не тот путь.

Вы можете использовать один из SDK, который поддерживает CustomDomainHttpsParameters для конечной точки enableCustomHttps, например .Net SDK, как я уже говорил выше.

Или вы можете напрямую использовать REST API, что я и делаю для своего собственного домена. POST до https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Cdn/profiles/$cdnProfileName/endpoints/$cdnEndpointName/customDomains/$cdnCustomDomainName/enableCustomHttps?api-version=2018-04-02 с корпусом application/json, который выглядит как

{
    "certificateSource": "AzureKeyVault",
    "certificateSourceParameters": {
        "@odata.type": "#Microsoft.Azure.Cdn.Models.KeyVaultCertificateSourceParameters",
        "deleteRule": "NoAction",
        "resourceGroupName": "$resourceGroupName",
        "secretName": "$secretName",
        "secretVersion": "$secretVersion",
        "subscriptionId": "$subscriptionId",
        "updateRule": "NoAction",
        "vaultName": "$keyVaultName"
    },
    "protocolType": "ServerNameIndication"
}

$secretVersion - это то, что было бы другим.

Он следует стандартной семантике REST в том смысле, что возвращает HTTP 202 Accepted, поскольку это длительная асинхронная операция. Он установит заголовок Location в резонансе, и вы должны GET этот URL несколько раз, пока он не преобразуется в код состояния успеха или сбоя.

Обратите внимание, что портал также использует REST API, поэтому вы всегда можете получить его, просто выполнив шаги в пользовательском интерфейсе портала и проверив сетевые запросы в инструментах разработчика вашего браузера. Вам нужно будет получить свой собственный токен oauth2 (создав SP).


В сторону: чтобы сэкономить людям время, которое я потратил на это при попытке сделать это для моего собственного домена, не дайте себя обмануть примером из репозитория API Azure Rest. Этот пример подразумевает версия API 2017-10-12 поддерживает customHttpsParameters, но на самом деле только 2018-04-02 и более новые поддерживают его. Если вы используете 2017-12-12, то этот параметр игнорируется, и он пытается использовать автоматический процесс сертификации Digicert.

0 голосов
/ 18 июня 2019

Как рекомендует @Arnavion, вызов API REST пользовательского домена Azure CDN можно использовать для запуска обновления сертификата, используемого существующим настраиваемым доменом в Azure CDN. Предлагаемые документы по API: https://docs.microsoft.com/en-us/rest/api/cdn/customdomains/enablecustomhttps.. При объединении приведенного выше примера со справочной информацией по API можно создать подходящий запрос с помощью PowerShell 6 Invoke-RestMethod. В случае успеха CDN начнет обновление сертификата из хранилища ключей до конечных точек через несколько минут.

В операции нет хитрости. Все, что нужно, это собрать все необходимые пять параметров для API-обязательных UserManagedHttpsParameters , чтобы указать точный настраиваемый домен в CDN и точно определить сертификат X.509 в хранилище ключей. Также необходимо объединить параметры с действительным токеном-носителем и затем выполнить упомянутый API-вызов, чтобы сообщить CDN о получении нового сертификата из хранилища ключей и его развертывании на всех конечных точках CDN.

Мой скрипт, делающий все это, доступен на https://gist.github.com/HQJaTu/c5695626ba51c6194845fa60913e911b

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

...