HashiCorp Vault и KMS-заменитель
Для реализации механизма защиты данных требуется наличие установленного и интегрированного решения Key/Secret Management System. В СУБД Pangolin реализована интеграция с KMS HashiCorp Vault, который используется в качестве защищенного хранилища ключей засекречивания и настроек, а также, как система управления ключами.
HashiCorp Vault — это инструмент с открытым исходным кодом, который обеспечивает безопасный и надежный способ хранения и распространения секретов, таких как ключи API, токены доступа и пароли.
Также был разработан плагин-заменитель KMS, реализованный в виде библиотеки libkms_substitute_plugin.so.
Ключи засекречивания и мастер-ключ
Ключи засекречивания организованы в двухуровневую иерархию:
- мастер-ключ регулярно изменяется и используется для засекречивания ключей второго уровня;
- ключи второго уровня засекречивают объекты базы данных и не подлежат ротации, что позволяет избежать перекодирования данных при обновлении мастер-ключа.
Мастер-ключ
Мастер-ключ устанавливается при первом запуске базы данных (БД), а также может быть изменен сотрудником службы безопасности вручную. Если новый мастер-ключ не задан, он генерируется автоматически.
Мастер-ключ хранится в Hashicorp Vault по пути postgresql/<ID кластера>/keys. ID кластера можно уточнить на сервере:
postgres=# SHOW cluster_name;
cluster_name
--------------
temp_install
(1 row)
Пример структуры хранения ключей в Hashicorp Vault:

actual_master_key— параметр, содержащий имя параметра с актуальным мастер-ключом;master_key_value_<timestamp>— значение мастер-ключа, где<timestamp>— дата и время в форматеГГГГММДД_ЧЧммСС;wal_key— параметр, содержащий ключ засекречивания WAL, общий для серверов БД, между которыми выполняется репликация.
Функции для поддержки ротации и изменения мастер-ключей на стороне БД:
block_rotate_master_key()— захватывает блокировку изменения мастер-ключа, служит для исключения ротации мастер-ключа TDE на кластере при работе таких утилит, какpg_rewind;unblock_rotate_master_key()— снимает блокировку изменения мастер-ключа на кластере;set_master_key(new_master_key TEXT)— устанавливает новое значение мастер-ключа;rotate_master_key()— генерирует и устанавливает новое значение мастер-ключа;reencrypt_keys()— переперекодирует хранилище ключей актуальным мастер-ключом, опираясь на информацию о предыдущем использованном мастер-ключе;restore_keys()— перекодирует хранилище ключей актуальным мастер-ключом, в том числе поддерживает нахождение мастер-ключа из истории в хранилище секретов, которым был засекречен конкретный ключ объекта. Также используется в восстановлении резервных копий, снятых во время действия предыдущих мастер-ключей.
Ключи второго уровня
Ключи второго уровня засекречивают объекты базы данных и не подлежат ротации, что позволяет избежать перекодирования данных при обновлении мастер-ключа.
Ключи второго уровня хранятся на сервере БД в виде файлов:
-
enc_conn_settings.cfg(засекреченный):- не входит в резервные копии БД;
- находится в директории
/etc/postgres, владельцем являетсяkmadmin_pg; - создается при настройке соединения с KMS через утилиту
setup_kms_credentialsадминистратором безопасности; - содержит параметры соединения с KMS и засекреченные учетные данные для этого соединения.
-
enc_settings.cfg:- входит в резервные копии БД;
- хранится в директории
PGDATA/global, владельцем является пользовательpostgres; - создан при первом запуске БД;
- указаны метка текущего и предыдущего мастер-ключей засекречивания, а также флаг включения засекречивания WAL (по умолчанию включен).
Пример файла
enc_settings.cfg:$PGDATA/global/
-rw------- 1 postgres postgres 84 Sep 28 10:59 enc_settings.cfg
$ cat $PGDATA/global/enc_settings.cfg
active_master_key_id = master_key_value_20220412_131233_249
kms_domain = postgresql -
enc_keys.json:- входит в резервную копию БД;
- также находится в директории
PGDATA/global, владельцем является пользователь postgres; - содержит ключи засекречивания для табличных пространств, отношений и журналов WAL;
Пример файла
enc_keys.json:$PGDATA/global/
-rw------- 1 postgres postgres 108916 Sep 28 10:59 enc_keys.json
$ cat $PGDATA/global/enc_keys.json
…
{
"controlBlock" : "{хеш}",
"dataBaseId" : 16403,
"encryptionKey" : "{encryptionKey}",
"objectId" : 16774,
"pgObjectType" : "R"
},
{
"controlBlock" : "{хеш}",
"encryptionKey" : "{encryptionKey}",
"pgObjectType" : "W"
}Содержит следующие данные:
controlBlock— контрольный блок, состоящий из метки мастер-ключа,oidбазы данных объекта, типа объекта иoidсамого объекта, засекреченный ключом;dataBaseId—oidбазы данных объекта;encryptionKey— ключ кодирования объекта в засекреченном виде;objectId—oidобъекта, которому назначен соответствующий ключ засекречивания. Для WAL должен бытьnull;pgObjectType— тип объекта, которому назначен соответствующий ключ засекречивания.W— WAL,T— табличное пространство,R— отношение.
Установка и настройка HashiCorp Vault
-
Cкачайте и распакуйте дистрибутив Vault, перенесите распакованный дистрибутив в директорию /usr/local/bin/:
$ unzip vault_${VAULT_VERSION}_linux_amd64.zip
$ sudo mv ./vault /usr/local/bin/ -
Cоздайте пользователя Vault:
$ sudo useradd --system --home /etc/vault --shell /bin/false vault -
Cоздайте директории для хранения настроек и данных:
$ sudo mkdir /etc/vault
$ sudo mkdir -p /var/lib/vault/data -
Cоздайте службу Vault (скопируйте файл
vault.serviceна сервер в директорию/etc/systemd/system/):sudo cp ./vault.service /etc/systemd/system/ -
Cоздайте конфигурационный файл Vault (скопируйте файл
config.hclна сервер в директорию/etc/vault/):$ sudo cp ./config.hcl /etc/vault/ -
Создайте директории
/ca,ca/signedcerts,ca/private:$ cd ~/ && mkdir ca && mkdir -p ca/signedcerts && mkdir ca/private && cd ca -
Создайте индексные данные БД:
$ echo '01' > serial && touch index.txt && echo 'unique_subject = yes' > index.txt.attr -
Создайте корневой сертификат/ключ, изменив в файле
caconfig.cnfпуть на корректный к директорииca:- в параметре
dirв секцииlocal_ca; - в параметре
default_keyfileв секцииreq.
- в параметре
-
Скопируйте файл на сервер в директорию
~/ca:$ export OPENSSL_CONF=~/ca/caconfig.cnf
$ openssl req -x509 -newkey rsa:2048 -out cacert.pem -outform PEM -days 1825
Введите пароль "test" -
Сгенерируйте ключ и создайте запрос на серверный сертификат (предварительно добавьте в конец файла
localhost.cnfстроку:IP.2 = HOST, гдеHOST- IP-адрес сервера, на котором разворачиваете Vault. Скопируйте файлlocalhost.cnfв директорию~/ca):$ export OPENSSL_CONF=~/ca/localhost.cnf
$ openssl req -newkey rsa:2048 -keyout key.pem -keyform PEM -out req.pem -outform PEM
Введите пароль "test" -
Декодируйте ключ:
$ openssl rsa < key.pem > server_key.pem -
Сгенерируйте и подпишите серверный сертификат:
$ export OPENSSL_CONF=~/ca/caconfig.cnf
$ openssl ca -in req.pem -out server_crt.pem
Введите пароль "test" -
Скопируйте ключ, серверный и корневой сертфиикаты в директорию
/etc/vault/:$ sudo cp server_key.pem server_crt.pem cacert.pem /etc/vault/ -
Назначьте владельцем пользователя Vault:
$ sudo chown -R vault:vault /etc/vault /var/lib/vault -
Настройте автодополнение команд Vault:
$ vault -autocomplete-install
$ complete -C /usr/local/bin/vault vault -
Включите запуск Vault при загрузке системы:
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now vault -
Запустите Vault:
$ sudo systemctl start vault -
Проинициализируйте Vault:
$ sudo -u vault bash -c 'env VAULT_ADDR=https://127.0.0.1:8200 VAULT_CACERT=/etc/vault/cacert.pem /usr/local/bin/vault operator init > /etc/vault/init.file' -
Введите 3 ключа (по одному) в хранилище
Unseal, где {Токен} - используемый корневой токен (см.cat /etc/vault/init.file):$ sudo -u vault bash -c 'env VAULT_ADDR=https://{IP-адрес}:{Порт} VAULT_TOKEN={Токен} VAULT_CACERT=/etc/vault/cacert.pem /usr/local/bin/vault operator unseal {хеш}
$ sudo -u vault bash -c 'env VAULT_ADDR=https://{IP-адрес}:{Порт} VAULT_TOKEN={Токен} VAULT_CACERT=/etc/vault/cacert.pem /usr/local/bin/vault operator unseal ...'
$ sudo -u vault bash -c 'env VAULT_ADDR=https://{IP-адрес}:{Порт} VAULT_TOKEN={Токен} VAULT_CACERT=/etc/vault/cacert.pem /usr/local/bin/vault operator unseal ...' -
Разрешите аутентификацию по логину/паролю:
$ sudo -u vault bash -c 'env VAULT_ADDR=https://127.0.0.1:8200 VAULT_TOKEN={Токен} VAULT_CACERT=/etc/vault/cacert.pem /usr/local/bin/vault auth enable userpass'
Success! Enabled userpass auth method at: userpass/ -
Установите логин/пароль:
$ sudo -u vault bash -c 'env VAULT_ADDR=https://127.0.0.1:8200 VAULT_TOKEN={Токен} VAULT_CACERT=/etc/vault/cacert.pem /usr/local/bin/vault write auth/userpass/users/adminencryption password=test policies=admins'
Success! Data written to: auth/userpass/users/adminencryption -
Через Web UI выполните аутентификацию пользователя на сервере Vault https://{IP-адрес настройки Vault-сервера}:{Порт}. Для аутентификации используйте токен:

