Vault config provider#

Данный плагин позволяет добавлять любые настройки в конфигурационные файлы.

Реализует интерфейс org.apache.kafka.common.config.provider.ConfigProvider и позволяет получать параметры SSL из vault на этапе обработки конфигурации kafka-клиента/брокера/Worker kafka-connect.

Провайдер работает только с использованием локального кеша сертификатов в виде JKS-хранилищ.

Поддерживает шифрование секретов для подключения к vault:

  • ssl.vault.tls.keystore.password;

  • ssl.vault.tls.truststore.password;

  • ssl.vault.auth.password;

  • ssl.vault.auth.secret.id;

  • ssl.vault.auth.token.

Пример конфигурации#

Конфигурация vault config provider представлена в примере.

Пример конфигурации с загрузкой параметров провайдера из файла#

Любые настройки провайдера можно загрузить из файла (в данном примере config/vault.properties):

# Подключить config provider
config.providers = vault
config.providers.vault.class = ru.sbt.ss.kafka.VaultConfigProvider

# Путь до файла с параметрами провайдера
config.providers.vault.param.properties.file = config/vault.properties

# ОПЦИОНАЛЬНО Переопределить любые настройки провайдера, загруженные из файла конфигурации
# 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

# Настроить получение параметров 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.) прописан в примере.

Использование дополнительного хранилища сертификатов в формате pem#

При указании следующих настроек вместе с основными jks-хранилищами будут сгенерированы дополнительные хранилища в формате pem:

# Путь до файла с приватным ключом и сертификатом в формате pem
# config.providers.vault.param.ssl.keystore.pem.location = path/to/keystore.pem
# Права доступа к файлу сертификата в POSIX формате, "644" или "w-r--r--"
# config.providers.vault.param.ssl.keystore.certificate.chain.mode = 644

# Путь до файла с цепочкой доверенных сертификатов в формате pem
# config.providers.vault.param.ssl.truststore.pem.location = path/to/truststore.pem
# Права доступа к файлу с доверенными сертификатами в POSIX формате, "644" или "w-r--r--"
# config.providers.vault.param.ssl.truststore.certificates.mode = 644
  • дополнительные pem-хранилища генерируются и обновляются одновременно с основными jks-хранилищами;

  • в хранилище сертификатов сохраняются и приватный ключ, и сертификат;

  • в хранилище доверенных сертификатов сохраняются все доверенные сертификаты из основного jks-хранилища;

  • если доверенные сертификаты в основном jks-хранилище не найдены — в дополнительное pem-хранилище попадает цепочка сертификатов, которое было подписано основнымй сертификатам (если существует, только при выпуске сертификата через pki-engine).