Подготовка секретов и Vault
Blitz использует набор секретов для доступа к БД, шифрования, работы административной консоли, keystore и дополнительных модулей. Этот раздел описывает, как подготовить такие секреты и как подключить HashiCorp Vault.
ОписаниеКакие Helm-чартасекреты нужны Blitz
Helm-чарт blitz-idp устанавливает в кластерТиповой набор приложений и вспомогательных ресурсов, необходимых для работы Blitz Identity Provider.
В зависимости от конфигурации и включённых модулей чарт может создавать:включает:
DeploymentиStatefulSetдля модулей BlitzServiceдля внутреннего и внешнего доступаIngressдля публикации HTTP-маршрутовSecretиConfigMapдля статической конфигурацииPersistentVolumeClaimдля общей динамической конфигурацииJobначальной загрузки конфигурацииPodDisruptionBudgetBLITZ_BOOT_MASTERKEYNetworkPolicyBLITZ_INTERNALSTORE_JDBC_SECRETServiceMonitorиPodMonitorBLITZ_CREDENTIALS_ADMIN_PASSWORDресурсыBLITZ_KEYSTORE_PASSWORDBLITZ_LICENSEBLITZ_CONSOLE_FP_CLIENT_SECRETBLITZ_CONSOLE_UTILSCS_ENCODING_KEYBLITZ_CONSOLE_UTILSCS_HMAC_KEYBLITZ_PANEL_CLIENT_SECRETBLITZ_PANEL_ENCODING_KEYBLITZ_PANEL_HMAC_KEYBLITZ_PANEL_JDBC_PASSWORDBLITZ_LDAP_MFA_MASTER_KEYBLITZ_LDAP_MFA_CONFIRMATION_SHARED_KEYBLITZ_LDAP_MFA_KEYSTORE_PASSWORD
Если вы хотите хранить keystore в Vault, также используются:
BLITZ_KEYSTORE_BKS_B64BLITZ_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.confoverlay.confplay.conflogback.xmlblitz-keystore.bksconsole.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-confSecretKubernetes там, где это требуется режимом поставки конфигурацииJobэксплуатацияаккуратнопрощеорганизовать хранение ибезопаснеедоставку изменениясекретовконфигурациивневносятся через пересборку образовHelm-чарта
Режим
Ограничения Git/Localтакого -> PVC
Режим config.readOnly=false нужен, когда конфигурацию требуется публиковать в общий каталог во время установки.
Особенности режима:подхода:
используетсявышеобщийрискутечки секретов через файлы конфигурацииPersistentVolumeClaimисточниксложнеединамическойуправлятьконфигурации задаётся черезротациейconfig.source.typeсоздаётсябольшеручнойinit-confJobработы рабочиеприподы могут ожидают готовности конфигурации черезсопровождении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 в кластере используются ресурсы:секрет:
VaultConnectionVaultAuthVaultStaticSecretBLITZ_LDAP_MFA_CONFIRMATION_SHARED_KEY
При включённом Vault его можно не дублировать в конфигурации.
Практические рекомендации
- не передавайте секреты через
helmPodDisruptionBudgetPodDisruptionBudget--setзащищаетвмодулиproduction-среде - храните
добровольныхисходныепрерываний,значениянапримервприVault илиkubectl drainплановомкорпоративномобслуживаниихранилищеузлов.секретов - фиксируйте, кто отвечает за ротацию
NetworkPolicymaster keyNetworkPolicyограничивает сетевой доступ к подам Blitz. В чарте есть как более мягкий режим, такистрогийпаролейрежимБД - используйте
явнымиодинправилами.согласованный процесс для всех окружений