Добавление секретов во внешнее хранилище HashiCorp Vault#

Для разворачивания и эксплуатации программного компонента необходимо создать секреты во внешнем хранилище HashiCorp Vault

Порядок действий:

  1. Получить доступ к внешнему хранилищу HashiCorp Vault (далее - хранилище)

  2. Получить/создать engine в хранилище

  3. Зайти в хранилище через UI, выбрать заказанный engine

  4. Создать следующие секреты (описание состава записей см. ниже)

  • crypt-key-secret

  • mailbox-secret

  • secret-mail

  • mail-secret-egress-gateway-certs

  • mail-secret-ingress-gateway-certs

  • mail-secret-kafka-gateway

Секрет crypt-key-secret#

Назначение: Секрет предназначен для хранения внешней части ключа шифрования, а также приватного ключа для дешифрования вложений

В секрет должны быть добавлены записи с ключами:

  • SECOND_PART_OF_ENCRYPT_KEY

  • mailbridge

Описание параметров:

Параметр

Описание

SECOND_PART_OF_ENCRYPT_KEY

Для хранения внешней части ключа шифрования паролей, хранимых в БД и хранилище секретов. Значение ключа произвольное. Создается один раз и не изменяется

mailbridge

JKS в base 64. Приватный ключ для дешифрования вложений конфиденциальной категории информации.

Процесс создания JKS с ключом дешифрования вложений описан в пп. Создание хранилища JKS с приватным ключом для дешифрования вложений

Секрет mailbox-secret#

Назначение: Секрет предназначен для хранения адресов почтовых ящиков и их паролей в процессе эксплуатации программного компонента, где ключ = адрес_почтового_ящика и значение = пароль_почтового_ящика.

Все записи в этом секрете создаются автоматически при добавлении почтовых ящиков через UI программного компонента. Вручную здесь ничего создавать не нужно.

Секрет secret-mail#

Назначение: Секрет предназначен для хранения логинов и паролей для подключения компонента к внешним системам (СУБД, CEPH и пр.).

В нем должны быть размещены следующие записи:

# CEPH
CEPH_ACCESS_KEY_ID=login
CEPH_SECRET_ACCESS_KEY=password
 
# LDAP, формат CN=ТУЗ логин,CN=Users,DC=example,DC=sbrf,DC=ru
LDAP_USERNAME=CN=TUZ_login,CN=Users,DC=example,DC=sbrf,DC=ru
LDAP_PASSWORD=password
 
# PostgreSQL
POSTGRESQL_PGBOUNCER_USERNAME=login
POSTGRESQL_PGBOUNCER_PASSWORD=password
POSTGRESQL_LIQUIBASE_USERNAME=login
POSTGRESQL_LIQUIBASE_PASSWORD=password
 
# Пароль для хранилиз JKS с сертификатами
JKS_ACCESS_PASSWORD=password
# Пароль для JKS где хранится ключ для дешифрования вложения для передачи вложений категории К2
JKS_PRIVATE_KEYSTORE_PASSWORD=password
# Пароль для приватного ключа
JKS_PRIVATE_KEY_PASSWORD=password
 
# Security manager
SECMAN_PROPS_APPROLE_ROLE_ID=role_id
SECMAN_PROPS_APPROLE_SECRET_ID=secret_id

# Генерация JWT
JWT_SIGN_SECRET=secret-string

Описание параметров:

Параметр

Описание

CEPH_ACCESS_KEY_ID, CEPH_SECRET_ACCESS_KEY

Логин и пароль для подключения к CEPH

LDAP_USERNAME, LDAP_PASSWORD

Логин и пароль для подключения к Active Directory

POSTGRESQL_PGBOUNCER_USERNAME, POSTGRESQL_PGBOUNCER_PASSWORD

Логин и пароль для подключения к PostgreSQL SE под ролью as_TUZ

POSTGRESQL_LIQUIBASE_USERNAME, POSTGRESQL_LIQUIBASE_PASSWORD