-
Создайте Key-Value-хранилище и разрешите с ним работу, выбрав
Secrets -> Enable new engine (1) -> KV (2) -> Next (3) -> Enable engine (4):



-
Добавьте разрешения для выполнения операций с Key-Value-хранилищем, выбрав:
Policies (1) -> default (2) -> Edit policy (3). Добавьте в конец (4) -> нажмите сохранитьSave(5):path "kv/*" {
capabilities = ["create", "update", "read", "delete", "list"]
}



-
Получите клиентский токен для последующих обращений к Vault:
$ curl --insecure --request POST --data '{"password": "test"}' https://127.0.0.1:8200/v1/auth/userpass/login/adminencryption
{"request_id":"{id}","lease_id":"","renewable":false,"lease_duration":0,"data":null,"wrap_info":null,"warnings":null,"auth":{"client_token":"{token}","policies":["admins","default"],"token_policies":["admins","default"],"metadata":{"username":"adminencryption"},"lease_duration":36000,"renewable":true,"entity_id":"{entity_id}":true}} -
В последующих запросах можно использовать
"client_token":"{Токен}". Например:$ curl --insecure --header "X-Vault-Token:{Токен} --request GET https://{IP-адрес}:{Порт}/v1/kv/data/
Добавление параметров в хранилище секретов
Перед первоначальной настройкой механизма защиты данных от привилегированных пользователей в Pangolin необходимо выполнить добавление параметров в Key/Secret Management System на сервере с установленным HashiCorp Vault.
-
Выполните аутентификацию пользователя на сервере Vault
{IP адрес сервера, на котором производится настройка Vault}:{}Порт}. Для аутентификации используйте клиентский токен:
-
Зайдите в Key-Value-хранилище и нажмите
Create secret(1):
-
В поле
Path for this secret(2) укажите путь к параметруpostgresql/CLUSTER_ID/postgresql/ИМЯ_ПАРАМЕТРА, где:CLUSTER_ID- имя кластера (должен быть уникальным для каждого кластера),ИМЯ_ПАРАМЕТРА = secure_config. -
В поле
Version data(3, 4) укажите:- имя параметра =
value; - значение =
off;
В случае отсутствии указанного значения параметра при старте БД в момент соединения с KMS и считывания параметров возникнет ошибка:
CheckSecureConfig: secure_config parameter does not exist on KMS or has wrong value. - имя параметра =
-
Сохраните, нажав кнопку
Save(5):
Менять значение параметра можно, нажав
Create new versionсправа:
Там же можно удалить параметр, нажав на кнопку
Delete secret:
-
Далее добавьте остальные параметры (в соответствии с заданными локальными параметрами в конфигурационном файле
/etc/pangolin-manager/postgres.yml). Минимальный набор параметров для успешного старта БД:secure_config = off
is_tde_on = on
ssl: on
ssl_cert_file: /pg_ssl/server.crt
ssl_key_file: /pg_ssl/server.key
ssl_ca_file: /pg_ssl/root.crt
pg_ident
password_policies_enable: on
psql_encrypt_password: on
password_encryption: scram-sha-256
enabled_sec_admin_extra_auth_methods: cert
enabled_extra_auth_methods: certНажмите
Create secret(1):
В поле
Version data(8, 9, 10) укажите:- имя параметра =
value; - соответствующее значение.
Нажмите кнопку
Save:
- имя параметра =
Защита параметров конфигурации
Функциональность доступна только для редакций Enterprise и Enterprise для ERP-систем.
В рамках функциональности защиты конфигурации реализовано разделение разрешений на некоторые настроечные параметры PostgreSQL.
Настроечные параметры PostgreSQL
Полный список настроечных параметров, управляемых администраторами безопасности через VAULT в режиме защищенного конфигурирования, находится в таблице «Конфигурационные параметры» документа «Справочная информация».
Инструкция по добавлению параметров в хранилище приведена в подразделе «Добавление параметров в хранилище секретов».
Ниже будут описаны внесенные изменения в рамках настройки некоторых из них в режиме защищенного конфигурирования.
Параметры, выведенные из хранения в защищенном хранилище/VAULT
Параметры, по умолчанию не хранящиеся в защищенном хранилище (могут при необходимости быть добавлены):
pg_hba.conf– методы аутентификации и подключения;shared_preload_libraries,jit_provider– подгружаемые PostgreSQL библиотеки;local_preload_libraries,session_preload_libraries– подгружаемые PostgreSQL библиотеки;dynamic_library_path– путь к динамически подгружаемым модулям;password_encryption– метод хеширования паролей пользователей.
Параметры, переданные на сторону защищенного хранилища/VAULT
Параметры, перемещенные в защищенное хранилище:
-
allowed_servers– список разрешенных к использованию LDAP и RADIUS серверов; -
ssl– режим работы с SSL; -
encrypt_new_tablespaces– засекречивание новых табличных пространств;noteПараметр действует только при запуске Pangolin и включенном TDE:
is_tde_on = on/true.В случае, если в качестве значения параметра выбрано значение по умолчанию
ddl, новые табличные пространства кодируются только при ручной установке опцииis_encrypted = on, по умолчанию засекречивание не применяется.При выборе значения параметра
always, опцияis_encryped, передаваемая в команде, игнорируется, так как в этом случае на все таблицы пространства будет применено засекречивание. -
enabled_sec_admin_extra_auth_methods– список дополнительно разрешенных к использованию методов аутентификации для ролей администраторов безопасности; -
enabled_extra_auth_methods– список дополнительно разрешенных к использованию методов аутентификации для всех ролей.noteПо умолчанию доступны только методы аутентификации
scram-sha-256,ldap,radius. Для применения изменений, достаточно выполнитьreload (SIGHUP)Pangolin.Значения параметров применяются при аутентификации, так как это единственный этап, когда можно фактически определить принадлежность аутентифицируемой роли к администраторам безопасности. При использовании не разрешенного для роли метода аутентификации она будет завершена с сообщением:
Authentication method "<метод аутентификации>" isn't allowed for non security admin role "<роль>". Соответствующая запись с аналогичным сообщением помещается в лог аудита как ошибка открытия соединения.
Параметры, внесенные под двойное управление
Параметр pg_ident_conf (карты сопоставления пользователей при авторизации) вносится под двойное управление – то есть прописывается одновременно и в VAULT, и в локальном файле. При этом совпадение порядка слов не требуется.
В случае, если в правилах pg_ident заданы регулярные значения, необходимо убедиться в их полном совпадении.
Обновление HashiCorp Vault
Для обновления HashiCorp Vault до версии 1.4.0 необходимо выполнить последовательно следующие действия:
-
Остановить работу vault:
$ sudo systemctl stop vault -
Скачать дистрибутив vault, распаковать и перенести в директорию
/usr/local/bin/:$ unzip vault_${VAULT_VERSION}_linux_amd64.zip
$ sudo mv vault /usr/local/bin/ -
Запустить vault:
$ sudo systemctl start vault
Возможные проблемы и их решение при работе HashiCorp Vault
В случае перезагрузки (рестарта) сервера с Vault, либо рестарта сервиса Vault, хранилище переходит в состояние SEALED:

