Добавление и удаление сертификатов для кластера 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.
Обязательные шаги
Откройте шаблон Resource Manager, который использовался для развертывания кластера. (Если вы скачали пример из указанного выше репозитория, воспользуйтесь файлом 5-VM-1-NodeTypes-Secure_Step1.JSON для развертывания защищенного кластера, а затем откройте этот шаблон.)
Добавьте в раздел параметров шаблона два новых параметра строкового типа (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>" } },
Внесите изменения в ресурс 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')]" }
Внесите изменения во все определения ресурсов Microsoft.Compute/virtualMachineScaleSets. Для этого найдите определение ресурса Microsoft.Compute/virtualMachineScaleSets. Перейдите к подразделу "publisher": "Microsoft.Azure.ServiceFabric" в разделе "virtualMachineProfile".
В списке параметров издателя Service Fabric должно отображаться примерно следующее.
Добавьте к ним новый сертификат.
"certificateSecondary": { "thumbprint": "[parameters('secCertificateThumbprint')]", "x509StoreName": "[parameters('certificateStoreValue')]" } },
Свойства должны выглядеть следующим образом:
Если необходимо сменить сертификат, укажите новый сертификат в качестве основного, а текущий основной сертификат назначьте на роль дополнительного. В результате текущий сертификат заменяется новым сертификатом за один шаг развертывания.
"certificate": { "thumbprint": "[parameters('secCertificateThumbprint')]", "x509StoreName": "[parameters('certificateStoreValue')]" }, "certificateSecondary": { "thumbprint": "[parameters('certificateThumbprint')]", "x509StoreName": "[parameters('certificateStoreValue')]" } },
Свойства должны выглядеть следующим образом:
Внесите изменения во все определения ресурсов Microsoft.Compute/virtualMachineScaleSets. Для этого найдите определение ресурса Microsoft.Compute/virtualMachineScaleSets. Перейдите к подразделу "vaultCertificates": в разделе "OSProfile". Должно отобразиться примерно следующее.
Добавьте secCertificateUrlValue. Используйте следующий фрагмент:
{ "certificateStore": "[parameters('certificateStoreValue')]", "certificateUrl": "[parameters('secCertificateUrlValue')]" }
Теперь окончательная версия кода JSON должна выглядеть следующим образом:
Примечание.
Обязательно повторите шаги 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.
Добавление сертификатов клиента для администратора или только для чтения с помощью портала
- Перейдите к разделу "Безопасность" и выберите "+ Проверка подлинности" в его верхней части.
- В разделе "Добавление проверки подлинности" выберите "Тип проверки подлинности" — Read-only client (Клиент с доступом только для чтения) или Admin client (Клиент с правами администратора).
- Теперь выберите метод авторизации. указывает способ поиска сертификата в Service Fabric (по имени субъекта или по отпечатку). Как правило, не рекомендуется использовать метод авторизации имени субъекта.
Удаление сертификатов клиентов для администратора или только для чтения с помощью портала
Чтобы дополнительный сертификат больше не использовался для обеспечения безопасности кластера, перейдите к разделу "Безопасность" и в контекстном меню соответствующего сертификата выберите параметр "Удалить".
Добавление сертификатов приложений в масштабируемый набор виртуальных машин
Развертывание сертификата, используемого для приложений в кластере, показано в этом примере сценария PowerShell.
Следующие шаги
Дополнительные сведения об управлении кластерами доступны в следующих статьях.