Аспекты безопасности
Кластер Patroni имеет два интерфейса, которые необходимо защитить от несанкционированного доступа: хранилище распределённой конфигурации (DCS) и REST API Patroni (REST) (API).
Защита 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.
Когда TLS для REST API включён и установлено соединение 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