Перейти к основному содержимому

Вопросы безопасности

примечание

Эта страница переведена при помощи нейросети GigaChat.

Кластер Patroni имеет два интерфейса, которые необходимо защищать от несанкционированного доступа: распределенное хранилище конфигураций (DCS) и REST API Patroni.

Защита DCS

Patroni и patronictl оба хранят и извлекают данные из/в DCS.

Несмотря на то, что DCS не содержит конфиденциальной информации, он позволяет изменять некоторые настройки конфигурации Patroni/Postgres. Поэтому самое первое, что должно быть защищено — это сам DCS.

Детали защиты зависят от типа используемого DCS. Параметры аутентификации и шифрования (токены/basic-auth/клиентские сертификаты) для поддерживаемых типов DCS рассмотрены в разделе настройки.

Общая рекомендация — включить TLS для всего взаимодействия с DCS.

Защита REST API

Защита REST API — более сложная задача.

REST API Patroni используется самим Patroni во время выборов лидера, инструментом patronictl для выполнения failover/switchovers/reinitialize/restarts/reloads, HAProxy или любым другим балансировщиком нагрузки для выполнения HTTP-проверок здоровья, и, конечно, также может использоваться для мониторинга.

С точки зрения безопасности, REST API содержит безопасные (запросы GET, только извлекают информацию) и небезопасные (запросы PUT, POST, PATCH и DELETE, изменяют состояние узлов) конечные точки.

Небезопасные конечные точки могут быть защищены с помощью HTTP basic-auth путем установки параметров 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 от несанкционированного доступа выходит за рамки данного документа и рассмотрена в документации аутентификации клиентов PostgreSQL.