Аспекты безопасности
Кластер Patroni имеет два интерфейса, которые необходимо защитить от несанкционированного доступа: распределённое хранилище конфигурации (DCS) и REST API Patroni.
Защита DCS
Patroni и patronictl хранят и извлекают данные из DCS.
Даже если DCS не содержит конфиденциальной информации, он позволяет изменять часть конфигурации Patroni/Postgres. Поэтому первым делом следует защитить сам DCS.
Детали защиты зависят от типа используемого DCS. Параметры аутентификации и шифрования (токены/базовая аутентификация/сертификаты клиента) для поддерживаемых типов DCS описаны в настройках .
Общая рекомендация — включить TLS для всего обмена данными с DCS.
Защита REST API
Защита REST API представляет собой более сложную задачу.
Patroni REST API используется самим Patroni во время выбора лидера, инструментом patronictl для выполнения переключений при отказе, плановых переключений, повторной инициализации, перезапуска и перезагрузки конфигурации, HAProxy или любым другим балансировщиком нагрузки для выполнения проверок работоспособности HTTP, а также, разумеется, может использоваться для мониторинга.
С точки зрения безопасности, REST API содержит безопасные (запросы GET, только извлечение информации) и небезопасные (запросы PUT, POST, PATCH и DELETE, изменяющие состояние узлов) конечные точки.
Небезопасные конечные точки могут быть защищены с помощью базовой аутентификации HTTP путём установки параметров restapi.authentication.username и restapi.authentication.password. Невозможно защитить безопасные конечные точки без включения TLS.
Когда для REST API включён TLS и развёрнута инфраструктура PKI, возможна взаимная аутентификация сервера API и клиента API для всех конечных точек.
Параметры раздела restapi включают аутентификацию клиента на сервере по TLS. В зависимости от значения параметра verify_client сервер API требует успешной проверки сертификата клиента для безопасных и небезопасных вызовов API (verify_client: required), только для небезопасных вызовов API (verify_client: optional) либо не требует её ни для каких вызовов API (verify_client: none).
Параметры раздела ctl позволяют клиенту выполнять TLS-аутентификацию сервера (инструмент patronictl
, использующий тот же конфигурационный файл, что и Patroni). Установите insecure: true для отключения проверки сертификата сервера клиентом. Подробное описание параметров TLS клиента см. в настройках
.
Защита базы данных PostgreSQL от несанкционированного доступа выходит за рамки настоящего документа и рассматривается в https://www.postgresql.org/docs/current/client-authentication.html