Использование Vault на виртуальной машине#
Назначение#
Vault - это инструмент, который обеспечивает безопасный и надежный способ хранения, распространения и управления секретами. IAM Proxy может использовать Vault на этапе развертывания для получения паролей от учетных записей, сертификатов, закрытых ключей.
Настройка использования Vault на виртуальной машине#
Создание секретов в Vault#
Для использования Vault с IAM Proxy, необходимо предварительно разместить секреты на сервере Vault, для этого выполните следующие действия:
В UI Vault создайте хранилище с типом
KVдля размещения паролей и т.п., где в ключе задается имя переменной, а в значении пароль. Имена ключей(переменных) должны соответствовать именам приведенных в Таблице 1 (эти имена используются в ansible при установке, вmain_vault.yml, а путь до хранилища задается в переменной ansible-inventoryvault_secret).

При использовании Vault Agent на VM, в UI Vault создайте хранилище с типом
KVдля размещения паролей и т.п. используемых на Vault Agent. В хранилище как ключ задается имя переменной, а в значении пароль. Имена ключей( переменных) должны соответствовать именам приведенных в Таблице 2 (эти имена используются в шаблонах на Vault Agent, а путь до хранилища задается в переменной ansible-inventoryvault_agent_secret).В UI Vault создайте хранилище с типом
KVдля размещения сертификатов и баз ключей/сертификатов. В хранилище как ключ задается имя файла, а в значении содержимое файла. В случае с базами ключей не текстового формата, файл базы должен быть закодирован по стандартуbase64и задан в значении секрета текстом(допускаются переводы строк), при этом в имя ключа(файла) добавляется окончание.base64(напримерkeycloak-keystore.p12.base64). Имена ключей(файлов) должны соответствовать Таблице 3.
Таблица 1
Имя ключа/переменной |
Описание |
|---|---|
deployer_pass |
Пароль пользователя deployer |
keycloak_admin_password |
Пароль администратора realm master компонента KeyCloak.SE |
keycloak_db_password |
Пароль пользователя БД Postgres компонента KeyCloak.SE |
keycloak_funcadmin_password |
Пароль функционального администратора realm PlatformAuth компонента KeyCloak.SE |
keycloak_keystore_password |
Пароль от хранилища ключей для компонента KeyCloak.SE |
nexus_url_password |
Пароль пользователя nexus для скачивания дистрибутива IAM Proxy |
proxy_session_secret |
Секрет используемый для шифрования сессии IAM Proxy (длинна д.б. > 100 символом, и НЕ должно содержать символов |
rds_client_keyStorePassword |
Пароль хранилища ключей приложения rds-client |
rds_client_trustStorePassword |
Пароль хранилища доверенных сертификатов ЦС приложения rds-client |
spas_wsSyncSpas_password |
Пароль пользователя для синхронизации со SPAS |
proxy_oidc_client_secret |
client_secret для подключения IAM Proxy к KeyCloak.SE по OIDC |
Таблица 2
Имя ключа/переменной |
Описание |
|---|---|
PROXY_SESSION_SECRET |
секрет для шифрования сессии, полное описание смотрите в Описание параметров компонента IAM Proxy |
PROXY_OIDC_CLIENT_ID |
client-id, полное описание смотрите в Описание параметров компонента IAM Proxy |
PROXY_OIDC_CLIENT_SECRET |
secret для client-id , полное описание смотрите в Описание параметров компонента IAM Proxy |
OIDC_CLIENT_RSA_PRIVATE_KEY |
ключ для аутентификации на IDP методом private_key_jwt, полное описание смотрите в Описание параметров компонента IAM Proxy |
AUTHZ_BY_OAUTH_JWT_PUBLIC_KEY |
ключ для проверки JWT из запроса , полное описание смотрите в Описание параметров компонента IAM Proxy |
AUTHZ_SPAS_SECRET |
ключ при обращении к API SPAS, полное описание смотрите в Описание параметров компонента IAM Proxy |
ttl |
задается частота обновления с сервера секретов на Vault Agent (например 1h) |
Таблица 3
Имя ключа/файла |
Описание |
|---|---|
proxy-server.crt.pem |
Сертификат для организации https на прокси |
proxy-server.key.pem |
Закрытый ключ для организации https на прокси |
syslogng-server.crt.pem |
Сертификат для организации tls+syslog keycloak→syslog-ng |
syslogng-server.key.pem |
Закрытый ключ для организации tls+syslog keycloak→syslog-ng |
trusted_chain.crt.pem |
Сертификаты доверенных центров сертификации в формате PEM, которые выдали сертификаты нам и/или смежным серверам (это как минимум корневой и промежуточный ЦС) |
proxy-server.p12.base64 |
База сертификатов/ключей IAM Proxy в которой содержится сертификат для организации https на keycloak |
keycloak-server.p12.base64 |
База сертификатов/ключей keycloak в которой содержится сертификат для организации https на keycloak |
rds-server-keystore.p12.base64 |
База сертификатов/ключей keycloak в которой содержится сертификат для организации https на rds-server |
ttl |
задается частота обновления с сервера секретов на Vault Agent (например 1h) |
Настройка профиля установки (ansible inventory)#
Из дистрибутива взять демо-профиль установки
DemoProfile-with-VaultилиDemoProfile-OnlyProxy-with-Vault(<дистрибутив>/deploy/ansible/inventories/DemoProfile-*), и на основе него создать профиль под свой стенд.В
main_vault.ymlуказать пути к хранилищам секретов (созданных выше) используемых в ansible. В переменнойvault_secretуказать путь до хранилища с паролями и т.п., а вvault_filesуказать путь до хранилища содержащего файлы (сертификаты, ключи, keystore).Если используется Vault Agent на VM, то в
vault_agent.ymlуказать пути к хранилищам секретов используемых на Vault Agent, в переменнойvault_agent_secretуказать путь до хранилища с паролями и т.п., а вvault_agent_filesуказать путь до хранилища содержащего файлы (сертификаты, ключи, keystore).
Пример:

Настройка Jenkins#
Перейти в Jenkins и создать учетные данные (credential) с параметрами подключения к Vault типа
App Role( рекомендуется создать с IDvault_approle).

Если используется Vault Agent на VM, то создать в Jenkins учетные данные (credential) с ID
vault_approle_creds, c параметрами подключения к Vault типаUsername Password, указав как имя пользователяrole-id, а как парольsecret-id(как альтернатива этому credential, можно задать вvault_agent.ymlв переменнойvault_approle_idзначениеrole-idтекстом, аsecret-idдоставлять на целевые сервера вручную или отдельным процессом в файл/opt/vault/secrets/secretid).В файле pipeline Jenkins Job (
<дистрибутив>/deploy/jenkins/PlatformAuth_CDL.jenkinsfile) необходимо указать ID созданных учетных данных (credential), если они отличаются от рекомендованных.

При запуске Jenkins Job развертывания поставить чекбокс
USE_SECMANв параметрах запуска, а в параметреvaultAddrуказать адрес сервера Vault.

Настройка использования Vault Agent на виртуальной машине#
Предварительно выполняется установка пакета vault-agent на VM.
Установка пакета vault-agent выполняется отдельно на VM, и должна быть выполнена до запуска скриптов подготовки, и его установка не предусмотрена средствами автоматизированной установки IAM Proxy.
Для включения использования Vault Agent при установке, в профиле установки необходимо задать переменные:
vault_agent_use: True- включение функциональности Vault Agent;vault_validate_certs: False- включение проверки SSL и т.п. при подключении по SSL (если задается в True, то необходимо указать доверенные ЦС в файлеfiles/trusted_ca_vault.crt.pem);vault_agent_secret- путь до хранилища секретов с паролями и секретными значениями (например secret для подключения IAM Proxy к IDP);vault_agent_files- путь до хранилища секретов, содержащего в себе содержимое файлов, например ssl сертификаты;vault_approle_id- role-id от approle Vault, который нужно доставить до VA;vault_approle_secret_id- secret-id от approle Vault, который нужно доставить до VA;vault_approle_mount_path- путь в API, по которому доступна approle;vault_secret_id_wrap_ttl_minutes- время жизни wrapped-токена для secret-id в минутах (влияет на частоту обновления wrapped-токена).
Примечание
Значения для
vault_approle_idиvault_approle_secret_id(role_idиsecret_id) рекомендуется задавать, как параметры при запуске ansible-playbook (в job pipeline из дистрибутива используется jenkins-cred-id="vault_approle_creds" с типом usernamePassword, для заданияrole_idиsecret_id). Или до запуска установки доставлятьrole_idиsecret_idна сервера в файлы /opt/vault/tokens/roleid и /opt/vault/secrets/secretid (в последнем случае vault_approle_id и vault_approle_secret_id не нужно задавать в профиле установки, и нужно убрать их из профиля).