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
: - имя параметра =
Защита параметров конфигурации
В рамках функциональности защиты конфигурации реализовано разделение разрешений на некоторые настроечные параметры 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
– засекречивание новых табличных пространств;примечаниеПараметр действует только при запуске Pangolin и включенном TDE:
is_tde_on = on/true
.В случае, если в качестве значения параметра выбрано значение по умолчанию
ddl
, новые табличные пространства кодируются только при ручной установке опцииis_encrypted = on
, по умолчанию засекречивание не применяется.При выборе значения параметра
always
, опцияis_encryped
, передаваемая в команде, игнорируется, так как в этом случае на все таблицы пространства будет применено засекречивание. -
enabled_sec_admin_extra_auth_methods
– список дополнительно разрешенных к использованию методов аутентификации для ролей администраторов безопасности; -
enabled_extra_auth_methods
– список дополнительно разрешенных к использованию методов аутентификации для всех ролей.примечаниеПо умолчанию доступны только методы аутентификации
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
Описываемая функциональность:
- обеспечивает настройку параметров подключения к хранилищу секретов;
- упрощает процесс изменения параметров для работы с хранилищем секретов;
- обеспечивает возможность обнаружения ошибок в параметрах подключения к хранилищу секретов на этапе конфигурирования доступа;
- обеспечивает настройку системы для работы с хранилищем сертификатов;
- упрощает использование утилиты в автоматизированных скриптах.
- обеспечивает настройку проверки серверного сертификата хранилища секретов.
Если изменение параметров подключения к хранилищу секретов или сертификатов производится на работающем кластере, то выполните/запустите перечитывание конфигурационных параметров в компонентах кластера. Перезапуск кластера не требуется.
Утилита setup_kms_credentials
позволяет сохранять дополнительные параметры для работы с хранилищем секретов SecMan. Дополнительные параметры имеют значения по умолчанию или расширяют текущие типы данных. Это обеспечивает обратную совместимость формата засекреченного файла /etc/postgres/enc_connection_settings.cfg
(владелец: kmadmin_pg
, группа: kmadmin_pg
, права: -rw-r--r--
). Процесс добавления новых параметров не меняется.
Параметры для работы с хранилищем секретов
Параметры подключения передаются строкой вида:
/usr/pangolin-6.5.2/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
[pprb_dev@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-6.5.2/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-6.5.2/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-6.5.2/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-6.5.2/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-6.5.2/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-6.5.2/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-6.5.2/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-6.5.2/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-6.5.2/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-6.5.2/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 для перекодирования и использования на другой установке. Алгоритм засекречивания основывается на информации о системных параметрах и защищен от перекодирования.
Кеширование данных происходит только при включенных функциональностях обращения к хранилищу секретов. При отключении функциональности кеш сохраняется и инвалидируется по истечении 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
истек уже во время его работы. Проверка происходит только при обращении к хранилищу секретов.
Причины ошибки при запуске с включенной функциональностью:
- повреждение засекреченных параметров;
- повреждение сохраненных засекреченных файлов сертификатов;
- повреждение сохраненных засекреченных ключей;
- смена параметров оборудования;
- истечение срока давности кеша.