新しい SSL/TLS 証明書を使用して PostgreSQL DB インスタンスに接続するようにアプリケーションを更新する - Amazon Relational Database Service

新しい SSL/TLS 証明書を使用して PostgreSQL DB インスタンスに接続するようにアプリケーションを更新する

Secure Socket Layer または Transport Layer Security (SSL/TLS) に使用される証明書には、通常、設定されたライフタイムがあります。サービスプロバイダーが認証局 (CA) 証明書を更新する際、クライアントでは、新しい証明書を使用するようにアプリケーションを更新する必要があります。以下で、クライアントアプリケーションが SSL/TLS を使用して、Amazon RDS for PostgreSQL DB インスタンスに接続されているかどうかの判別方法についての情報を参照できます。また、これらのアプリケーションが接続時にサーバーの証明書を検証しているかどうかを、確認する方法についても説明します。

注記

SSL/TLS 接続の前にサーバー証明書を検証するように構成されたクライアントアプリケーションでは、クライアントのトラストストアに有効な CA 証明書を持つ必要があります。新しい証明書が必要となった場合は、クライアントトラストストアも更新を行います。

クライアントアプリケーションの信頼ストアで CA 証明書を更新した後、DB インスタンスで証明書をローテーションできます。これらの手順は、非本番環境でテストしてから、本番環境で実装することを強くお勧めします。

証明書のローテーションの詳細については、「SSL/TLS 証明書のローテーション」を参照してください。証明書のダウンロードの詳細については、SSL/TLS を使用した DB インスタンスまたはクラスターへの接続の暗号化 を参照してください。PostgreSQL DB インスタンスで SSL/TLS を使用する方法については、「PostgreSQL DB インスタンスで SSL を使用する」を参照してください。

アプリケーションが SSL を使用して PostgreSQL DB インスタンスに接続しているかどうかの確認

DB インスタンスの設定で rds.force_ssl パラメータの値を確認します。デフォルトでは、バージョン 15 より前のバージョンの PostgreSQL を使用する DB インスタンスの rds.force_ssl パラメータは 0 (オフ) に設定されています。デフォルトでは、rds.force_ssl は、PostgreSQL バージョン 15 以降のメジャーバージョンを使用する DB インスタンスでは1 (オン) に設定されています。rds.force_ssl パラメータが 1 (オン) に設定されている場合、クライアントは接続に SSL/TLS を使用する必要があります。パラメータグループの詳細については、「Amazon RDS のパラメータグループ」を参照してください。

RDS PostgreSQL バージョン 9.5 以降のメジャーバージョンを使用していて、rds.force_ssl1 (オン) に設定されていない場合、pg_stat_ssl ビューに対してクエリを実行して SSL を使用している接続をチェックします。例えば次のクエリは、SSL 接続、および SSL を使用するクライアントに関する情報のみを返します。

SELECT datname, usename, ssl, client_addr FROM pg_stat_ssl INNER JOIN pg_stat_activity ON pg_stat_ssl.pid = pg_stat_activity.pid WHERE ssl is true and usename<>'rdsadmin';

SSL/TLS 接続を使用する行のみが、接続に関する情報とともに表示されます。以下は出力例です。

datname | usename | ssl | client_addr ----------+---------+-----+------------- benchdb | pgadmin | t | 53.95.6.13 postgres | pgadmin | t | 53.95.6.13 (2 rows)

このクエリでは、クエリ実行時点の接続のみが表示されます。結果が表示されなくても、SSL 接続を使用しているアプリケーションが存在しないわけではありません。それ以降に別の SSL 接続が確立される場合もあります。

クライアントが接続するために証明書の検証を必要とするかどうかの確認

