新しい SSL/TLS 証明書を使用して Aurora PostgreSQL DB クラスターに接続するようにアプリケーションを更新する
2023 年 1 月 13 日に Amazon RDS は、Secure Socket Layer または Transport Layer Security(SSL/TLS)を使用して Aurora DB クラスターに接続するための新しい認証局(CA)証明書を公開しました。ここでは、新しい証明書を使用するためのアプリケーションの更新について説明します。
このトピックでは、クライアントアプリケーションが SSL/TLS を使用して DB クラスターに接続されているかどうかを判断できます。該当する場合はさらに、それらのアプリケーションの接続に証明書の検証が必要かどうかを確認できます。
注記
一部のアプリケーションは、サーバー上の証明書を正常に検証できる場合にのみ、Aurora PostgreSQL DB クラスターに接続されるように設定されています。
そのようなアプリケーションの場合は、新しい CA 証明書を含むように、クライアントアプリケーションの信頼ストアを更新する必要があります。
クライアントアプリケーションの信頼ストアで CA 証明書を更新した後、DB クラスターで証明書をローテーションできます。これらの手順を開発環境またはステージング環境でテストしてから、本番環境で実装することを強くお勧めします。
証明書のローテーションの詳細については、「SSL/TLS 証明書のローテーション」を参照してください。証明書のダウンロードの詳細については、SSL/TLS を使用した DB クラスターへの接続の暗号化 を参照してください。PostgreSQL DB クラスターで SSL/TLS を使用する方法については、「SSL/TLS での Aurora PostgreSQL データの保護」を参照してください。
トピック
アプリケーションが SSL を使用して Aurora PostgreSQL DB クラスターに接続しているかどうかの確認
DB クラスターの設定で rds.force_ssl
パラメータの値を確認します。デフォルトでは、rds.force_ssl
パラメータは 0
(オフ) に設定されます。rds.force_ssl
パラメータが 1
(オン) に設定されている場合、クライアントは接続に SSL/TLS を使用する必要があります。パラメータグループの詳細については、「Amazon Aurora のパラメータグループ」を参照してください。
rds.force_ssl
が 1
(オン)に設定されていない場合は、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 を使用しない接続に戻ります。使用されるデフォルトの sslmode
モードは、libpq ベースのクライアント (psql など) と JDBC では異なります。libpq ベースのクライアントはデフォルトで prefer
に設定されますが、JDBC クライアントは verify-full
に設定されます。サーバー上の証明書が検証されるのは、sslmode
が verify-ca
または verify-full
に設定されて、sslrootcert
が指定されている場合のみです。証明書が無効な場合は、エラーがスローされます。
PGSSLROOTCERT
を使用して、PGSSLMODE
環境変数で証明書を検証します (PGSSLMODE
は verify-ca
または verify-full
に設定)。
PGSSLMODE=verify-full PGSSLROOTCERT=/fullpath/
ssl-cert.pem
psql -h pgdbidentifier.cxxxxxxxx.us-east-2.rds.amazonaws.com -U primaryuser -d postgres
sslrootcert
引数を使用して、接続文字列形式で sslmode
を使用して証明書を検証します(sslmode
は verify-ca
または verify-full
に設定)。
psql "host=pgdbidentifier.cxxxxxxxx.us-east-2.rds.amazonaws.com sslmode=verify-full sslrootcert=/full/path/
ssl-cert.pem
user=primaryuser dbname=postgres"
たとえば前述の例の場合は、無効なルート証明書を使用すると、クライアントで次のようなエラーが表示されます。
psql: SSL error: certificate verify failed
アプリケーション信頼ストアの更新
PostgreSQL アプリケーション信頼ストアの更新については、PostgreSQL ドキュメントの「Secure TCP/IP Connections with SSL
注記
信頼ストアを更新するとき、新しい証明書を追加できるだけでなく、古い証明書を保持できます。
JDBC のアプリケーション信頼ストアの更新
SSL/TLS 接続に JDBC を使用するアプリケーションの信頼ストアを更新できます。
ルート証明書のダウンロードについては、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 ドキュメントの「Connecting to the Database
」を参照してください。SSL/TLS を使用した接続については、PostgreSQL ドキュメントの「Configuring the client 」を参照してください。 -
Python
PostgreSQL データベースに接続するために一般的に使用される Python ライブラリは、
psycopg2
です。psycopg2
の使用については、psycopg2 のドキュメントを参照してください。PostgreSQL データベースへの接続方法に関する簡単なチュートリアルについては、「Psycopg2 Tutorial 」を参照してください。connect コマンドで受け入れられるオプションについては、「The psycopg2 module content 」を参照してください。
重要
データベース接続で SSL/TLS を使用することを決定し、アプリケーションの信頼ストアを更新したら、rds-ca-rsa2048-g1 証明書を使用するようにデータベースを更新できます。ステップについては、「DB インスタンスの変更による CA 証明書の更新」のステップ 3 を参照してください。