Поделиться через


Добавление и удаление сертификатов для кластера Service Fabric в Azure

Рекомендуется ознакомиться с тем, как Service Fabric использует сертификаты X.509 и ознакомиться с сценариями безопасности кластера. Необходимо понять, что такое сертификат кластера и для чего он используется, прежде чем продолжить.

По умолчанию режим загрузки сертификата пакета SDK для Azure Service Fabrics заключается в развертывании и использовании определенного сертификата с датой срока истечения далеко в будущем, независимо от их первичного или вторичного определения конфигурации. Возвращение к классическому режиму работы — это не рекомендованное расширенное действие, которое потребует установить для параметра "UseSecondaryIfNever" значение "false" в конфигурации Fabric.Code.

Service Fabric позволяет указать в дополнение к сертификатам клиента два сертификата кластера, основной и дополнительный. Сделать это можно при настройке сертификата безопасности во время создания кластера. Чтобы узнать больше об их настройке во время создания, ознакомьтесь с процедурой создания кластера Azure с помощью портала или Azure Resource Manager. Если во время создания указан только один сертификат кластера, то он используется в качестве основного сертификата. После создания кластера можно добавить новый сертификат в качестве дополнительного.

Примечание.

Для работы с безопасным кластером всегда требуется хотя бы один действительный (не отозванный и не просроченный) развернутый сертификат кластера (основной или дополнительный). В противном случае кластер не будет функционировать. За 90 дней до истечения срока действия всех действительных сертификатов система создает трассировку "Предупреждение" и событие предупреждения о работоспособности на узле. В настоящее время это единственные уведомления, которые Service Fabric отправляет относительно истечения срока действия сертификата.

Примечание.

Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Чтобы начать работу, см. статью Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.

Добавление дополнительного сертификата кластера с помощью портала

Дополнительный сертификат кластера нельзя добавить с помощью портал Azure; используйте Azure Resource Manager.

Удаление сертификата кластера с помощью портала

Для безопасного кластера всегда требуется по крайней мере один действительный (не отозванный и не истекший срок действия) сертификат. Сертификат, развернутый с максимальной даты окончания срока действия, будет использоваться, и удаление этого сертификата приведет к остановке работы кластера; убедитесь, что срок действия сертификата истек, или неиспользуемый сертификат, срок действия которого истекает в ближайшее время.

Чтобы удалить неиспользуемый сертификат безопасности кластера, перейдите в раздел "Безопасность" и выберите "Удалить" в контекстном меню неиспользуемого сертификата.

Если вы намерены удалить сертификат, помеченный как первичный, необходимо развернуть вторичный сертификат с датой истечения срока действия в будущем, чем первичный сертификат, что позволяет выполнять автоматическое переключение; удалите первичный сертификат после завершения автоматической отката.

Добавление дополнительного сертификата с помощью Azure Resource Manager

В этих шагах предполагается, что вы знакомы с тем, как работает Resource Manager и развернули по крайней мере один кластер Service Fabric с помощью шаблона Resource Manager, и у вас есть шаблон, используемый для настройки кластера удобно. Предполагается также, что вы комфортно используете JSON.

Примечание.

Если вам нужен пример шаблона и параметров, которые можно использовать в качестве образца или отправной точки, скачайте его из этого репозитория git-repo.

Изменение шаблона Resource Manager

Для простоты выполнения пример 5-VM-1-NodeTypes-Secure_Step2.JSON содержит все внесенные изменения. Пример доступен в репозитории Git.