Логин и пароль для подключения к PostgreSQL SE под ролью as_admin

JKS_ACCESS_PASSWORD

Пароль для чтения/редактирования хранилищ сертификатов JKS keystore.ingress.jks, keystore.egress.jks, truststore.rootCa.jks

SECMAN_PROPS_APPROLE_ROLE_ID, SECMAN_PROPS_APPROLE_SECRET_ID

Логин и пароль для подключения к HashiCorp Vault

JKS_PRIVATE_KEYSTORE_PASSWORD

Пароль для хранилища с приватным ключом программного компонента keystore.private.jks

JKS_PRIVATE_KEY_PASSWORD

Пароль для приватного ключа в хранилище keystore.private.jks

JWT_SIGN_SECRET

Секретная строка для генерации JWT токена

Секрет mail-secret-egress-gateway-certs#

Назначение: Секрет предназначен для хранения сертификатов и приватных ключей для подключения к внешним системам.

В секрет размещаются следующие файлы. В качестве ключа используются имена файлов:

  • as_admin.pem

  • as_admin.pk8

  • as_tuz.pem

  • as_tuz.pk8

  • ca-bundle.pem

  • ceph.key

  • ceph.pem

  • exchange-imap-dev.key

  • exchange-imap-dev.pem

  • ldap.key

  • ldap.pem

  • secman-adapter.key

  • secman-adapter.pem

Описание параметров:

Параметр

Описание

as_admin.pem

Клиентский сертификат для подключения к PostgtreSQL от роли as_admin

as_admin.pk8

Сертификат + приватный ключ в формате PK8 для подключения к PostgreSQL от роли as_admin

as_tuz.pem

Клиентский сертификат для подключения к PostgtreSQL от роли as_TUZ

as_tuz.pk8

Сертификат + приватный ключ в формате PK8 для подключения к PostgreSQL от роли as_TUZ

ca-bundle.pem

Bundle всех промежуточных и корневых сертификатов УЦ (см. п. Создание bundle файла c сертификатами УЦ)

ceph.key

Приватный ключ для подключения к S3 CEPH

ceph.pem

Клиентский сертификат для подключения к S3 CEPH

exchange-imap-dev.key

Приватный ключ для подключения к Exchange по протоколу IMAP

exchange-imap-dev.pem

Клиентский сертификат для подключения к Exchange по протоколу IMAP

ldap.key

Приватный ключ для подключения к Active Directory

ldap.pem

Клиентский сертификат для подключения к Active Directory

secman-adapter.key

Приватный ключ для подключения к HashiCorp Vault

secman-adapter.pem

Клиентский сертификат для подключения к HashiCorp Vault

Секрет mail-secret-ingress-gateway-certs#

Назначение: Секрет предназначен для хранения серверного сертификата и приватного ключа. Этот сертификат возвращается клиенту при подключении к программному компоненту.

В секрет размещаются следующие файлы. В качестве ключа используются имена файлов:

  • ca-bundle.pem

  • tls.key

  • tls.pem

Описание параметров:

Параметр

Описание

ca-bundle.pem

Bundle всех промежуточных и корневых сертификатов УЦ (см. п. Создание bundle файла c сертификатами УЦ)

tls.key

Серверный приватных ключ для программного компонента

tls.pem

Серверный сертификат для программного компонента

Секрет mail-secret-kafka-gateway#

Секрет предназначен для хранения JKS хранилищ с сертификатами для подключения к серверам KAFKA. Количество записей в секрете должно быть соответствовать количеству групп адаптеров KAFKA. Группы адаптеров кафка задаются параметром config.mail.ose.mail_kafka_gateway.kafka.bootstrapServers в репозитории common_{стенд}. Формат ключа записи: {название_группы}-keystore.jks

Создание bundle файла c сертификатами УЦ#

