Добавление секретов во внешнее хранилище HashiCorp Vault#
Для разворачивания и эксплуатации программного компонента необходимо создать секреты во внешнем хранилище HashiCorp Vault
Порядок действий:
Получить доступ к внешнему хранилищу HashiCorp Vault (далее - хранилище)
Получить/создать engine в хранилище
Зайти в хранилище через UI, выбрать заказанный engine
Создать следующие секреты (описание состава записей см. ниже)
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-ews-dev.key
exchange-ews-dev.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-ews-dev.key |
Приватный ключ для подключения к Exchange по протоколу EWS |
exchange-ews-dev.pem |
Клиентский сертификат для подключения к Exchange по протоколу EWS |
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 (для обработки конфиденциальной информации)
Генерируем пару публичный-приватный ключ. Публичный ключ используется внешними системами-отправителями для шифрования вложений.
Создаем JKS файл с приватным ключом key под выбранным alias и паролем. Название alias должно соответствовать параметру config.mail.vault.secret.crypt.item.jks в файла ssl.conf. Установленный на JKS пароль {PASSWORD} должен соответствовать размещенному в секрете secret-mail
Выбранные выше значения должны соответствовать заданному в файле ssl.conf
mail.ose.secret.ssl.jks.private.alias={ALIAS}
mail.ose.secret.ssl.jks.private.keystore.passwordVariable={PASSWORD}
Выбранные выше значения должны соответствовать заданному в файле 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;*-ews-ca2;*-ews-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;exchange-ews-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