Перейти к основному контенту

Подготовка секретов и Vault

Blitz использует набор секретов для доступа к БД, шифрования, работы административной консоли, keystore и дополнительных модулей. Этот раздел описывает, как подготовить такие секреты и как подключить HashiCorp Vault.

ОписаниеКакие Helm-чартасекреты нужны Blitz

Helm-чарт blitz-idp устанавливает в кластерТиповой набор приложений и вспомогательных ресурсов, необходимых для работы Blitz Identity Provider.

В зависимости от конфигурации и включённых модулей чарт может создавать:включает:

  • Deployment и StatefulSet для модулей Blitz
  • Service для внутреннего и внешнего доступа
  • Ingress для публикации HTTP-маршрутов
  • Secret и ConfigMap для статической конфигурации
  • PersistentVolumeClaim для общей динамической конфигурации
  • Job начальной загрузки конфигурации
  • PodDisruptionBudgetBLITZ_BOOT_MASTERKEY
  • NetworkPolicyBLITZ_INTERNALSTORE_JDBC_SECRET
  • ServiceMonitor и PodMonitorBLITZ_CREDENTIALS_ADMIN_PASSWORD
  • ресурсыBLITZ_KEYSTORE_PASSWORD
  • Vault
  • BLITZ_LICENSE
  • Secrets
  • BLITZ_CONSOLE_FP_CLIENT_SECRET
  • Operator,
  • BLITZ_CONSOLE_UTILSCS_ENCODING_KEY
  • если
  • BLITZ_CONSOLE_UTILSCS_HMAC_KEY
  • включена
  • BLITZ_PANEL_CLIENT_SECRET
  • интеграция
  • BLITZ_PANEL_ENCODING_KEY
  • с
  • BLITZ_PANEL_HMAC_KEY
  • BLITZ_PANEL_JDBC_PASSWORD
  • BLITZ_LDAP_MFA_MASTER_KEY
  • BLITZ_LDAP_MFA_CONFIRMATION_SHARED_KEY
  • BLITZ_LDAP_MFA_KEYSTORE_PASSWORD

Если вы хотите хранить keystore в Vault, также используются:

  • BLITZ_KEYSTORE_BKS_B64
  • BLITZ_LDAP_MFA_KEYSTORE_JKS_B64

Генерация секретов

В архиве Helm чарта поставляется утилита для быстрой генерации необходимых секретов:

tools/secrets/blitz-secrets.sh

Основной функционал:

  • генерация секретов
  • генерация Keystore для Blitz IDP
  • генерация Keystore для Blitz LDAP MFA
  • вывод секретов в формате KEY=VALUE
  • вывод секретов в формате JSON для загрузки в Vault

ВерсияВместе чартас требуетутилитой Kubernetesпоставляется README, в нем вы можете найти более подробную информацию по использованию.

Пример генерации секретов в JSON формате для Vault

tools/secrets/blitz-secrets.sh \
  --db-pass "S3cureDBPass" \
  --admin-pass "S3cureAdminPass" \
  --license "AAAABBBBCCCCDDDD" \
  --master-key "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" \
  --ldap-mfa-confirmation-shared-key "radius-shared-key" \
  --format json > secrets.json

Пример генерации секретов в stdout

tools/secrets/blitz-secrets.sh \
  --db-pass "S3cureDBPass" \
  --admin-pass "S3cureAdminPass" \
  --license "AAAA-BBBB-CCCC-DDDD" \
  --format stdout

Когда использовать Vault

Для production-среды рекомендуется включать Vault:

vault:
  enabled: true

Это даёт несколько преимуществ:

  • секреты не нижехранятся в открытом виде в 1.26values.yaml
  • можно централизованно управлять ротацией
  • чарт использует VSO для доставки секретов в Kubernetes

Загрузка секретов в Vault

Пример записи данных в KV:

vault kv put kv/blitz/helm/test/env \
  BLITZ_BOOT_MASTERKEY="0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" \
  BLITZ_CONSOLE_FP_CLIENT_SECRET="console-fp-secret" \
  BLITZ_CONSOLE_UTILSCS_ENCODING_KEY="console-encoding-key" \
  BLITZ_CONSOLE_UTILSCS_HMAC_KEY="console-hmac-key" \
  BLITZ_CREDENTIALS_ADMIN_PASSWORD="AdminPassword123" \
  BLITZ_INTERNALSTORE_JDBC_SECRET="db-password" \
  BLITZ_KEYSTORE_PASSWORD="keystore-password" \
  BLITZ_KEYSTORE_BKS_B64="<base64>" \
  BLITZ_LICENSE="AAAA-BBBB-CCCC-DDDD" \
  BLITZ_PANEL_CLIENT_SECRET="panel-client-secret" \
  BLITZ_PANEL_ENCODING_KEY="panel-encoding-key" \
  BLITZ_PANEL_HMAC_KEY="panel-hmac-key" \
  BLITZ_PANEL_JDBC_PASSWORD="panel-db-password" \
  BLITZ_LDAP_MFA_MASTER_KEY="0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" \
  BLITZ_LDAP_MFA_CONFIRMATION_SHARED_KEY="radius-shared-key" \
  BLITZ_LDAP_MFA_KEYSTORE_PASSWORD="ldap-mfa-keystore-password" \
  BLITZ_LDAP_MFA_KEYSTORE_JKS_B64="<base64>"

Чарт ожидает полный путь до секрета в параметре vault.source.path.

ОсновныеПолитика модулидоступа Blitzв Vault