Для подключения к внешним системам необходимы промежуточные и корневые сертификаты УЦ. Все промежуточные и корневые сертификаты должны быть объединены в единый файл (ca-bundle.pem), в котором сначала должен идти промежуточный сертификат, а потом корневой (сверху-вниз). Разные УЦ следуют друг за другом.

Пример:

-----BEGIN CERTIFICATE-----
промежуточный сертификат УЦ 1
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
корневой сертификат УЦ 1
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
промежуточный сертификат УЦ 2
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
корневой сертификат УЦ 2
-----END CERTIFICATE-----

Создание хранилища JKS с приватным ключом для дешифрования вложений#

Назначение: хранение приватного ключа для дешифрования вложений, переданных через S3 CEPH (для обработки конфиденциальной информации)

  1. Генерируем пару публичный-приватный ключ. Публичный ключ используется внешними системами-отправителями для шифрования вложений.

  2. Создаем JKS файл с приватным ключом key под выбранным alias и паролем. Название alias должно соответствовать параметру config.mail.vault.secret.crypt.item.jks в файла ssl.conf. Установленный на JKS пароль {PASSWORD} должен соответствовать размещенному в секрете secret-mail

  3. Выбранные выше значения должны соответствовать заданному в файле ssl.conf

mail.ose.secret.ssl.jks.private.alias={ALIAS}
mail.ose.secret.ssl.jks.private.keystore.passwordVariable={PASSWORD}
  1. Выбранные выше значения должны соответствовать заданному в файле openShift.conf

config.mail.vault.secret.crypt.item.jks=mailbridge

Сгенерированный JKS размещается в секрете crypt-key-secret.

Заполнение файла openShift.conf#

Для взаимодействия с хранилищем необходимо настроить следующие параметры в файле openShift.conf в репозитории ci02606786_mailbridge_common_{стенд}

# Vault

config.mail.ose.mail_secman_adapter.secman.url=https://domain.com/v1
config.mail.ose.mail_secman_adapter.secman.props.namespace=DEV_STAND
config.mail.ose.mail_secman_adapter.secman.props.engine-name=A/DEV/MAIL/AE/KV
config.mail.ose.mail_secman_adapter.secman.props.secret-name=mailbox-secret

config.mail.vault.namespace=имя_пространства
config.mail.vault.role.name=role-ga-secman-mail
config.mail.vault.secret.crypt.item.jks=mailbridge
config.mail.vault.secret.path.passwords=имя_пространства/A/DEV/MAIL/AE/KV/OS/secret-mail
config.mail.vault.secret.path.crypt=имя_пространства/A/DEV/MAIL/AE/KV/OS/crypt-key-secret
config.mail.vault.secret.path.egress=имя_пространства/A/DEV/MAIL/AE/KV/OS/mail-secret-egress-gateway-certs
config.mail.vault.secret.path.ingress=имя_пространства/A/DEV/MAIL/AE/KV/OS/mail-secret-ingress-gateway-certs
config.mail.vault.secret.path.kafkagw=имя_пространства/A/DEV/MAIL/AE/KV/OS/mail-secret-kafka-gateway
config.mail.vault.timeout=60

Описание параметров:

Параметр

Описание

config.mail.ose.mail_secman_adapter.secman.url

Url для подключения к HashiCorp Vault, протокол должен быть https

config.mail.ose.mail_secman_adapter.secman.props.namespace

Пространство имен, в котором размещается engine HashiCorp Vault

config.mail.ose.mail_secman_adapter.secman.props.engine-name

Имя engine для хранения секретов компонента

config.mail.ose.mail_secman_adapter.secman.props.secret-name

Имя секрета для хранения паролей и идентификаторов почтовых ящиков

config.mail.vault.namespace

Пространство имен, в котором размещается engine HashiCorp Vault

config.mail.vault.role.name

Название группы в LDAP, добавление в которую предоставляет права к хранилищу

config.mail.vault.secret.crypt.item.jks

Alias в jks хранилище, по которому будет производиться поиск ключа для дешифрования файла

