セキュリティに関する考慮事項

Patroniクラスターには、不正アクセスから保護する2つのインターフェイスがあります。分散構成ストレージ(DCS)とPatroniRESTAPIです。

DCSの保護

PatroniとパトロニctlはどちらもDCSとの間でデータを保存および取得します。

DCSには機密情報が含まれていませんが、Patroni/Postgres構成の一部を変更できます。したがって、最初に保護する必要があるのはDCS自分自身です。

保護の詳細は、使用されるDCSの種類によって異なります。サポートされているタイプのDCSの認証および暗号化パラメーター(トークン/基本認証/クライアント証明書)は、 settings でカバーされています。

一般的な推奨事項は、すべてのDCS通信でTLSを有効にすることです。

RESTAPIの保護

RESTAPIの保護は、より複雑なタスクです。

PatroniRESTAPIは、リーダーレース中にPatroni自分自身、フェイルオーバー/スイッチオーバー/再初期化/リスタート/リロードを実行するために patronictl ツール、HTTPヘルスチェックを実行するためにHAProxyまたは他の種類のロードバランサー、そしてもちろんモニタリングにも使えます。

セキュリティの観点から、RESTAPIには安全な( GET リクエスト、情報を取得のみ)および安全でない( PUT 、 POST 、 PATCH および DELETE リクエスト、ノードの状態を変更する)エンドポイントが含まれています。

restapi.authentication.username および restapi.authentication.password パラメーターを設定することにより、安全でないエンドポイントをHTTP基本認証で保護できます。TLSを有効にせずに安全なエンドポイントを保護する方法はありません。

RESTAPIのTLSを有効にし、PKIを確立すると、すべてのエンドポイントでAPIサーバーとAPIクライアントの相互認証が可能になります。

restapi セクションのパラメーターは、サーバーに対するTLSクライアント認証を有効にします。 verify_client パラメーターの値に応じて、APIサーバーは、安全なAPI呼び出しと安全でないAPI呼び出しの両方( verify_client: required )、または安全でないAPI呼び出しのみ( verify_client: optional )、またはAPI呼び出しがない( verify_client: none )クライアント証明書の検証に成功する必要があります。

ctl セクションのパラメーターは、クライアントへのTLSサーバー認証を有効にします(パトローニと同じ構成を使用する patronictl ツール)。 insecure: true を設定して、クライアントによるサーバー証明書の検証を無効にします。TLSクライアントパラメーターの詳細については、 ctl を参照してください。

不正アクセスからPostgreSQLデータベースを適切に保護することはこのドキュメントの範囲を超えており、https://www.postgresql.org/docs/current/client-authentication.htmlでカバーされています。