Для восстановления:
-
Зайдите на сервер с установленным Vault и выполните команду
cat /etc/vault/init.file:$ cat /etc/vault/init.file
Unseal Key 1: {hash_unseal_key_1}
Unseal Key 2: {hash_unseal_key_2}
Unseal Key 3: {hash_unseal_key_3}
Unseal Key 4: {hash_unseal_key_4}
Unseal Key 5: {hash_unseal_key_5}
Initial Root Token: {id_root_token}
Vault initialized with 5 key shares and a key threshold of 3. Please securely distribute the key shares printed above. When the Vault is re-sealed, restarted, or stopped, you must supply at least 3 of these keys to unseal it before it can start servicing requests.
Vault does not store the generated master key. Without at least 3 key to reconstruct the master key, Vault will remain permanently sealed!
It is possible to generate new unseal keys, provided you have a quorum of existing unseal keys shares. See "vault operator rekey" for more information. -
Поочередно введите 3 ключа в
Unsealиз списка (Unseal Key 1,Unseal Key 2,Unseal Key 3):
KMS-заменитель
При использовании KMS-заменителя вместо хранилища секретов необходимо использовать локальные конфигурационные файлы.
Плагин-заменитель KMS считывает данные для пары ключ-значение из двух файлов. Первый файл /etc/postgres/kms_static_params.cfg содержит статические параметры, второй файл /etc/postgres/kms_dynamic_params.cfg – динамические. Файл со статическими параметрами засекречен ключом, генерируемым из параметров сервера. Файл с динамическими параметрами может меняться. При внесении изменений необходимо обеспечить идентичность файлов с динамическими параметрами в кластере.
Если файлы /etc/postgres/kms_static_params.cfg и /etc/postgres/kms_dynamic_params.cfg не обнаружены или имеют некорректный формат, система будет считать, что используется реальный KMS, но учетные данные для подключения к нему не найдены.
Ограничения:
- При использовании KMS-заменителя ротация мастер-ключа запрещена.
- Изменение параметров кластера, хранящихся в KMS, можно проводить только в выключенном режиме.
- Чтобы инициализация базы данных с подключенным заменителем KMS выполнилась, необходимо, чтобы файлы
/etc/postgres/enc_connection_settings.cfg,kms_static_params.cfgиkms_dynamic_params.cfgлибо все присутствовали, либо все отсутствовали. - Если в исходные файлы c настройками KMS вносятся правки, то измененные файлы должны быть скопированы на все узлы кластера и на каждом узле закодированы со статическими параметрами с помощью утилиты засекречивания
encrypt_params_file. - При включении в кластер нового узла актуальные файлы параметров KMS должны быть таким же образом скопированы на него и засекречены.
Подготовка файлов со статическими и динамическими параметрами
Статические параметры
Файл со статическими параметрами /etc/postgres/kms_static_params.cfg представляет собой простой текстовый документ, каждая строка которого содержит пару:
<имя ключа (параметра на KMS)> = <значение для данного ключа>
В файл со статическими параметрами должны быть помещены:
- меткa мастер-ключа;
- сгенерированный мастер-ключ;
- сгенерированный ключ засекречивания WAL.
Пример файла со статическими параметрами:
actual_master_key = master_key_value_00000000_000000_000
master_key_value_00000000_000000_000 = {generated_master_key}
wal_key = {generated_wal_key}
Сгенерировать собственный мастер-ключ возможно с помощью утилиты {{ PGHOME }}/bin/generate_encryption_key.
Файл /etc/postgres/kms_static_params.cfg помещается на все узлы кластера во время настройки перед запуском утилиты setup_kms_credentials. С помощью утилиты засекречивания {{ PGHOME }}/bin/encrypt_params_file подготовленный файл со статическими параметрами необходимо закодировать на каждом узле кластера.
Утилиты генерации ключей generate_encryption_key и кодирования encrypt_params_file расположены в директории {{ PGHOME }}/bin (где {{ PGHOME }} - директория с бинарными файлами для работы БД, например, /usr/pangolin-5.2.1.
Динамические параметры
Файл с динамическими параметрами может содержать все параметры, которые могут изменяться администратором безопасности на KMS, то есть в файл можно поместить все настройки, которые могут быть на реальном KMS.
Файл с динамическими параметрами /etc/postgres/kms_dynamic_params.cfg представляет собой простой текстовый документ, каждая строка которого содержит пару:
<имя ключа (параметра на KMS)> = <значение для данного ключа>
Пример файла с динамическими параметрами:
secure_config = on
is_tde_on = on
pg_ident +=
ssl = on
ssl_cert_file = /pg_ssl/server.crt
ssl_key_file = /pg_ssl/server.key
ssl_ca_file = /pg_ssl/root.crt
password_policies_enable = on
psql_encrypt_password = on
password_encryption = scram-sha-256
enabled_sec_admin_extra_auth_methods = cert
enabled_extra_auth_methods = cert
Подготовка файлов
-
Выполните генерацию мастер-ключа с помощью утилиты
generate_encryption_key(утилита расположена в директории{{ PGHOME }}/bin):# вход пользователем kmadmin_pg
$ su - kmadmin_pg
Password:
# генерация мастер-ключа
$ {{ PGHOME }}/bin/generate_encryption_key
Key was generated successfully. Key: {generated_master_key}
# генерация ключа засекречивания для WAL
$ {{ PGHOME }}/bin/generate_encryption_key
Key was generated successfully. Key: {generated_wal_key} -
Создайте файл со статическими параметрами
/etc/postgres/kms_static_params.cfg(метку мастер-ключа укажите именноmaster_key_value_00000000_000000_000):# создание файла
$ touch /etc/postgres/kms_static_params.cfg
# добавление сгенерированного на предыдущем шаге мастер-ключа и ключа засекречивания для WAL журналов
$ vim /etc/postgres/kms_static_params.cfg
actual_master_key = master_key_value_00000000_000000_000
master_key_value_00000000_000000_000 = {generated_master_key}
wal_key = {generated_wal_key} -
Создайте файл с динамическими параметрами
/etc/postgres/kms_dynamic_params.cfg:# создание файла
$ touch /etc/postgres/kms_dynamic_params.cfg
# добавление параметров
$ vim /etc/postgres/kms_dynamic_params.cfg
secure_config = on
is_tde_on = on
pg_ident +=
ssl = on
ssl_cert_file = /pg_ssl/server.crt
ssl_key_file = /pg_ssl/server.key
ssl_ca_file = /pg_ssl/root.crt
password_policies_enable = on
psql_encrypt_password = on
password_encryption = scram-sha-256
enabled_sec_admin_extra_auth_methods = cert
enabled_extra_auth_methods = cert -
Скопируйте подготовленные файлы на Standby-узел:
scp /etc/postgres/kms_*.cfg postgres@{{ replica_ip }}:/etc/postgres -
Выдайте права
kmadmin_pgна файлы со статическими и динамическими параметрами (сначала на Active-узле, затем на Standby-узле):chown kmadmin_pg:kmadmin_pg /etc/postgres/kms_static_params.cfg
chown kmadmin_pg:kmadmin_pg /etc/postgres/kms_dynamic_params.cfg -
Выполните вход администратором ИБ:
$ su - kmadmin_pg -
Закодируйте файл со статическими параметрами (сначала на Active-узле, затем на Standby-узле). В результате должно быть получено сообщение об успешном заксекречивании:
File /etc/postgres/kms_static_params.cfg was encrypted successfully:$ {{ PGHOME }}/bin/encrypt_params_file
Start to encrypt file: /etc/postgres/kms_static_params.cfg
File /etc/postgres/kms_static_params.cfg was encrypted successfully -
Убедитесь, что файл со статическими параметрами засекречен:
$ cat /etc/postgres/kms_static_params.cfg
Утилита setup_kms_credentials
Возможности инициализации параметров подключения к защищенному хранилищу и доработки в части работы с файлом хранения строки подключения доступны только для редакций Enterprise и Enterprise для ERP-систем.
Описываемая функциональность:
- обеспечивает настройку параметров подключения к хранилищу секретов;
- упрощает процесс изменения параметров для работы с хранилищем секретов;
- обеспечивает возможность обнаружения ошибок в параметрах подключения к хранилищу секретов на этапе конфигурирования доступа;
- обеспечивает настройку системы для работы с хранилищем сертификатов;
- упрощает использование утилиты в автоматизированных скриптах.
- обеспечивает настройку проверки серверного сертификата хранилища секретов.
Если изменение параметров подключения к хранилищу секретов или сертификатов производится на работающем кластере, то выполните/запустите перечитывание конфигурационных параметров в компонентах кластера. Перезапуск кластера не требуется.
Утилита setup_kms_credentials позволяет сохранять дополнительные параметры для работы с хранилищем секретов SecMan. Дополнительные параметры имеют значения по умолчанию или расширяют текущие типы данных. Это обеспечивает обратную совместимость формата засекреченного файла /etc/postgres/enc_connection_settings.cfg (владелец: kmadmin_pg, группа: kmadmin_pg, права: -rw-r--r--). Процесс добавления новых параметров не меняется.
Параметры для работы с хранилищем секретов
Параметры подключения передаются строкой вида:
/usr/pangolin-{version}/bin/setup_kms_credentials -c {cluster_id} -h {IP-адрес} -p {Порт} -t {тип авторизации} -i {логин пользователя}
К обязательным параметрам относятся:
-c- идентификатор кластера;-h- IP-адрес узла;-p- порт для подключения;-t- тип авторизации;-i- логин пользователя.
Тип авторизации (значение параметра -t) может принимать значения:
1- для Userpass-авторизации;2- для Approle-авторизации.
В интерактивном режиме передается только пароль.
Необязательные параметры:
--purpose- назначение (сертификатыcertsили секретыsecrets). Значение по умолчанию -secrets;--format/-f- формат вывода (JSON,table- таблица). Значение по умолчанию -table;--protocol/-l- протокол (httpилиhttps). Значение по умолчанию -https;--prefix/-x- префикс пути. Значение по умолчанию -kv;--suffix/-u- суффикс пути. По умолчанию передаваемое значение отсутствует.--namespace/-n- пространство имен, по умолчанию не задано;--auth/-a- точка авторизации, по умолчанию не передается;--root-ca/-r- файл или папка с корневым сертификатом для проверки сервера хранилища секретов. Если не задано, используется ближайшая доступная директория;--skip-confirm- настройка ввода, определяющая наличие/отсутствие подтверждения для редактирования или удаления записи;--index- индекс записи в режиме редактирования или удаления;--plain- вывод информации;--no-check- режим для отключения проверки параметров подключения к хранилищу секретов;--debug- показать информацию для отладки.
При отсутствии явно заданных необязательных параметров, используются значения по умолчанию.
Параметры root-caи suffix являются локальными параметрами отдельной записи. Единственный глобальный параметр - cluster_id.
Утилита setup_kms_credentials обеспечивает возможность задавать значения параметров root-ca и suffix (оба параметра расположены в разделе credentials) для каждого отдельного подключения к хранилищу секретов/сертификатов.
Если файл /etc/postgres/enc_connection_settings.cfg (/etc/postgres/enc_connection_settings_cert.cfg) имеет старый формат, root-ca и suffix не заданы для конкретного подключения, то для обеспечения совместимости утилита дублирует эти два параметра для каждого отдельного подключения.
Если соединение было создано с помощью новой версии программы, а параметры root-ca и suffix не были заданы, то в файл с параметрами подключений к хранилищу секретов/сертификатов /etc/postgres/enc_connection_settings.cfg (/etc/postgres/enc_connection_settings_cert.cfg) будут записаны пустые значения для данных параметров. В выводе команды show для параметра root-ca будет указываться реально используемое (вычисляемое) значение данного параметра для каждой записи, а при выводе в JSON-формат значение по умолчанию будет соответствовать True в поле root_ca_calculated. В табличном выводе параметр root_ca_calculated не указывается.
Если при добавлении новой записи в файл с параметрами подключения к хранилищу секретов/сертификатов, указать параметр cluster-id, отличный от уже записанного, утилита заканчивает работу с ошибкой: Error: wrong cluster-id {wrong cluster-id}, credentials was set for {correct cluster-id}.
Удаление файла с параметрами подключения к хранилищу секретов/сертификатов
Утилита setup_kms_credentials удаляет файл /etc/postgres/enc_connection_settings.cfg (/etc/postgres/enc_connection_settings_cert.cfg), если он не содержит записей с параметрами подключения к хранилищу секретов/сертификатов сразу после операции удаления последней записи:
[kmadmin_pg@server-name ~]$ ls -lh /etc/postgres/enc_connection_settings.cfg
-rw-r--r-- 1 kmadmin_pg kmadmin_pg 328 May 6 10:27 /etc/postgres/enc_connection_settings.cfg
[kmadmin_pg@server-name ~]$ /usr/pangolin-6.3.0/bin/setup_kms_credentials delete --index=0 --skip-confirm
[kmadmin_pg@server-name ~]$ ls -lh /etc/postgres/enc_connection_settings.cfg
ls: cannot access '/etc/postgres/enc_connection_settings.cfg': No such file or directory
Если файл был удален, то при последующем создании новой записи с параметрами подключения к хранилищу секретов/сертификатов необходимо заново ввести значение cluster-id:
[kmadmin_pg@server-name ~]$ /usr/pangolin-6.3.0/bin/setup_kms_credentials add --cluster ZVO --host <IP-адрес> --port 8200 --type 1 -i secmanLogIn --purpose secrets --no-check
Enter password:
**************
Confirm password:
**************
Credentials for Secret storage has been added successfully
При отсутствии файла /etc/postgres/enc_connection_settings.cfg (/etc/postgres/enc_connection_settings_cert.cfg) команда show утилиты setup_kms_credentials выводит сообщение No credentials specified или {} для JSON-формата:
[kmadmin_pg@server-name ~]$ ls -lh /etc/postgres/enc_connection_settings.cfg
ls: cannot access '/etc/postgres/enc_connection_settings.cfg': No such file or directory
[kmadmin_pg@server-name ~]$ /usr/pangolin-6.3.0/bin/setup_kms_credentials show
No credentials specified
[kmadmin_pg@server-name ~]$ /usr/pangolin-6.3.0/bin/setup_kms_credentials show --format=json
{}
Режим deletall
Режим deleteall используется совместно с флагом --purposeи удаляет файл /etc/postgres/enc_connection_settings.cfg (/etc/postgres/enc_connection_settings_cert.cfg).
Если в качестве значения флага установлено certs (deleteall --purpose=certs), то будет удален файл с параметрами подключения к хранилищу сертификатов /etc/postgres/enc_connection_settings_cert.cfg:
[kmadmin_pg@server-name ~]$ ls -lh /etc/postgres/enc_connection_settings_cert.cfg
-rw-r--r-- 1 kmadmin_pg kmadmin_pg 376 May 6 11:32 /etc/postgres/enc_connection_settings_cert.cfg
[kmadmin_pg@server-name ~]$ /usr/pangolin-6.3.0/bin/setup_kms_credentials deleteall --purpose=certs --skip-confirm
[kmadmin_pg@server-name ~]$ ls -lh /etc/postgres/enc_connection_settings_cert.cfg
ls: cannot access '/etc/postgres/enc_connection_settings_cert.cfg': No such file or directory
[kmadmin_pg@server-name ~]$ ls -lh /etc/postgres/enc_connection_settings.cfg
-rw-r--r-- 1 kmadmin_pg kmadmin_pg 328 May 6 10:27 /etc/postgres/enc_connection_settings.cfg
Если значение флага соответствует secrets (deleteall --purpose=secrets), то файл с параметрами подключения к хранилищу секретов /etc/postgres/enc_connection_settings.cfg будет удален:
[kmadmin_pg@server-name ~]$ ls -lh /etc/postgres/enc_connection_settings.cfg
-rw-r--r-- 1 kmadmin_pg kmadmin_pg 328 May 6 10:27 /etc/postgres/enc_connection_settings.cfg
[kmadmin_pg@server-name ~]$ /usr/pangolin-6.3.0/bin/setup_kms_credentials deleteall --purpose=secrets --skip-confirm
[kmadmin_pg@server-name ~]$ ls -lh /etc/postgres/enc_connection_settings.cfg
ls: cannot access '/etc/postgres/enc_connection_settings.cfg': No such file or directory
[kmadmin_pg@server-name ~]$ ls -lh /etc/postgres/enc_connection_settings_cert.cfg
-rw-r--r-- 1 kmadmin_pg kmadmin_pg 376 May 6 11:32 /etc/postgres/enc_connection_settings_cert.cfg
При попытке вызвать команду deleteall, когда файл с параметрами подключения к хранилищу секретов/сертификатов уже удален, команда не выполнится, а в консоль будет выведено сообщение File enc_connection_settings.cfg does not exist или File enc_connection_settings_cert.cfg does not exist, если флаг --purpose при вызове команды был установлен в значение certs:
[kmadmin_pg@server-name ~]$ ls -lh /etc/postgres/enc_connection_settings.cfg
ls: cannot access '/etc/postgres/enc_connection_settings.cfg': No such file or directory
[kmadmin_pg@server-name ~]$ /usr/pangolin-6.3.0/bin/setup_kms_credentials deleteall --purpose=secrets --skip-confirm
File enc_connection_settings.cfg does not exist
[kmadmin_pg@server-name ~]$ ls -lh /etc/postgres/enc_connection_settings_cert.cfg
ls: cannot access '/etc/postgres/enc_connection_settings_cert.cfg': No such file or directory
[kmadmin_pg@server-name ~]$ /usr/pangolin-6.3.0/bin/setup_kms_credentials deleteall --purpose=certs --skip-confirm
File enc_connection_settings_cert.cfg does not exist
Если не указан флаг --purpose, то утилита закончит работу с ошибкой Error: --purpose not specified:
[kmadmin_pg@server-name ~]$ /usr/pangolin-6.3.0/bin/setup_kms_credentials deleteall --skip-confirm
Error: --purpose not specified
Мониторинг работы утилиты
При вызове setup_kms_credentials delete в случае не заданного индекса будет получено сообщение об ошибке:
Error: Index to delete not specified
При вызове операции delete утилиты setup_kms_credentials на несуществующем хранилище будет получен вывод об ошибке:
Error: File enc_connection_settings.cfg does not exist
Новый формат файлов /etc/postgres/enc_connection_settings.cfg(/etc/postgres/enc_connection_settings_cert.cfg) обратно не совместим с более ранними версиями СУБД Pangolin.
Любые изменения в файле /etc/postgres/enc_connection_settings.cfg(/etc/postgres/enc_connection_settings_cert.cfg): создание, редактирование или удаление записи с параметрами подключения к хранилищу секретов/сертификатов, логируются в syslog:
[kmadmin_pg@server-name ~]$ /usr/pangolin-6.3.0/bin/setup_kms_credentials add -h <IP-адрес> -p 8200 -u pang -t 1 -r -i adminencryption --no-check
Enter password:
**************
Confirm password:
**************
Credentials for Secret storage has been added successfully
[kmadmin_pg@server-name ~]$ /usr/pangolin-6.3.0/bin/setup_kms_credentials delete --index 1 --skip-confirm
Credentials for Secret storage has been removed successfully
[kmadmin_pg@server-name ~]$ exit
[user@server-name ~]$ sudo journalctl -q --since "2024-05-21 15:43:57" --until "2024-05-21 15:44:55" | grep setup_kms_credentials
May 21 15:44:07 <server_name> setup_kms_credentials[102792]: Credentials for Secret storage has been added successfully
May 21 15:44:50 <server_name> setup_kms_credentials[102831]: Credentials for Secret storage has been removed successfully
При выполнении команд setup, edit или add утилита setup_kms_credentials осуществляет проверку добавляемой или редактируемой записи с параметрами подключения.
В зависимости от результата проверки, дополнительно к сообщению о произведенном действии, будет выведено сообщение Credentials check ok, если проверка пройдена, или сообщение Credentials check failed, если проверка не пройдена:
[kmadmin_pg@server-name ~]$ /usr/pangolin-{version}/bin/setup_kms_credentials -c {user} -h <IP-адрес> -p 8200 -u postgresql -t 1 -r -i adminencryption
Enter password:
**************
Confirm password:
**************
Credentials check ok
Credentials for Secret storage has been set successfully
[kmadmin_pg@server-name ~]$ /usr/pangolin-{version}/bin/setup_kms_credentials add -h <IP-адрес> -p 8200 -r -u -t 1 -i fake_login
Enter password:
**************
Confirm password:
**************
Credentials check failed
Credentials for Secret storage has been added successfully
Для отключения вывода сообщения будет использоваться существующий ключ --no-check:
[kmadmin_pg@server-name ~]$ /usr/pangolin-{version}/bin/setup_kms_credentials add -h <IP-адрес> -p 8200 -r -u -t 1 -i fake_login --no-check
Enter password:
**************
Confirm password:
**************
Credentials for Secret storage has been added successfully
Ключ --verify учитывает результат проверки при выполнении запрашиваемой операции: если проверка не пройдена, утилита заканчивает работу с ошибкой, запись не добавляется/не изменяется:
[kmadmin_pg@server-name ~]$ /usr/pangolin-{version}/bin/setup_kms_credentials -c Fake_c_id -h <IP-адрес> -p 8200 -r -u -t 1 -i fake_login --verify
Enter password:
**************
Confirm password:
**************
Credentials check failed
Error: Credentials for Secret storage not set
[kmadmin_pg@server-name ~]$ /usr/pangolin-{version}/bin/setup_kms_credentials add -h <IP-адрес> -p 8200 -r -u -t 1 -i fake_login --verify
Enter password:
**************
Confirm password:
**************
Credentials check failed
Error: Credentials for Secret storage not added
[kmadmin_pg@server-name ~]$ /usr/pangolin-{version}/bin/setup_kms_credentials edit --index 0 -h <IP-адрес> -s fake_suffix --verify
Enter password:
**************
Confirm password:
**************
Credentials check failed
Error: Credentials for Secret storage not edited
Ключи --verify и --no-check не совместимы — утилита заканчивает работу с ошибкой, если указать их вместе:
[kmadmin_pg@server-name ~]$ /usr/pangolin-6.3.0/bin/setup_kms_credentials add -h <IP-адрес> -p 8200 -r -u -t 1 -i fake_login --verify --no-check
Error: keys --verify and --no-check cannot be used together
Функция check_kms_is_on() (проверка доступности плагина взаимодействия с KMS)
Специальная проверка, которая показывает, получилось ли выбрать такие значения из файла enc_connection_settions.cfg, содержащего варианты подключения к хранилищу секретов.
Функция проверяет, что плагин взаимодействия с KMS:
- найден, доступен и подключен к КМС;
- содержит в себе все функции API
sKmsConnectionInitialized.
Пример использования:
SELECT check_kms_is_on();
При успешном подключении на выходе функции будет получено значение true, в противном случае — false.
Режимы работы утилиты
Режимы работы утилиты:
setup- ввести новый набор данных для хранилища (хранилищ) секретов или сертификатов, поведение по умолчанию;show- показать текущий набор параметров подключений к хранилищам секретов/сертификатов (без паролей и идентификаторов секретов);add- добавить новую запись в набор параметров подключений к хранилищам секретов/сертификатов;delete- удалить запись из набора параметров подключений к хранилищам секретов/сертификатов по номеру записи;edit- редактировать запись из набора параметров подключений к хранилищам секретов/сертификатов по номеру записи.
Начиная с версии 5.4.0, отсутствует обратная совместимость обновления по параметру suffix.
Режим просмотра добавленных параметров подключения
Пример команды просмотра записей в табличном формате:
[user ~]$ /usr/pangolin-{version}/bin/setup_kms_credentials show --plain
Pangolin cluster ID: {cluster_id}
+------------------------------------------------------------------------------------------------------------------------------------------------------------+
| # | protocol | host | port | root CA path | suffix | prefix | namespace | cred type | auth point | id | status |
-----+----------+-------------+------+------------------+---------+--------+-----------+----------------------+------------+-----------------+----------------
| 0 | https | <IP-адрес> | 8200 | /pg_ssl/root_di1 | suffix1 | kv | | Userpass Auth Method | userpass | adminencryption | Ok |
| 1 | https | <IP-адрес> | 8200 | /pg_ssl/root_di2 | suffix2 | kv | | Userpass Auth Method | userpass | adminencryption | Ok |
+------------------------------------------------------------------------------------------------------------------------------------------------------------+
[kmadmin_pg@server-name ~]$ /usr/pangolin-{version}/bin/setup_kms_credentials show --purpose=certs --plain
Pangolin cluster ID: test
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
| # | protocol | host | port | root CA path | suffix | prefix | namespace | cred type | auth point | id | status |
-----+----------+------------+------+------------------+---------+--------+-----------------------+----------------------+------------+-----------------+----------
| 0 | https | <IP-адрес> | 8203 | /pg_ssl/root_di1 | pango1 | SBERCA | CI00000000_CI00000000 | Userpass Auth Method | userpass | adminencryption | Ok |
| 1 | https | <IP-адрес> | 8203 | /pg_ssl/root_di2 | pango2 | SBERCA | CI00000000_CI00000000 | Userpass Auth Method | userpass | adminencryption | Ok |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
Режим просмотра добавленных параметров подключения в JSON
Пример команды просмотра записей в JSON-формате:
[user ~]$ /usr/pangolin-{version}/bin/setup_kms_credentials show --format=json
{
"cluster_id" : "test",
"credentials" :
[
{
"auth_point" : "userpass",
"host" : {IP-адрес},
"id" : "qewr",
"namespace" : "",
"port" : {Порт},
"prefix" : "kv",
"protocol" : "HTTPS",
"status" : "Storage error",
"type" : "USER_PASS"
},
{
"auth_point" : "userpass",
"host" : {IP-адрес},
"id" : "qwer",
"namespace" : "",
"port" : {Порт},
"prefix" : "kv",
"protocol" : "HTTPS",
"status" : "Storage error",
"type" : "USER_PASS"
}
],
"root_ca" : "/pg_ssl",
"suffix" : ""
}
[user ~]$ /usr/pangolin-{version}/bin/setup_kms_credentials show --purpose=certs --format=json
{
"cluster_id" : "test",
"credentials" :
[
{
"auth_point" : "userpass",
"host" : {IP-адрес},
"id" : "adminencryption",
"namespace" : "CI00000000_CI00000000",
"port" : {Порт},
"prefix" : "SBERCA",
"protocol" : "HTTPS",
"root_ca" : "/pg_ssl/root_di1",
"root_ca_calculated" : "false",
"status" : "Ok",
"suffix" : "pango1",
"type" : "USER_PASS"
},
{
"auth_point" : "userpass",
"host" : {IP-адрес},
"id" : "adminencryption",
"namespace" : "CI00000000_CI00000000",
"port" : {Порт},
"prefix" : "SBERCA",
"protocol" : "HTTPS",
"root_ca" : "/pg_ssl/root_di2",
"root_ca_calculated" : "false",
"status" : "Ok",
"suffix" : "pango2",
"type" : "USER_PASS"
}
]
}
Отключение функциональности
Настройка параметров подключения производится при первоначальной настройке кластера Pangolin или при изменении настроек хранилища секретов (или сертификатов). Специальные команды для отключения функциональности отсутствуют.
Задание уровня логирования сообщений о загрузке параметров из защищенного хранилища
Значение параметра secure_config_log_level задает уровень логирования на котором будут выводиться сообщения о загрузке параметров из защищенного хранилища. Значение по умолчанию: LOG. Для уменьшения размера лога установить значение меньше чем log_min_messages.
Параметр может быть установлен как в файле конфигурации, так и командой:
ALTER SYSTEM SET secure_config_log_level = DEBUG1;
Обеспечение отказоустойчивости СУБД Pangolin при отказе хранилища секретов
Отказоустойчивость обеспечивается:
- сохранением параметров и их хранением в засекреченных файлах;
- наличием модуля хранения засекреченных сертификатов;
- отдельным конфигурационным параметром срока актуальности сохраненных параметров;
- валидностью кеша на период его времени жизни, в том числе при отключении функциональности;
- обновлением кеша при смене параметров в случае успешного подключения и использование кешированных параметров в случае неуспешного;
Засекреченный дамп хранится в виде файлов, не доступныx для перекодирования и использования на другой установке. Алгоритм засекречивания основывается на информации о системных параметрах и защищен от перекодирования.
Функциональность доступна только для редакций Enterprise и Enterprise для ERP-систем.
Кеширование данных происходит только при включенных функциональностях обращения к хранилищу секретов. При отключении функциональности кеш сохраняется и инвалидируется по истечении vault_cache_expiration_timeout.
Перекодирование сохраненных дампов невозможно. При изменении параметров оборудования дамп станет невалидным.
По умолчанию функциональность выключена. Включение происходит установкой параметра enable_vault_params_cache в значение on одновременно локально и в хранилище параметров. Локально функциональность может быть установлена как вручную, так и командой:
ALTER SYSTEM SET enable_vault_params_cache = on;
Перед включением функциональности убедитесь в том, что значение параметра secure_config = on.
Время жизни дампа контролируется параметром vault_cache_expiration_timeout. Параметр имеет значение по умолчанию (1 месяц) источником параметра является хранилище секретов, значение параметра — строка в формате interval.
Имеется возможность кеширования сертификатов. По умолчанию значение параметра - on:
show enable_vault_certificates_cache;
Кеширование серверных и клиентских сертификатов в Pangolin Pooler настраиваются следующими параметрами:
server_tls_enable_vault_certificates_cache = 0
client_tls_enable_vault_certificates_cache = 0
Начиная с версии 6.4.0, был добавлен новый источник конфигурационных параметров vault cache, присваиваемый параметру при восстановлении его из кеша. Например, для enabled_extra_auth_methods при восстановлении от кеша:
SELECT source FROM pg_settings WHERE name = 'enabled_extra_auth_methods';
vault cache
Также имеется возможность настройки старта отсчета времени жизни кеша:
- с его последнего успешного формирования;
- c первого неуспешного взаимодействия с хранилищем.
Поведение настраивается параметром vault_cache_expiration_at_fault, значение по умолчанию on. Если параметр включен, то отсчет времени жизни ведется с первого неуспешного взаимодействия с хранилищем секретов/сертификатов.
Реализованы функции мониторинга оставшегося времени жизни кеша для сертификатов:
SELECT certificate_cache_expired_at();
и для конфигурационных параметров/ключей кодирования:
SELECT params_cache_expired_at();
Данные функции возвращают одно из следующих значений в зависимости от состояния кеша и функциональности:
-
при истечении времени жизни:
Vault cache will be expired at:
expired -
если истечение времени жизни еще не началось:
Vault cache will be expired at:
expiration not started yet -
во время истечения времени жизни:
Vault cache will be expired at:
years: \d*
month: \d*
days: \d*
hours: \d*
minutes: \d*
seconds: \d*
Также время жизни кеша может быть возвращено в формате interval:
select params_cache_expired_at_interval();
params_cache_expired_at_interval
----------------------------------
365 days 23:59:42.451545
select certificate_cache_expired_at_interval();
params_cache_expired_at_interval
----------------------------------
365 days 23:59:42.451545
В случае, соответствующем expired:
select params_cache_expired_at_interval();
params_cache_expired_at_interval
----------------------------------
00:00:00
select certificate_cache_expired_at_interval();
params_cache_expired_at_interval
----------------------------------
00:00:00
В случае, соответствующем expiration not started yet:
select params_cache_expired_at_interval();
params_cache_expired_at_interval
----------------------------------
-1 mons -1 days -00:00:00.000001
(1 row)
select certificate_cache_expired_at_interval();
params_cache_expired_at_interval
----------------------------------
-1 mons -1 days -00:00:00.000001
(1 row)
Функция, возвращающая признак работы от кеша сертификатов/параметров:
SELECT vault_cache_usage();
В зависимости от источника данных сообщение будет содержать признак cache или vault:
postgres=# select * from vault_cache_usage();
cache | source
--------------+--------
params | vault/cache
certificates | vault/cache
(2 rows)
Поведение при отсутствии параметра secure_config в кластере:
В этом случае кластер считается невалидным и при возможности будет произведен запуск от кешированных параметров. В логах присутствуют соответствующие сообщения:
WARNING: parameter "secure_config" does not exist on KMS
WARNING: postgres: Try to restore cached parameters
LOG: Enabled vault cache mode: enabled
WARNING: Parameter secure_config restored from local cache
Использование функциональности
Ниже рассмотрены четыре сценария с включенной и выключенной функциональностью:
- При выключенной функциональности и успешном подключении, преобразованные файлы дампа не создаются. База данных запускается успешно.
- При выключенной функциональности и неуспешном подключении преобразованные файлы дампа не создаются. База данных не может запуститься, в логах появится ошибка подключения к хранилищу секретов.
- При включенной функциональности и успешном подключении создаются преобразованные файлы дампа. База данных запускается штатно.
- При включенной функциональности и неуспешном соединении в случае наличия кеша по итогу успешного подключения ранее будут использоваться параметры кеша. При отсутствии кеша или его повреждении база данных не может начать свою работу и завершается с ошибкой в логе.
Сценарий под номером 4 аналогичен и для файлов сертификатов.
Другой причиной невозможности запуска базы данных является истечение срока службы данных (vault_cache_expiration_timeout). При этом СУБД Pangolin не будет остановлен, если vault_cache_expiration_timeout истек уже во время его работы. Проверка происходит только при обращении к хранилищу секретов.
Причины ошибки при запуске с включенной функциональностью:
- повреждение засекреченных параметров;
- повреждение сохраненных засекреченных файлов сертификатов;
- повреждение сохраненных засекреченных ключей;
- смена параметров оборудования;
- истечение срока давности кеша.