config.mail.vault.secret.path.passwords

Путь к секрету в HashiCorp Vault для хранения логинов и паролей для подключения к внешним системам

config.mail.vault.secret.path.crypt

Путь к секрету в HashiCorp Vault для хранения внешней части ключа шифрования

config.mail.vault.secret.path.egress

Путь к секрету в HashiCorp Vault для хранения сертификатов Service Mesh egress для подключения к внешним системам

config.mail.vault.secret.path.ingress

Путь к секрету в HashiCorp Vault для хранения серверных сертификатов Service Mesh ingress

config.mail.vault.secret.path.kafkagw

Путь к секрету в HashiCorp Vault для хранения сертификатов для подключения к внешним серверам Kafka

config.mail.vault.timeout

Таймаут ожидания секретов из Security Management для запуска подов среды оркестрации

Заполнение файла ssl.conf#

В репозитории ci02606786_mailbridge_common_{стенд} добавить в файл installer/system/efs/config/parameters/ssl.conf следующие строки (значения параметров из этого файла применяются для работы с JKS хранилищами). Описание параметров представлено ниже.

# Список алиасов через ';' всех корневых и промежуточных сертификатов. Важно! сначала алиас промежуточного, а за ним корневого (для одного УЦ должны идти друг за другом)
mail.ose.secret.ssl.jks.ca.trustStore.aliases=*-dev-root;*-ldap-root;*-ceph-root;sber-prom-ca2;sber-prom-root;sber-test-ca2;sber-test-root;sberca-test-ca2;sberca-test-root;sberca-prom-ca2;sberca-prom-root
# Путь к хранилищу сертификатов УЦ в common репозитории
mail.ose.secret.ssl.jks.ca.trustStore.path=ansible/files/ssl/truststore.rootCa.jks
# Ключ пароля к хранилищу сертификатов в _passwords.conf
mail.ose.secret.ssl.jks.passwordVariable=JKS_ACCESS_PASSWORD

# Пусть к хранилищу сертификатов в common репозитории для egress
mail.ose.secret.ssl.jks.egress.keyStore.path=ansible/files/ssl/keystore.egress.jks
# Алиасы клиентских сертификатов (через ';') в хранилище для egress
mail.ose.secret.ssl.jks.egress.keyStore.aliases.mutual=ldap;ceph;secman-adapter;mqgw;exchange-imap-dev
# Алиас клиентского сертификата в хранилище для postgresql liquibase
mail.ose.secret.ssl.jks.egress.keyStore.postgresql.liquibase.alias=postgresql-as-admin
# Алиас клиентского сертификата в хранилище для postgresql pgbouncer
mail.ose.secret.ssl.jks.egress.keyStore.postgresql.pgbouncer.alias=postgresql-as-tuz

# Пусть к хранилищу сертификатов в common репозитории для ingress
mail.ose.secret.ssl.jks.ingress.keyStore.path=ansible/files/ssl/keystore.ingress.jks
# Префикс алиаса в хринилище серверного сертификата ingress (в шаблоне добавляется openshiftProjectName -> ingress-openshiftProjectName)
mail.ose.secret.ssl.jks.ingress.keyStore.alias=ingress

# Названия групп кафка для погруппового разворачивания
# Формат: groupName1;groupName2;...
mail.ose.secret.ssl.jks.kafka.groups=group1
# Префикс сертификата в mail.ose.secret.ssl.jks.egress.keyStore.path для подключения к Kafka, итоговое имя: prefix-groupName1, например: kafkagw-group1
mail.ose.secret.ssl.jks.kafka.cert.alias.prefix=kafkagw


# Блок настроек для дешифрования вложений
mail.ose.secret.ssl.jks.private.alias=mailbridge
mail.ose.secret.ssl.jks.private.keystore.passwordVariable=JKS_PRIVATE_KEYSTORE_PASSWORD
mail.ose.secret.ssl.jks.private.keystore.path=ansible/files/ssl/keystore.private.jks