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

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

DCSの保護

Patroniと Patroni は両方とも、DCSとの間でデータを保存および取得します。

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

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

一般に、すべてのDCS通信に対してTLSを有効にすることが推奨されます。

RESTAPIの保護

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

PatroniRESTAPIは、リーダーレース中にPatroni自体によって使用され、フェイルオーバー/スイッチオーバー/再初期化/再起動/リロードを実行するために Patroni ツールによって使用され、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 セクションのパラメーターは、クライアント(patroniと同じ構成を使用する ctl ツール)に対するTLSサーバー認証を有効にします。 insecure: true を設定して、クライアントによるサーバー証明書の検証を無効にします。TLSクライアントパラメータの詳細については、 ctl を参照してください。

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