Considérations de sécurité
Un cluster Patroni dispose de deux interfaces à protéger contre l’accès non autorisé : le stockage de configuration distribué (DCS) et l’API REST Patroni.
Protection du SCD
Patroni et patronictl stockent et récupèrent des données auprès du DCS.
Bien que le DCS ne contienne aucune information sensible, il permet de modifier certaines configurations de Patroni/PostgreSQL. Par conséquent, la première mesure à prendre est de protéger le DCS lui-même.
Les détails de protection dépendent du type de DCS utilisé. Les paramètres d’authentification et de chiffrement (jouets/authentification basique/certificats clients) pris en charge pour les types de DCS sont décrits dans settings .
La recommandation générale consiste à activer TLS pour toutes les communications DCS.
Protection de l’API REST
Protéger l’API REST est une tâche plus complexe.
L’API REST de Patroni est utilisée par Patroni lui-même lors de la course au leader, par l’outil patronictl afin d’effectuer des basculements, des basculements planifiés, des réinitialisations, des redémarrages ou des rechargements, par HAProxy ou tout autre équilibreur de charge pour effectuer des vérifications de santé HTTP, et bien sûr également pour la surveillance.
Du point de vue de la sécurité, l’API REST contient des points d’accès sécurisés (GET, uniquement des requêtes de récupération d’informations) et des points d’accès non sécurisés (PUT, POST, PATCH et DELETE, qui modifient l’état des nœuds).
Les points d’accès non sécurisés peuvent être protégés par une authentification HTTP basique en définissant les paramètres restapi.authentication.username et restapi.authentication.password. Il n’existe aucun moyen de protéger les points d’accès sécurisés sans activer le TLS.
Lorsque le TLS pour l’API REST est activé et qu’une PKI est configurée, l’authentification mutuelle entre le serveur API et le client API est possible pour tous les points d’accès.
Les paramètres de la section restapi permettent l’authentification client TLS auprès du serveur. Selon la valeur du paramètre verify_client, le serveur API exige une vérification réussie du certificat client pour les appels d’API sécurisés et non sécurisés (verify_client: required), uniquement pour les appels d’API non sécurisés (verify_client: optional), ou pour aucun appel d’API (verify_client: none).
Les paramètres de la section ctl permettent l’authentification TLS du serveur auprès du client (l’outil patronictl
, qui utilise la même configuration que Patroni). Définissez insecure: true pour désactiver la vérification du certificat serveur par le client. Consultez settings
pour une description détaillée des paramètres TLS client.
Protéger la base de données PostgreSQL contre l’accès non autorisé est hors du champ de ce document et est traité dans https://www.postgresql.org/docs/current/client-authentication.html