セキュリティに関する考慮事項
Patroniクラスターには、不正アクセスから保護される2つのインターフェイスがあります。分散構成ストレージDCSとPatroni REST APIです。
DCSの保護
Patroniと patronicl は両方とも、DCSにデータを保存および取得します。
DCSには機密情報が含まれていませんが、Patroni / Postgres構成の一部を変更できます。したがって、最初に保護する必要があるのはDCS自分自身です。
保護の詳細は、使用されるDCSの種類によって異なります。サポートされているタイプのDCSの認証および暗号化パラメータートークン/basic-auth/クライアント証明書は、 settings でカバーされています。
一般的な推奨事項は、すべてのDCS通信でTLSを有効にすることです。
REST APIの保護
REST APIの保護は、より複雑なタスクです。
Patroni REST APIは、リーダーレース中にPatroni自分自身によって使用され、フェイルオーバー/スイッチオーバー/再初期化/リスタート/リロードを実行するために patronicl ツールによって使用され、HAProxyまたはその他の種類のロードバランサーによってHTTPヘルスチェックを実行し、そしてもちろんモニタリングにも使用できます。
セキュリティの観点から、REST APIには、安全な GET 要求、情報の取得のみ と安全でない PUT 、 POST 、 PATCH および DELETE 要求、ノードの状態を変更する エンドポイントが含まれています。
restapi.authentication.username および restapi.authentication.password パラメーターを設定することにより、安全でないエンドポイントをHTTPベーシック認証で保護できます。 TLSを有効にすることなく安全なエンドポイントを保護する方法はありません。
REST APIのTLSが有効になり、PKIが確立されると、すべてのエンドポイントでAPIサーバーとAPIクライアントの相互認証が可能です。
restapi セクションパラメーターは、サーバーへのTLSクライアント認証を有効にします。 verify_client パラメーターの値に応じて、APIサーバーは、安全なAPI呼び出しと安全でないAPI呼び出しの両方 verify_client: required 、安全でないAPI呼び出しのみ verify_client: optional 、またはAPI呼び出しなし verify_client: none の場合、クライアント証明書の検証が成功する必要があります。
ctl セクションパラメーターは、クライアントへのTLSサーバー認証を有効にしますpatroniと同じ構成を使用する ctl ツール。 insecure: true を設定して、クライアントによるサーバー証明書の検証を無効にします。 TLSクライアントパラメータの詳細については、 ctl を参照してください。
PostgreSQLデータベースを不正アクセスから保護することは、このドキュメントの範囲を超えており、 https://www.postgresql.org/docs/current/client-authentication.htmlでカバーされています。