psql や JDBC など、クライアントに SSL サポートが設定されている場合、クライアントは初期にデフォルトで SSL を使用してデータベースへの接続を試みます。クライアントが SSL を使用して接続できない場合、SSL を使用しない接続に戻ります。libpq ベースのクライアント (psql など) と JDBC の両方で使用されるデフォルトの sslmode モードは、prefer に設定されています。サーバー上の証明書が検証されるのは、sslmodeverify-ca または verify-full に設定されて、sslrootcert が指定されている場合のみです。証明書が無効な場合は、エラーがスローされます。

PGSSLROOTCERT を使用して、PGSSLMODE 環境変数で証明書を検証します (PGSSLMODEverify-ca または verify-full に設定)。

PGSSLMODE=verify-full PGSSLROOTCERT=/fullpath/ssl-cert.pem psql -h pgdbidentifier.cxxxxxxxx.us-east-2.rds.amazonaws.com -U masteruser -d postgres

sslrootcert 引数を使用して、接続文字列形式で sslmode を使用して証明書を検証します (証明書を検証するには、sslmodeverify-ca または verify-full に設定します)。

psql "host=pgdbidentifier.cxxxxxxxx.us-east-2.rds.amazonaws.com sslmode=verify-full sslrootcert=/full/path/ssl-cert.pem user=masteruser dbname=postgres"

例えば前述の例の場合、無効なルート証明書を使用していると、クライアントで次のようなエラーが表示されます。

psql: SSL error: certificate verify failed

アプリケーション信頼ストアの更新

PostgreSQL アプリケーション信頼ストアの更新については、PostgreSQL ドキュメントの「Secure TCP/IP Connections with SSL」を参照してください。

ルート証明書のダウンロードについては、SSL/TLS を使用した DB インスタンスまたはクラスターへの接続の暗号化 を参照してください。

証明書をインポートするサンプルスクリプトについては、証明書を信頼ストアにインポートするためのサンプルスクリプト を参照してください。

注記

信頼ストアを更新するとき、新しい証明書を追加できるだけでなく、古い証明書を保持できます。

各種アプリケーションでの SSL/TLS 接続の使用

以下に、各種アプリケーションでの SSL/TLS 接続の使用に関する情報を示します。

  • psql

    接続文字列または環境可変としてオプションを指定することで、クライアントがコマンドラインから呼び出されます。SSL/TLS 接続の場合、関連するオプションは sslmode (環境可変 PGSSLMODE)、sslrootcert (環境可変 PGSSLROOTCERT) です。

    オプションの詳細なリストについては、PostgreSQL ドキュメントの「Parameter Key Words」を参照してください。環境可変の詳細なリストについては、PostgreSQL ドキュメントの「Environment Variables」を参照してください。

  • pgAdmin

    このブラウザベースのクライアントは、PostgreSQL データベースに接続するために使用できる使いやすいインターフェイスです。

    接続の設定については、pgAdmin のドキュメントを参照してください。

  • JDBC

    JDBC は、Java アプリケーションとのデータベース接続を可能にします。

    JDBC を使用した PostgreSQL データベースへの接続に関する一般情報については、PostgreSQL JDBC ドライバードキュメントの「データベースへの接続」を参照してください。SSL/TLS を使用した接続については、PostgreSQL JDBC ドライバードキュメントの「クライアントの設定」を参照してください。

  • Python

    PostgreSQL データベースに接続するために一般的に使用される Python ライブラリは、psycopg2 です。

    psycopg2 の使用については、psycopg2 のドキュメントを参照してください。PostgreSQL データベースへの接続方法に関する簡単なチュートリアルについては、「Psycopg2 Tutorial」を参照してください。connect コマンドで受け入れられるオプションについては、「The psycopg2 module content」を参照してください。

重要

データベース接続で SSL/TLS を使用することを決定し、アプリケーションの信頼ストアを更新したら、rds-ca-rsa2048-g1 証明書を使用するようにデータベースを更新できます。ステップについては、「DB インスタンスまたはクラスターの変更による CA 証明書の更新」のステップ 3 を参照してください。