ЧартМинимальная поддерживаетполитика следующиеможет модули:выглядеть так:

    path 
  • idp"kv/data/blitz/helm/test/env" { capabilities = ["read"] } path "kv/metadata/blitz/helm/test/*" { capabilities = ["list"] }  — основной модуль аутентификации и выдачи identity-сервисов
  • console — административная консоль Blitz
  • reg — модуль регистрации
  • recovery — модуль восстановления доступа
  • panel — дополнительный пользовательский веб-модуль
  • ldapMfa — сервис LDAP MFA

ПоЗагрузка умолчаниюполитики:

в
vault чартеpolicy включеныwrite blitz-helm-test-read policy.hcl

Настройка idpAppRole,

Пример создания consoleAppRole,:

vault write auth/approle/role/blitz-vso-helm-test \
  token_policies="blitz-helm-test-read" \
  token_ttl="1h" \
  token_max_ttl="4h" \
  secret_id_ttl="24h"

Получение reg, recovery. Модули panelrole_id и ldapMfasecret_id:

vault read -field=role_id auth/approle/role/blitz-vso-helm-test/role-id
vault write -field=secret_id -f auth/approle/role/blitz-vso-helm-test/secret-id

secret_id включаютсянужно отдельносохранить черезв конфигурацию чарта.Kubernetes:

kubectl -n blitz create secret generic vault-approle-secretid \
  --from-literal=id='generated-secret-id'

СхемаБлок конфигурации

В чарте используется двухуровневая модель конфигурации:

  • статическая конфигурация
  • динамическая конфигурация

Статическая конфигурация

Статическая конфигурация рендерится Helm и попадаетVault в Secretvalues.yaml, ConfigMap или, при использовании Vault, в VaultStaticSecret.

ТиповыеМинимальный статические файлы:

  • boot.conf
  • overlay.conf
  • play.conf
  • logback.xml
  • blitz-keystore.bks
  • console.conf

Для модулей Blitz эти файлы по умолчанию монтируются в каталог:пример:

vault:
  enabled: true
  refreshAfter: "60s"
  source:
    mount: "kv"
    path: "blitz/helm/test/env"
  connection:
    create: true
    address: "https:/usr/share/identityblitz/blitz-config/vault.company.loc"
    
skipTLSVerify:

Динамическаяfalse конфигурация

auth:

Динамическаяcreate: конфигурацияtrue используетсяmount: в"approle" сценариях,appRole: гдеroleId: конфиги"aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" поставляютсяsecretRef: не только внутри образа, но и из внешнего источника.

По умолчанию она размещается по пути:

/usr/share/identityblitz/idp-config"vault-approle-secretid"

Если выбраниспользуется режимVault Enterprise, можно дополнительно задать namespace Vault в config.readOnly=false, чарт использует общий PersistentVolumeClaimvault.source.vaultNamespace и публикует туда конфигурацию через специальный Jobvault.auth.vaultNamespace.

ДваСценарий режимабез поставки конфигурацииVault

Режим

Blitz image-only

можно

Режим config.readOnly=true подходит для случаев, когда конфигурация встроена в Docker-образразвернуть и еёбез не нужно инициализировать из Git или локального каталога.Vault:

vault:
  enabled: false

ОсобенностиВ режима:этом случае нужно:

  • нетпередать общегонужные значения через PersistentVolumeClaimvalues.yaml
  • не запускаетсяиспользовать init-confSecret JobKubernetes там, где это требуется режимом поставки конфигурации
  • эксплуатацияаккуратно прощеорганизовать хранение и безопаснее
  • доставку
  • изменениясекретов конфигурациивне вносятся через пересборку образовHelm-чарта

Режим

Ограничения Git/Localтакого -> PVC

Режим config.readOnly=false нужен, когда конфигурацию требуется публиковать в общий каталог во время установки.

Особенности режима:подхода:

  • используетсявыше общийриск PersistentVolumeClaimутечки секретов через файлы конфигурации
  • источниксложнее динамическойуправлять конфигурации задаётся через config.source.typeротацией
  • создаётсябольше init-confручной Job
  • работы
  • рабочиепри поды могут ожидают готовности конфигурации через initContainerсопровождении

Kubernetes-ресурсыLDAP MFA

Ingress

Ingress публикует HTTP-эндпоинты Blitz наружу. Чарт поддерживает настройку класса ingress-контроллера, аннотаций и TLS-секрета.

PersistentVolumeClaim

PersistentVolumeClaim нужен только в сценарии с динамической конфигурацией. Он хранит конфигурацию и вспомогательные ресурсы, доступные модулям Blitz IDP.

Vault и VSO

Если используется Blitz LDAP MFA с vault.enabled=trueconfirmationFactor.type=radius, чартнужен может забирать секреты из HashiCorp Vault через Vault Secrets Operator. В этом случае вместо прямого создания некоторых Secret в кластере используются ресурсы:секрет:

  • VaultConnection
  • VaultAuth
  • VaultStaticSecretBLITZ_LDAP_MFA_CONFIRMATION_SHARED_KEY

При включённом Vault его можно не дублировать в конфигурации.

Практические рекомендации

  • не передавайте секреты через PodDisruptionBudgethelm

    PodDisruptionBudget--set защищаетв модулиproduction-среде

  • от
  • храните добровольныхисходные прерываний,значения напримерв при kubectl drainVault или плановомкорпоративном обслуживаниихранилище узлов.

    секретов
  • фиксируйте, кто отвечает за ротацию NetworkPolicymaster key
  • NetworkPolicy ограничивает сетевой доступ к подам Blitz. В чарте есть как более мягкий режим, так и строгийпаролей режимБД с

  • используйте явнымиодин правилами.

    согласованный процесс для всех окружений