# Аспекты безопасности

> Вопросы безопасности для DCS, REST API и обработка учетных данных.

---

Индекс LLMS: [llms.txt](/ru/llms.txt)

---

<a id="security"></a>
Кластер Patroni имеет два интерфейса, которые необходимо защитить от несанкционированного доступа: хранилище распределённой конфигурации (DCS) и REST API Patroni (REST) (API).

--------

## Защита DCS {#protecting-dcs}

Patroni и [patronictl](/ru/patroni/patronictl#patronictl) хранят и извлекают данные из DCS.

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

Детали защиты зависят от типа DCS, используемого в системе. Параметры аутентификации и шифрования (токены/базовая аутентификация/сертификаты клиента) для поддерживаемых типов DCS описаны в [настройки](/ru/patroni/config/yaml#yaml).

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

--------

## Защита REST API {#protecting-the-rest-api}

Защита REST API представляет собой более сложную задачу.

Patroni REST API используется самим Patroni во время выбора лидера, инструментом [patronictl](/ru/patroni/patronictl#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](/ru/patroni/patronictl#patronictl), использующий тот же конфигурационный файл, что и Patroni). Установите `insecure: true` для отключения проверки сертификата сервера клиентом. Подробное описание параметров TLS клиента см. в [настройках](/ru/patroni/config/yaml#patronictl_settings).

Защита базы данных PostgreSQL от несанкционированного доступа выходит за рамки настоящего документа и рассматривается в <https://www.postgresql.org/docs/current/client-authentication.html>
