Vault config provider#
Реализует интерфейс org.apache.kafka.common.config.provider.ConfigProvider и позволяет получать параметры SSL из vault на этапе обработки конфигурации kafka-клиента/брокера/воркера kafka-connect.
Входит в состав библиотеки Ssl-context-builder.
Предусловия#
Не требуются.
Последовательность выполнения#
Провайдер работает только с использованием локального кеша сертификатов в виде JKS-хранилищ.
Поддерживает шифрование секретов для подключения к vault:
ssl.vault.tls.keystore.passwordssl.vault.tls.truststore.passwordssl.vault.auth.passwordssl.vault.auth.secret.idssl.vault.auth.token
Пример конфигурации#
# 1) Подключить config provider
config.providers = vault
config.providers.vault.class = ru.sbt.ss.kafka.VaultConfigProvider
# 2) ОПЦИОНАЛЬНО Настроить энкодер для дешифрации секретов
# Класс энкодера, реализующий интерфейс ru.sbt.ss.Encryptor, по умолчанию ru.sbt.ss.password.BaseEncryptor
# config.providers.vault.param.security.encoding.class = ru.sbt.ss.password.BaseEncryptor
# Ключ для дешифрации секретов (строка или путь до файла)
# config.providers.vault.param.security.encoding.key = secret/secret.pass
# 3) Настроить подключение к vault
# Адрес vault
config.providers.vault.param.ssl.vault.address = https://host:port
# ОПЦИОНАЛЬНО Namespace vault
# config.providers.vault.param.ssl.vault.namespace = namespace
# ОПЦИОНАЛЬНО Настройки повторной отправки запросов к vault
# Кол-во попыток переотправки запроса
# config.providers.vault.param.ssl.vault.retries = 5
# Тайм-аут отправки запроса, с
# config.providers.vault.param.ssl.vault.timeout = 3
# Интервал между повторными попытками переотправки запроса, мс
# config.providers.vault.param.ssl.vault.retry.interval = 500
# Настройки ssl для подключения к vault
config.providers.vault.param.ssl.vault.tls.enable = true
config.providers.vault.param.ssl.vault.tls.keystore.location = vault-keystore.jks
config.providers.vault.param.ssl.vault.tls.keystore.password = encrypted_password
config.providers.vault.param.ssl.vault.tls.key.password = password
config.providers.vault.param.ssl.vault.tls.truststore.location = vault-keystore.jks
config.providers.vault.param.ssl.vault.tls.truststore.password = encrypted_password
config.providers.vault.param.ssl.endpoint.identification.algorithm =
# Настройки авторизации vault
# Пример авторизации с помощью логина и пароля
# Тип авторизации (approle, certificate, password или token)
config.providers.vault.param.ssl.vault.auth.type = password
config.providers.vault.param.ssl.vault.auth.username = test
config.providers.vault.param.ssl.vault.auth.password = encrypted_password
# Пример авторизации в помощью approle
# config.providers.vault.param.ssl.vault.auth.type = approle
# config.providers.vault.param.ssl.vault.auth.role.id = role
# config.providers.vault.param.ssl.vault.auth.secret.id = encrypted_secret
# 4) Настроить генерацию сертификата с помощью vault
# ОПЦИОНАЛЬНО Путь до pki engine
# config.providers.vault.param.ssl.vault.pki.mount = pki
# Имя роли для выпуска сертификата
config.providers.vault.param.ssl.vault.pki.role.name = role
# Common name сертификата (CN)
config.providers.vault.param.ssl.vault.pki.common.name = INTERCEPTOR-TEST
# ОПЦИОНАЛЬНО Электронный адрес владельца сертификата, задается при использовании Secret Manager
# config.providers.vault.param.ssl.vault.pki.email = email@example.com
# ОПЦИОНАЛЬНО Alternative names сертификата
# config.providers.vault.param.ssl.vault.pki.alt.names = alt-name
# ОПЦИОНАЛЬНО Alternative ip сертификата
# config.providers.vault.param.ssl.vault.pki.alt.ip = 127.0.0.1
# ОПЦИОНАЛЬНО TTL (time-to-live) сертификата
# config.providers.vault.param.ssl.vault.pki.ttl =
# 5) Настроить хранилище сертификатов (локальный кэш)
# Пути до хранилищ сертификатов, сгенерированных vault
config.providers.vault.param.ssl.keystore.location = producer-vault-keystore.jks
config.providers.vault.param.ssl.truststore.location = producer-vault-truststore.jks
# alias клиентского сертификата в keystore
# config.providers.vault.param.ssl.vault.alias.key = key
# alias ca сертификата в truststore
# config.providers.vault.param.ssl.vault.alias.ca = ca
# 6) Настроить получение паролей для хранилища сертификатов из vault
# Путь до хранилища секретов в vault
# config.providers.vault.param.ssl.vault.secret.path = kv1/interceptor
# Версия secret engine
# config.providers.vault.param.ssl.vault.engine.version = 1
# Имя секрета, содержащего пароль для private key
# config.providers.vault.param.ssl.vault.secret.key = key
# Имя секрета, содержащего пароль для keystore
# config.providers.vault.param.ssl.vault.secret.keystore = keystore
# Имя секрета, содержащего пароль для truststore
# config.providers.vault.param.ssl.vault.secret.truststore = truststore
# 7) Настроить получение параметров ssl с помощью config provider
ssl.keystore.location=${vault:ssl.keystore.location}
ssl.keystore.password=${vault:ssl.keystore.password}
ssl.key.password=${vault:ssl.key.password}
ssl.truststore.location=${vault:ssl.truststore.location}
ssl.truststore.password=${vault:ssl.truststore.password}
Пример конфигурации с загрузкой параметров провайдера из файла#
Любые настройки провайдера можно загрузить из файла (в данном примере config/vault.properties):
# 1) Подключить config provider
config.providers = vault
config.providers.vault.class = ru.sbt.ss.kafka.VaultConfigProvider
# Путь до файла с параметрами провайдера
config.providers.vault.param.properties.file = config/vault.properties
# 2) ОПЦИОНАЛЬНО Переопределить любые настройки провайдера, загруженные из файла конфигурации
# Common name сертификата (CN)
config.providers.vault.param.ssl.vault.pki.common.name = OVERRIDE-TEST
# Пути до хранилищ сертификатов, сгенерированных vault
config.providers.vault.param.ssl.keystore.location = override-vault-keystore.jks
config.providers.vault.param.ssl.truststore.location = override-vault-truststore.jks
# 3) Настроить получение параметров ssl с помощью config provider
ssl.keystore.location=${vault:ssl.keystore.location}
ssl.keystore.password=${vault:ssl.keystore.password}
ssl.key.password=${vault:ssl.key.password}
ssl.truststore.location=${vault:ssl.truststore.location}
ssl.truststore.password=${vault:ssl.truststore.password}
Пример файла config/vault.properties (настройки указываются без префикса config.providers.*.param.):
# 1) ОПЦИОНАЛЬНО Настроить энкодер для дешифрации секретов
# Класс энкодера, реализующий интерфейс ru.sbt.ss.Encryptor, по умолчанию ru.sbt.ss.password.BaseEncryptor
# security.encoding.class = ru.sbt.ss.password.BaseEncryptor
# Ключ для дешифрации секретов (строка или путь до файла)
# security.encoding.key = secret/secret.pass
# 2) Настроить подключение к vault
# Адрес vault
ssl.vault.address = https://host:port
# ОПЦИОНАЛЬНО Namespace vault
# ssl.vault.namespace = namespace
# ОПЦИОНАЛЬНО Настройки повторной отправки запросов к vault
# Кол-во попыток переотправки запроса
# ssl.vault.retries = 5
# Тайм-аут отправки запроса, с
# ssl.vault.timeout = 3
# Интервал между повторными попытками переотправки запроса, мс
# ssl.vault.retry.interval = 500
# Настройки ssl для подключения к vault
ssl.vault.tls.enable = true
ssl.vault.tls.keystore.location = vault-keystore.jks
ssl.vault.tls.keystore.password = encrypted_password
ssl.vault.tls.key.password = password
ssl.vault.tls.truststore.location = vault-keystore.jks
ssl.vault.tls.truststore.password = encrypted_password
ssl.endpoint.identification.algorithm =
# Настройки авторизации vault
# Пример авторизации с помощью логина и пароля
# Тип авторизации (approle, certificate, password или token)
ssl.vault.auth.type = password
ssl.vault.auth.username = test
ssl.vault.auth.password = encrypted_password
# Пример авторизации в помощью approle
# ssl.vault.auth.type = approle
# ssl.vault.auth.role.id = role
# ssl.vault.auth.secret.id = encrypted_secret
# 3) Настроить генерацию сертификата с помощью vault
# ОПЦИОНАЛЬНО Путь до pki engine
# ssl.vault.pki.mount = pki
# Имя роли для выпуска сертификата
ssl.vault.pki.role.name = role
# Common name сертификата (CN)
ssl.vault.pki.common.name = TEST
# ОПЦИОНАЛЬНО Alternative names сертификата
# ssl.vault.pki.alt.names = alt-name
# ОПЦИОНАЛЬНО Alternative ip сертификата
# ssl.vault.pki.alt.ip = 127.0.0.1
# ОПЦИОНАЛЬНО TTL (time-to-live) сертификата
# ssl.vault.pki.ttl =
# 4) Настроить хранилище сертификатов (локальный кэш)
# Пути до хранилищ сертификатов, сгенерированных vault
ssl.keystore.location = vault-keystore.jks
ssl.truststore.location = vault-truststore.jks
# alias клиентского сертификата в keystore
# ssl.vault.alias.key = key
# alias ca сертификата в truststore
# ssl.vault.alias.ca = ca
# 5) Настроить получение паролей для хранилища сертификатов из vault
# Путь до хранилища секретов в vault
# ssl.vault.secret.path = kv1/interceptor
# Версия secret engine
# ssl.vault.engine.version = 1
Результат#
Выполнено поключение плагина Vault config provider.