Развертывание секретов приложений в управляемых кластерах Service Fabric

Секретом может считаться любая конфиденциальная информации, например строка подключения к хранилищу, пароль или другое значение, которое не должно обрабатываться в виде обычного текста. Рекомендуется использовать Azure Key Vault для управления ключами и секретами для управляемых кластеров Service Fabric, а также для этой статьи. Однако использование секретов в приложении осуществляется без привязки к определенной облачной платформе, чтобы приложения могли быть развернуты в кластере, размещенном в любом месте.

Для управления параметрами конфигурации службы рекомендуется использовать пакеты конфигурации службы. Пакеты конфигурации имеют числовые версии, которые можно обновлять, используя управляемые последовательные обновления с проверкой работоспособности и автоматическим откатом обновления. Это предпочтительно для глобальной конфигурации, так как уменьшает вероятность глобального простоя службы. Зашифрованные секреты не являются исключением. Служба Service Fabric снабжена встроенными компонентами для шифрования и расшифровки значений в файле Settings.xml пакета конфигурации. При этом используется сертификат шифрования.

На этой схеме показаны основные этапы процесса управления секретами в приложении Service Fabric:

обзор управления секретами

Этот поток состоит из четырех основных шагов.

  1. Получение сертификата шифрования данных.
  2. Установка сертификата в кластере.
  3. Шифрование значений секретов при развертывании приложения с помощью сертификата и их включение в файл конфигурации Settings.xml службы.
  4. Чтение зашифрованных значений из файла Settings.xml. Для расшифровки используется тот же сертификат шифрования.

Azure Key Vault используется в данном случае как надежное хранилище для сертификатов и как способ получения сертификатов, установленных на узлах управляемых кластеров Service Fabric в Azure.

Пример реализации секретов приложений см. в разделе Управление секретами приложения.

Кроме того, мы также поддерживаем KeyVaultReference. Поддержка KeyVaultReference в Service Fabric упрощает развертывание секретов в ваших приложениях с помощью ссылки на URL-адрес секрета, который хранится в Key Vault

Создание сертификата шифрования данных

Чтобы создать собственное хранилище ключей и настроить сертификаты, выполните инструкции Azure Key Vault при помощи Azure CLI, PowerShell, Portal и пр.

Примечание.

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

Установка сертификата в кластере

Этот сертификат должен быть установлен на каждом узле в кластере, а управляемые кластеры Service Fabric упрощают эту задачу. Служба управляемых кластеров может отправлять в узлы секреты, относящиеся к конкретным версиям, помогая тем самым устанавливать секреты, которые изменяются нечасто, как, например, установка частного корневого центра сертификации на узлах. Для большинства рабочих нагрузок мы рекомендуем использовать расширение KeyVault. Расширение виртуальной машины Key Vault обеспечивает автоматическое обновление сертификатов, хранящихся в Azure Key Vault в сравнении со статической версией.

Для управляемых кластеров вам потребуются три значения: два из Azure Key Vault и одно, которое вы решите указать для имени локального хранилища на узлах.

Параметры:

  • Source Vault: это
    • например: /subscriptions/{subscriptionid}/resourceGroups/myrg1/providers/Microsoft.KeyVault/vaults/mykeyvault1
  • Certificate URL: это полный идентификатор секрета Key Vault и не учитывает регистр и неизменяемый
  • Certificate Store: это локальное хранилище сертификатов на узлах, где будет размещен сертификат.
    • имя хранилища сертификатов на узлах, например: "MY"

Управляемые кластеры Service Fabric поддерживают два метода добавления к узлам секретов для конкретных версий.

  1. Портал во время создания исходного кластера в эту область вставляет только значения, указанные выше.

ввод секретов на портале

  1. Azure Resource Manager во время создания или в любое время
{
  "apiVersion": "2021-05-01",
  "type": "Microsoft.ServiceFabric/managedclusters/nodetypes",
  "properties": {
    "vmSecrets": [
      {
        "sourceVault": {
          "id": "/subscriptions/{subscriptionid}/resourceGroups/myrg1/providers/Microsoft.KeyVault/vaults/mykeyvault1"
        },
        "vaultCertificates": [
          {
            "certificateStore": "MY",
            "certificateUrl": "https://mykeyvault1.vault.azure.net/certificates/{certificatename}/{secret-version}"
          }
        ]
      }
    ]
  }
}