Обязательные шаги

  1. Откройте шаблон Resource Manager, который использовался для развертывания кластера. (Если вы скачали пример из указанного выше репозитория, воспользуйтесь файлом 5-VM-1-NodeTypes-Secure_Step1.JSON для развертывания защищенного кластера, а затем откройте этот шаблон.)

  2. Добавьте в раздел параметров шаблона два новых параметра строкового типа (secCertificateThumbprint и secCertificateUrlValue). Можно скопировать следующий фрагмент кода и добавить его в шаблон. В зависимости от источника шаблона, эти параметры уже могут быть определены. В таком случае перейдите к следующему шагу.

       "secCertificateThumbprint": {
          "type": "string",
          "metadata": {
            "description": "Certificate Thumbprint"
          }
        },
        "secCertificateUrlValue": {
          "type": "string",
          "metadata": {
            "description": "Refers to the location URL in your key vault where the certificate was uploaded, it is should be in the format of https://<name of the vault>.vault.azure.net:443/secrets/<exact location>"
          }
        },
    
    
  3. Внесите изменения в ресурс Microsoft.ServiceFabric/clusters. Для этого найдите определение ресурса Microsoft.ServiceFabric/clusters в шаблоне. В свойствах этого определения вы найдете тег JSON "Certificate", который должен выглядеть примерно так, как показано в следующем фрагменте JSON:

          "properties": {
            "certificate": {
              "thumbprint": "[parameters('certificateThumbprint')]",
              "x509StoreName": "[parameters('certificateStoreValue')]"
         }
    

    Добавьте новый тег thumbprintSecondary и присвойте ему значение [parameters('secCertificateThumbprint')].

    Теперь определение ресурса должно выглядеть следующим образом (в зависимости от источника шаблона оно может отличаться от приведенного ниже фрагмента).

          "properties": {
            "certificate": {
              "thumbprint": "[parameters('certificateThumbprint')]",
              "thumbprintSecondary": "[parameters('secCertificateThumbprint')]",
              "x509StoreName": "[parameters('certificateStoreValue')]"
         }
    

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

          "properties": {
            "certificate": {
              "thumbprint": "[parameters('secCertificateThumbprint')]",
              "thumbprintSecondary": "[parameters('certificateThumbprint')]",
              "x509StoreName": "[parameters('certificateStoreValue')]"
         }
    
  4. Внесите изменения во все определения ресурсов Microsoft.Compute/virtualMachineScaleSets. Для этого найдите определение ресурса Microsoft.Compute/virtualMachineScaleSets. Перейдите к подразделу "publisher": "Microsoft.Azure.ServiceFabric" в разделе "virtualMachineProfile".

    В списке параметров издателя Service Fabric должно отображаться примерно следующее.

    Json_Pub_Setting1

    Добавьте к ним новый сертификат.

                   "certificateSecondary": {
                        "thumbprint": "[parameters('secCertificateThumbprint')]",
                        "x509StoreName": "[parameters('certificateStoreValue')]"
                        }
                      },
    
    

    Свойства должны выглядеть следующим образом:

    Json_Pub_Setting2

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

                   "certificate": {
                       "thumbprint": "[parameters('secCertificateThumbprint')]",
                       "x509StoreName": "[parameters('certificateStoreValue')]"
                         },
                   "certificateSecondary": {
                        "thumbprint": "[parameters('certificateThumbprint')]",
                        "x509StoreName": "[parameters('certificateStoreValue')]"
                        }
                      },
    

    Свойства должны выглядеть следующим образом:
    Json_Pub_Setting3

  5. Внесите изменения во все определения ресурсов Microsoft.Compute/virtualMachineScaleSets. Для этого найдите определение ресурса Microsoft.Compute/virtualMachineScaleSets. Перейдите к подразделу "vaultCertificates": в разделе "OSProfile". Должно отобразиться примерно следующее.

    Json_Pub_Setting4

    Добавьте secCertificateUrlValue. Используйте следующий фрагмент:

                      {
                        "certificateStore": "[parameters('certificateStoreValue')]",
                        "certificateUrl": "[parameters('secCertificateUrlValue')]"
                      }
    
    

    Теперь окончательная версия кода JSON должна выглядеть следующим образом: Json_Pub_Setting5

Примечание.

Обязательно повторите шаги 4 и 5 для всех определений ресурса Nodetypes/Microsoft.Compute/virtualMachineScaleSets в шаблоне. Если пропустить хотя бы одно из них, сертификат не будет установлен в этот масштабируемый набор виртуальных машин, что может привести к непредсказуемым результатам в кластере, в том числе выходу кластера из строя (если у вас не будет действительного сертификата для обеспечения безопасности кластера). Поэтому проверьте все еще раз, прежде чем продолжать.

Изменение файла шаблона с учетом новых параметров, добавленных выше

Если вы используете пример из репозитория Git для последующего выполнения, вы можете начать вносить изменения в пример 5-VM-1-NodeTypes-Secure.parameters_Step2.JSON

Измените параметр File в шаблоне Resource Manager. Добавьте два новых параметра secCertificateThumbprint и secCertificateUrlValue.

    "secCertificateThumbprint": {
      "value": "thumbprint value"
    },
    "secCertificateUrlValue": {
      "value": "Refers to the location URL in your key vault where the certificate was uploaded, it is should be in the format of https://<name of the vault>.vault.azure.net:443/secrets/<exact location>"
     },

Развертывание шаблона в Azure

  • Теперь вы готовы развернуть шаблон в Azure. Откройте командную строку Azure PowerShell версии не ниже 1.
  • Войдите со своей учетной записью Azure и выберите подписку Azure. Это важный шаг для пользователей, имеющих доступ к нескольким подпискам Azure.
Connect-AzAccount
Select-AzSubscription -SubscriptionId <Subscription ID> 

Проверьте шаблон перед его развертыванием. Используйте группу ресурсов, в которой развернут кластер.

Test-AzResourceGroupDeployment -ResourceGroupName <Resource Group that your cluster is currently deployed to> -TemplateFile <PathToTemplate>

Разверните шаблон в группу ресурсов. Используйте группу ресурсов, в которой развернут кластер. Выполните команду New-AzResourceGroupDeployment. Не нужно указывать режим, так как значение по умолчанию является добавочным.

Примечание.

Если задан полный режим, то вы можете случайно удалить ресурсы, которые находятся не в шаблоне. Поэтому не используйте этот режим данном сценарии.

New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName <Resource Group that your cluster is currently deployed to> -TemplateFile <PathToTemplate>

Ниже приведен полный пример того же PowerShell.

$ResourceGroup2 = "chackosecure5"
$TemplateFile = "C:\GitHub\Service-Fabric\ARM Templates\Cert Rollover Sample\5-VM-1-NodeTypes-Secure_Step2.json"
$TemplateParmFile = "C:\GitHub\Service-Fabric\ARM Templates\Cert Rollover Sample\5-VM-1-NodeTypes-Secure.parameters_Step2.json"

New-AzResourceGroupDeployment -ResourceGroupName $ResourceGroup2 -TemplateParameterFile $TemplateParmFile -TemplateUri $TemplateFile -clusterName $ResourceGroup2

После завершения развертывания подключитесь к кластеру с помощью нового сертификата и выполните несколько запросов. Если вы можете сделать. Затем можно удалить старый сертификат.

Если вы используете самозаверяющий сертификат, не забудьте импортировать их в локальное хранилище сертификатов TrustedPeople.

######## Set up the certs on your local box
Import-PfxCertificate -Exportable -CertStoreLocation Cert:\CurrentUser\TrustedPeople -FilePath c:\Mycertificates\chackdanTestCertificate9.pfx -Password (ConvertTo-SecureString -String abcd123 -AsPlainText -Force)
Import-PfxCertificate -Exportable -CertStoreLocation Cert:\CurrentUser\My -FilePath c:\Mycertificates\chackdanTestCertificate9.pfx -Password (ConvertTo-SecureString -String abcd123 -AsPlainText -Force)

Краткое руководство по этой команде для подключения к защищенному кластеру

$ClusterName= "chackosecure5.westus.cloudapp.azure.com:19000"
$CertThumbprint= "70EF5E22ADB649799DA3C8B6A6BF7SD1D630F8F3" 

Connect-serviceFabricCluster -ConnectionEndpoint $ClusterName -KeepAliveIntervalInSec 10 `
    -X509Credential `
    -ServerCertThumbprint $CertThumbprint  `
    -FindType FindByThumbprint `
    -FindValue $CertThumbprint `
    -StoreLocation CurrentUser `
    -StoreName My

Краткое руководство по этой команде для получения работоспособности кластера

Get-ServiceFabricClusterHealth 

Разверните сертификаты клиента в кластере.

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

Добавление или удаление сертификатов клиента

В дополнение к сертификатам кластера можно добавить сертификаты клиента, которые позволят выполнять операции управления в кластере Service Fabric.

Вы можете добавлять сертификаты клиента двух типов: для администратора или только для чтения. Затем их можно использовать для управления доступом к операциям, выполняемым администратором, и операциям, связанным с запросами в кластере. По умолчанию сертификаты кластера добавляются в список разрешенных сертификатов администратора.

Количество сертификатов клиента не ограничено. Каждое добавление или удаление приводит к обновлению конфигурации в кластере Service Fabric.

Добавление сертификатов клиента для администратора или только для чтения с помощью портала

  1. Перейдите к разделу "Безопасность" и выберите "+ Проверка подлинности" в его верхней части.
  2. В разделе "Добавление проверки подлинности" выберите "Тип проверки подлинности" — Read-only client (Клиент с доступом только для чтения) или Admin client (Клиент с правами администратора).
  3. Теперь выберите метод авторизации. указывает способ поиска сертификата в Service Fabric (по имени субъекта или по отпечатку). Как правило, не рекомендуется использовать метод авторизации имени субъекта.

Удаление сертификатов клиентов для администратора или только для чтения с помощью портала

Чтобы дополнительный сертификат больше не использовался для обеспечения безопасности кластера, перейдите к разделу "Безопасность" и в контекстном меню соответствующего сертификата выберите параметр "Удалить".

Добавление сертификатов приложений в масштабируемый набор виртуальных машин

Развертывание сертификата, используемого для приложений в кластере, показано в этом примере сценария PowerShell.

Следующие шаги

Дополнительные сведения об управлении кластерами доступны в следующих статьях.