СЗИ. Установка\подключение
Автоматическое подключение СЗИ с помощью external-скрипта
Общий механизм подключения вынесен в независимый external-скрипт внутри общих скриптов развертывания/обновления, к которым относятся:
playbook_configure_ist.yaml
- осуществляет запуск сценария подключения СЗИ;custom_configure_ist.yml
- пользовательский конфигурационный слой для настройки входных параметров.
Ansible-роль (configure_ist
) для запуска процесса подключения СЗИ выглядит следующим образом:
-
tasks
:check.yml
- файл с задачами для проверки состояния стенда, влияющими на успешное подключение СЗИ, проверка входных параметров;common_check.yml
- файл с задачами для общей проверки состояния стенда. Проверки путей до конфигурационных файлов, путей до сертификатов;define_current_master.yml
- файл с задачами для определения текущей конфигурации. В случае со стендом с Pangolin Manager, определение текущего master;install.yml
- файл с задачами по подключению СЗИ;main.yml
- файл с задачами, включает в себя вызов всех файлов в текущем каталоге;switch.yml
- файл с задачами по остановке/запуску БД;
-
group_vars
:all.yml
- п еременные, используемые в данной роли по умолчанию;message.yml
- переменные для вывода информации (INFO)/ошибок (FAIL);
-
cluster
:hosts.ini
- обеспечивает возможность передачи параметров подключения к хостам. Содержит файлы для кластерной конфигурации;inventory.py
- скрипт, обеспечивающий возможность заполнять inventory-файлы в автоматическом режиме;
-
standalone
:hosts.ini
- обеспечивает возможность передачи параметров подключения к хостам. Содержит файлы для конфигурации standalone;inventory.py
- скрипт, обеспечивающий возможность заполнять inventory-файлы в автоматическом режиме;
-
filter_plugins
:common_filters.py
- скрипт для обработки входных данных;
-
library
:yedit
- скрипт для работы с конфигурационным файлом Pangolin Manager. Поставляется в скомпилированном виде;pangolin_protect_init.py
- скрипт для работы с утилитами setup_kms_credentials, initprotection.
Особенности логики работы некоторых параметров пользовательского конфигурационного файла:
- параметр
secure_config
контролирует включение защи ты конфигурации. Значение по умолчаниюtrue
; - параметр
admin_protection
подразумевает подключение только защиты от привилегированных пользователей. Значение по умолчаниюtrue
.
Вышеупомянутые параметры располагаются в блоке TYPE IST
.
Примечание:
Утилиты
initprotection/setup_kms_credentials
в external-скрипте обернуты в Python-модуль. Это позволяет исключить возможные зависания при передаче некорректного значения и организацией вызова утилитыinitprotection
от linux-пользователя администратора безопасности.
Организована возможность передать имя пользователя с привилегиями на запуск инициализации механизма защиты данных и запуск инициализации подключения к защищенному хранилищу; контролируется параметром target_linux_user
, значение по умолчанию: kmadmin_pg
. Располагается в блоке SETTINGS INIT PROCESS
. Скрипты по подключению СЗИ не вносят изменения в файл sudoers
для данного пользователя и не корректируют права владельца на запуск утилит initprotection
и setup_kms_credentials
. Все необходимые права на запуск должны быть выданы до старта скриптов по подк лючению СЗИ.
Тип объединенного параметра адреса узла и порта VAULT VAULT_HOST_PORT
соответствует list
. Ограничений в количестве элементов списка нет. Располагаются в блоке CONNECTION VAULT PARAMETERS
.
Параметр add_connection_string_to_hba
отвечает за добавление строк подключения для созданных в процессе инициализации механизма защиты данных пользователей. Значение по умолчанию true
. Располагается в блоке ADMIN PROTECTION SETTINGS
. В случае, если параметр будет принимать значение false
, в конфигурационный файл pg_hba.conf
будет добавлен следующий комментарий:
# The connection string for security administrators is formed implicitly
Внимание!
С версии 5.5.0 параметры, которые в более ранних версиях задавали правила подключения для
admin_protection_users.sec_admin
(sec_admin_hba_rule.connection
,sec_admin_hba_rule.databases
,sec_admin_hba_rule.network
,sec_admin_hba_rule.auth
) и параметрsec_admin_backup_networks
(список хостов к подключениюadmin_protection_users.sec_admin_backup
) были исключены.Тип параметра
sec_admin_hba_rule.network
изменен сstr
наlist
.
Для каждой УЗ администратора безопасности можно задать индивидуальные правила подключения в параметре admin_protection_users
. Параметры настройки располагаются в блоке ADMIN PROTECTION SETTINGS
.
Параметр pg_encryption_keys_capacity
задает настройку БД при подключении TDE; располагается в блоке CONFIGURATION PARAMETERS
. Параметры dynamic_shared_memory_type
и mkeychecker_delay
в локальную конфигурацию не включены.
Запуск скрипта для подключения СЗИ
Выполните шаги:
-
Активируйте виртуальное окружение для запуска скрипта:
source /opt/pangolin-ansible-venv-controller/bin/activate
-
Запустите external-скрипт подключения СЗИ, для этого выполните Ansible плейбук
playbook_configure_ist.yaml
.-
пример запуска для конфигурации standalone:
ansible-playbook playbook_configure_ist.yaml -i inventories/standalone/hosts.ini --extra-vars "custom_config=<Путь к пользовательскому конфигурационному файлу> utility_path=<Путь к каталогу с утилитами; входит в состав дистрибутива>" --flush-cache -vv
-
пример запуска для кластерной конфигурации:
ansible-playbook playbook_configure_ist.yaml -i inventories/cluster/hosts.ini --flush-cache -vv
-
Проверки и информационные сообщения процесса подключения СЗИ
Проверка работоспособности с Хранилищем секретов
Чтобы убедиться в том, что при запуске СУБД Pangolin происходит запрос сертификатов, выполните следующие действия:
-
Запустите перехват сетевого трафика порту, где работает эмулятор SecMan:
tshark -PV -C Custom -w outfile -i ens192 -f "tcp port <Порт>" 2>&1 | less
-
Запустите СУБД Pangolin вручную посредством
pg_ctl
:pg_ctl -D /pgdata/0{major_version}/data start
-
Проверьте в лог-файле сообщения о подключении к SecMan и получении сертификатов.
Ожидаемый результат:
Лог содержит сообщения:
LOG: Fetch certificate from SecMan.
LOG: certificate, private key and certificate chain are loaded from PKCS#12 specified in file -
Остановите перехват трафика, и проверьте наличие пакетов обмена данными с эмулятором SecMan.
Ожидаемый ре зультат:
Также в сетевом трафике присутствуют пакеты обмена данными с эмулятором SecMan:
Transmission Control Protocol, Src Port: 8201, Dst Port:
...
"certificate": "MIIJgQIBAzCCCUcGCSqGSIb3DQ...
"expires": "2023-12-02T11:50:57Z",\n
...
Проверка корректной передачи в строку запуска ansible обязательных параметров
Для корректной работы скрипта по подключению СЗИ необходимо передать в строку запуска два обязательных параметра:
custom_config
- путь к пользовательскому конфигурационному файлу инсталлятора;utility_path
- путь к каталогуutilities/
, входящего в состав дистрибутива.
В случае ошибки выводится следующее сообщение:
"FAIL__Один из обязательных входных параметров: custom_config, utility_path не был задан при старте. Скорректируйте строку запуска ansible и произведите повторный запуск скрипта по подключению СЗИ.__FAIL"
Проверка пользователей
Если пользователи для успешного сценария подключения СЗИ на стенде отсутствуют, то выводится блокирующая дальнейшее выполнение сценария ошибка:
"FAIL__На хосте {{ ansible_fqdn }} не был обнаружен пользователь {}. На текущий момент подключение СЗИ невозможно, необходимо выполнить проверку корректного заполнения параметра target_linux_user в пользовательском конфигура ционном файле '{}' или произвести создание пользователя. После произведите повторный запуск скрипта по подключению СЗИ.__FAIL"
Проверка актуального master-узла
На вход скрипту передается ряд параметров, в числе которых адреса master и replica-узлов. Информация может быть неактуальной, поэтому реализована проверка актуального master-узла. В случае, если адрес master-узла отличается от переданного на вход, то выводится ошибка, блокирующая дальнейшее выполнение сценария:
"FAIL__Текущий мастер в СУБД не соответствует значению, полученному из SM. На текущий момент подключение СЗИ невозможно, необходимо выполнить switchover__.FAIL"
Проверка файлов сертификатов
Если файлы сертификатов отсутствуют, то выводится ошибка, блокирующая дальнейшее выполнение сценария:
"FAIL__Файл сертификата {} не найден на хосте {{ ansible_fqdn }}. Проверьте наличие файла.__FAIL"
Проверка переданного пути к конфигурационному файлу инсталлятора на корректность
В случае ошибки выводится следующее сообщение:
"FAIL__Путь к конфигурации '{}' не должен зависеть от текущего каталога. Скорректируйте значение для параметра custom_file в строке запуска ansible и произведите повторный запуск скрипта по подключению СЗИ__FAIL"
Проверка наличия конфигурационного файла на управляющем узле
При наличии файла выводится подсказка с информацией о расположении файла:
"INFO__Файл конфигурации '{}' найден.__INFO"
В случае, когда файл не найден, выводится сообщение вида:
"FAIL__Файл конфигурации '{}' не найден. Строка запуска ansible должна содер жать параметр custom_file с корректным путем к пользовательскому конфигурационному файлу custom_file. Скорректируйте строку запуска ansible и произведите повторный запуск скрипта по подключению СЗИ.__FAIL"
Роль получает текущее значение следующих переменных:
Проверка наличия переменных окружения
Переменные окружения, которые необходимо проверить:
PGDATA
;PGHOME
;CLNAME
;PGPORT
.
Если нет одного из параметров, то выводится ошибка, блокирующая дальнейшее выполнение сценария:
"FAIL__{PARAM} на хосте {{ ansible_fqdn }} отсутствует. Актуализируйте значение '{PARAM}' в файле /home/postgres/.bash_profile.__FAIL"
Проверка запуска СУБД
Если СУБД Pangolin не запущена, то выводится ошибка, блокирующая дальнейшее выполнение сценария:
"FAIL__СУБД Pangolin не запущена. Произведите проверку состояния СУБД Pangolin на сервере.__FAIL"
Проверка запуска Pangolin Manager
Если служба Pangolin Manager не запущена, то выводится ошибка, блокирующая дальнейшее выполнение сценария:
"FAIL__Служба Patroni не запущен. Произведите проверку состояния службы Pangolin Manager на сервере.__FAIL"
Проверка установки параметров в true
Если ни один из параметров, которые контролируют подключение СЗИ, не выставлен в true
, то выводится ошибка, блокирующая дальнейшее выполнение сценария:
"FAIL__Не удалось сформировать список С ЗИ к подключению. Скорректируйте значения в пользовательском конфигурационном слое.__FAIL"
Проверка символьных ссылок
Если символьная ссылка до плагина, контролирующего подключение к серверу VAULT, на стенде выставлена некорректно, то выводится ошибка, блокирующая дальнейшее выполнение сценария:
"FAIL__Подключение СЗИ на стенде во зможно только с физическим(ими) сервером(ами) VAULT. Произведите проверку символьной ссылки до плагина: {}.__FAIL"
Проверка плагинов setup_kms_credentials/initprotection
Если на стенде не был обнаружен плагин setup_kms_credentials
или initprotection
, то выводится ошибка, блокирующая дальнейшее выполнение сценария:
"FAIL__Плагин '{}' на стенде не обнаружен.__FAIL"
Проверка доступности серверов
Если ни один сервер из заданного списка недоступен, то выводится ошибка, блокирующая дальнейшее выполнение сценария:
"Не удалось установить успешное подключение ни к одному из сервера(ов) VAULT. Проверьте корректность переданных параме тров подключения к защищенному(ым) хранилищу(щам) VAULT в конфигурационном файле' {}'. После произведите повторный запуск скрипта по подключению СЗИ.__FAIL"
Проверка списка УЗ администраторов
Если список УЗ администраторов безопасности был передан не в полном объеме, то выводится ошибка, блокирующая дальнейшее выполнение сценария:
"FAIL__Проверка входных параметров для инициализации механизма защиты данных не дала ожидаемый результат. Параметры УЗ администраторов безопасности были переданы неверно или не в полном объеме. Скорректируйте параметры в пользовательском конфигурационном файле '{}', относящиеся к конфигурированию УЗ администраторов безопасности и произведите повторный запуск скрипта по подключению СЗИ.__FAIL"
Проверка метода шифрования паролей УЗ администраторов безопасности
Если пароли для УЗ администраторов безопасности были заданы не методом SCRAM-SHA-256, то выводится ошибка, блокирующая дальнейшее выполнение сценария:
"FAIL__Проверка входных параметров для инициализации механизма защиты данных не дала ожидаемый результат. Пароли УЗ администраторов безопасности не были переданы в виде SCRAM-SHA-256. Скорректируйте параметры паролей для УЗ администраторов безопасности в пользовательском конфигурационном файле '{}' и произведите повторный запуск скрипта по подключению СЗИ. __FAIL"
Проверка получения параметров VAULT_CLUSTER_ID, VAULT_LOGIN, VAULT_PASSWORD
Роль получает на вход параметры:
VAULT_CLUSTER_ID
;VAULT_LOGIN
;VAULT_PASSWORD
;VAULT_HOST_PORT
.
Если для одного из них было передано пустое значение, то выводится ошибка, блокирующая дальнейшее выполнение сценария:
"FAIL__Проверка входных параметров для инициализации подключения к защищенному(ым) хранилищу(ам) VAULT не дала ожидаемый результат. Значение для параметра '{}' не должно быть пустым. Скорректируйте параметры '{}' в пользовательском конфигурационном файле '{}' и произведите повторный запуск скрипта по подключению СЗИ.__FAIL"
Проверка значение параметра VAULT_HOST_PORT
Если значение для параметра VAULT_HOST_PORT
было передано в некорректном формате, то выводится ошибка, блокирующая дальнейшее выполнение сценария:
"FAIL__Проверка входных параметров для инициализации подключения к защищенному(ым) хранилищу(ам) VAULT не дала ожидаемый результат. Значение для параметра '{}' указано в неверном формате. Скорректируйте параметры '{}' в пользовательском конфигурационном файле '{}' и произведите повторный запуск скрипта по подключению СЗИ.__FAIL"
Проверка наличия VAULT_CLUSTER_ID на защищенном хранилище VAULT
В случае отсутствия выводится ошибка вида:
"FAIL__cluster id - '{}' в защищенном хранилище VAULT '{}' не обнаружен. Дальнейшее подключение невозможно. Произведите проверку на предмет корректно сконфигурированого id на сервере VAULT и произведите повторный запуск скрипта по подключению СЗИ.__FAIL"
Проверка значение параметра VAULT_CLUSTER_ID
Если значение для параметра VAULT_CLUSTER_ID
было передано в некорректном формате, то выводится ошибка, блокирующая дальнейшее выполнение сценария:
"FAIL__Проверка входных параметров для инициализации подключения к защищенному(ым) хранилищу(ам) VAULT не дала ожидаемый результат. Значение для параметра '{}' не должно начинаться или заканчиваться кавычками. Скорректируйте параметры '{}' в пользовательском конфигурационном файле '{}' и произведите повторный запуск скрипта по подключению СЗИ.__FAIL"
Получение общего списка параметров из защищенного хранилища VAULT
При возникновении ошибок в ходе получения общего списка параметров защищенного хранилища выводится ошибка вида:
"FAIL__В процессе получения списка параметров из защищенного хранилища VAULT возникли ошибки: {}. Произведите проверку состояния VAULT сервера(ов) и произведите повторный запуск скрипта по подключению СЗИ.__FAIL"
Проверка корректного значения для параметра secure_config на защищенном хранилище VAULT
Значение on
устанавливается, если планируется подключение защиты параметров конфигурации; значение off
используется, если подключение защиты параметров конфигурации не планируется.
В случае возникновения проблем выводится ошибка вида:
"FAIL__Для подключения выбранных СЗИ значение для параметра secure_config должен быть выставлено в {} на защищенном хранилище VAULT. Скорректируйте значение для параметра на защищенном хранилище VAULT и произведите повторный запуск скрипта по подключению СЗИ.__FAIL"
Проверка корректного значения для параметра is_tde_on на защищенном хранилище VAULT
Если планируется подключение TDE, ожидается значение on/true
. В случае, когда подключение TDE не планируется, устанавливается значение off/false.
При некорректном значении параметра выводится следующая ошибка:
"FAIL__Для подключения выбранных СЗИ значение для параметра is_tde_on должен быть выставлено в {} на защищенном хранилище VAULT. Скорректируйте значение для параметра на защищенном хранилище VAULT и произведите повторный запуск скрипта по подключению СЗИ.__FAIL"
Проверка идентичности значений pg_ident на защищенном хранилище VAULT и в локальном конфигурационном файле
В случае неидентичности значений выводится ошибка вида:
"FAIL__Для подключения выбранных СЗИ значение для параметра pg_ident на защищенном хранилище VAULT должно соответствовать значению в локальном конфигурационном файле '{}/pg_ident.conf'. Синхронизируйте значения и произведите повторный запуск скрипта по подключению СЗИ.__FAIL"
Проверка готовности защищенного хранилища VAULT к последующему подключению выбранных СЗИ посредством secret_storage_client
Утилита secret_storage_client
входит в состав дистрибутива и располагается в п апке installer/utilities/secret_storage_client_bundle/bin/
. На вход скрипты, использующие данную утилиту для проверки, ожидают корректно переданный путь к каталогу с утилитами utilities/
в переменную utility_path
в строку запуска ansible
. При отсутствии утилиты по переданному пути в лог будет выведено предупреждающее сообщение. Процесс подключения при этом не останавливается.
В случае когда по переданному пути утилита не будет найдена, выведется предупреждение:
"WARNING__По преданному пути '{}' утилита secret_storage_client не обнаружена. Проверки готовности защищенного хранилища VAULT к подключению выбранных СЗИ будет пропущена.__WARNING"
Сообщения об успешном прохождении проверок
"INFO__Список СЗИ к подключению успешно сформирован. В процессе работы скрипта будет подключено: {}.__INFO"
"INFO__Проверка плагина подключения к защищенному(ым) хранилищу(ам) VAULT завершилась успешно.__INFO"
"INFO__Проверка доступности VAULT сервера(ов) прошла успешно.__INFO"
Проверки и информационные сообщения после подключения выбранного списка СЗИ
Проверка наличия конфигурационного файла VAULT после работы утилиты setup_kms_credentials
В случае, когда файл не был найден, будет выведена ошибка:
"FAIL__Конфигурационный файл VAULT '{}' не был обнаружен. Причина может быть в некорректной работе утилиты setup_kms_credentials. Лог работы утилиты: {}__FAIL"
Проверка успешного подключения
Если после работы утилиты setup_kms_credentials
не удалось установить ни одного успешного подключения, то выводится следующее сообщение в лог:
"FAIL__Не удалось установить ни одного успешного подключения. Проверьте доступность сервера(ов) VAULT и корректность переданных параметров в пользовательском конфигурационном файле.__FAIL"
Проверка работа утилиты initprotection
Если работа утилиты initprotection
завершилась неудачей, то выводится следующее сообщение в лог:
"FAIL__В процессе инициализация механизма защиты данных возникли ошибки: '{}'.__FAIL"
Проверка состояния стенда
Если проверка состояния стенда после работы скриптов не дала ожидаемый результат, то выводятся следующие сообщения в лог:
"FAIL__В процессе работы скриптов что-то пошло не так. TDE на текущем стенде не включено. Произведите проверку параметра по включению TDE в конфигурационном файле или на сервере(ах) VAULT.__FAIL"
"FAIL__В процессе работы скриптов что-то пошло не так. Защита конфигурации на текущем стенде не включена. Произведите проверку параметра secire_config на сервере(ах) VAULT.__FAIL"
"FAIL__В процессе работы скриптов что-то пошло не так. Защита от привилегированных пользователей на текущем стенде не включена.__FAIL"