このトピックでは、SSL接続を介してデータベースクライアントからApsaraDB RDS for PostgreSQLインスタンスに接続する方法について説明します。 RDSインスタンスにSSL暗号化を設定した後、pgAdmin、PostgreSQL CLI、またはJava database Connectivity (JDBC) を使用して、データベースクライアントからRDSインスタンスに接続できます。
前提条件
RDSインスタンスのSSL暗号化が有効になっています。 SSL暗号化を有効にする方法の詳細については、「ApsaraDB RDS For PostgreSQLインスタンスのSSL暗号化の設定」または「カスタム証明書の設定」をご参照ください。
次のファイルが取得されます。
クライアント証明書を含むclient.crtファイルと、クライアント証明書の秘密鍵を含むclient.keyファイル: ApsaraDB RDSコンソールでクライアント証明機関 (CA) 証明書を設定した場合、これらのファイルを取得する必要があります。 それ以外の場合、これらのファイルはオプションです。 詳細については、「ApsaraDB RDS For PostgreSQLインスタンスでのクライアントCA証明書の設定」をご参照ください。
サーバーCA証明書を含むファイル: このファイルの取得方法の詳細については、「ApsaraDB RDS For PostgreSQLインスタンスのSSL暗号化の設定」または「ApsaraDB RDS for PostgreSQLインスタンスのカスタム証明書の設定」をご参照ください。
手順
pgAdminを使用してSSL接続を介してRDSインスタンスに接続する
pgAdminは、RDSインスタンスへの接続に使用できる推奨されるPostgreSQLクライアントです。 PostgreSQL公式WebサイトからPostgreSQLソフトウェアパッケージをダウンロードしてPostgreSQLをインストールすると、pgAdmin 4が自動的にダウンロードされてインストールされます。 次のセクションでは、pgAdmin 4 V6.2.0
を使用してRDSインスタンスに接続する方法の例を示します。
PostgreSQLをインストールしたくない場合は、リモート接続用のpgAdminのみをダウンロードできます。
pgAdmin 4を起動します。
説明新しいバージョンのpgAdminに初めてログインする場合は、保存したパスワードやその他の資格情報を保護するために使用するマスターパスワードを指定する必要があります。
[サーバー] を右クリックし、
を選択します。[登録-サーバー] ダイアログボックスの [全般] タブで、pgAdminがインストールされているサーバーの名前を入力します。
[接続] タブをクリックし、RDSインスタンスへの接続に使用する情報を入力します。
パラメーター
説明
ホスト名 /アドレス
RDSインスタンスへの接続に使用されるエンドポイントとポート。
内部ネットワーク経由でRDSインスタンスに接続する場合は、RDSインスタンスの内部エンドポイントと内部ポートを入力します。
インターネット経由でRDSインスタンスに接続する場合は、RDSインスタンスのパブリックエンドポイントとパブリックポートを入力します。
上記の情報は、RDSインスタンスの [データベース接続] ページで確認できます。
詳細については、「ApsaraDB RDS For PostgreSQLインスタンスのエンドポイントとポート番号の表示と変更」をご参照ください。
ポート
ユーザー名
RDSインスタンスへのログインに使用されるユーザー名とパスワード。
RDSインスタンスにアカウントを作成する方法の詳細については、「ApsaraDB RDS For PostgreSQLインスタンスにデータベースとアカウントを作成する」をご参照ください。
Password
[パラメーター] タブで、SSL認証モードと証明書に関連する必要なパラメーターを設定します。
パラメーター
説明
SSLモード
RDSインスタンスに対してSSL暗号化が有効になっている場合、RDSインスタンスはデータベースクライアントからのSSL接続を許可します。 次のシナリオに基づいてSSL modeパラメーターを設定する必要があります。
RDSインスタンスにアクセス制御リスト (ACL) は設定されていません。 詳細については、「ApsaraDB RDS For PostgreSQLインスタンスでのクライアントCA証明書の設定」をご参照ください。
SSL接続を介してデータベースクライアントからRDSインスタンスに接続する場合は、SSL modeパラメーターを [Require] 、[Verify-CA] 、または [Verify-Full] に設定します。
SSL接続を介してデータベースクライアントからRDSインスタンスに接続しない場合は、SSL modeパラメーターを無効に設定します。
ACLはRDSインスタンスに設定されています。 この場合、データベースクライアントからRDSインスタンスに接続できるのはSSL接続のみです。 SSL modeパラメーターを [Require] 、[Verify-CA] 、または [Verify-Full] に設定します。 詳細については、「ApsaraDB RDS For PostgreSQLインスタンスでのクライアントCA証明書の設定」をご参照ください。
SSL modeパラメーターの値を次に示します。
要求: データベースクライアントは、データの送信に使用されるSSL接続を暗号化します。 ただし、データベースクライアントはRDSインスタンスを検証しません。
Verify-CA: データベースクライアントは、データの送信に使用されるSSL接続を暗号化し、RDSインスタンスを検証します。
Verify-Full: データベースクライアントは、データの送信に使用されるSSL接続を暗号化し、RDSインスタンスを検証し、サーバー証明書で指定されたCNまたはドメインネームシステム (DNS) が、接続確立時に設定されたエンドポイントと一致していることを確認します。
クライアント証明書
クライアント証明書を設定した場合は、このパラメーターを設定する必要があります。 このパラメーターには、クライアント証明書を含むclient.crtファイルの保存パスを指定します。 詳細については、「ApsaraDB RDS For PostgreSQLインスタンスでのクライアントCA証明書の設定」をご参照ください。
クライアント証明書キー
クライアント証明書を設定した場合は、このパラメーターを設定する必要があります。 このパラメーターには、クライアント証明書の秘密鍵を含むclient.keyファイルの保存パスを指定します。 詳細については、「ApsaraDB RDS For PostgreSQLインスタンスでのクライアントCA証明書の設定」をご参照ください。
ルート証明書
SSL modeパラメーターをVerify-CAまたはVerify-Fullに設定した場合、このパラメーターを設定する必要があります。 このパラメーターには、サーバーCA証明書を含むファイルの保存パスを指定します。
説明この例では、ビジネス要件に基づいて、client.crtファイル、client.keyファイル、およびca1.crtファイルへのパスを設定する必要があります。
この例では、カスタム証明書が設定されています。 クラウド証明書を設定することもできます。 たとえば、
ca1.crt
をApsaraDB-CA-Chain.pem
に置き換えて、クラウド証明書を設定できます。
[保存] をクリックします。
入力した情報が正しい場合、次の図に示すページが表示され、RDSインスタンスへの接続が成功したことが示されます。
重要postgresデータベースはデフォルトのシステムデータベースです。 postgresデータベースに対して操作を実行しないでください。
psqlを使用してSSL接続を介してRDSインスタンスに接続する
この方法では、psqlを使用してSSL接続を介してRDSインスタンスに接続します。 PostgreSQLクライアントがコンピューターにインストールされていることを確認します。 詳細については、「PostgreSQLドキュメント」をご参照ください。
/var/lib/pgsqlディレクトリにという名前のフォルダを作成します。postgresql
mkdir /var/lib/pgsql/.postgresql
次のファイルをにコピーします。フォルダpostgresql:
client.crtおよびclient.key: ApsaraDB RDSコンソールでクライアントCA証明書を設定した場合、これらのファイルを取得する必要があります。 それ以外の場合、これらのファイルはオプションです。 詳細については、「ApsaraDB RDS For PostgreSQLインスタンスでのクライアントCA証明書の設定」をご参照ください。
ca1.crt: このファイルの取得方法の詳細については、「ApsaraDB RDS For PostgreSQLインスタンスのSSL暗号化の設定」または「ApsaraDB RDS for PostgreSQLインスタンスのカスタム証明書の設定」をご参照ください。
cp client.crt client.key ca1.crt /var/lib/pgsql/.postgresql/
説明この例では、ビジネス要件に基づいて、client.crtファイル、client.keyファイル、およびca1.crtファイルへのパスを設定する必要があります。
この例では、カスタム証明書が設定されています。 クラウド証明書を設定することもできます。 たとえば、
ca1.crt
をApsaraDB-CA-Chain.pem
に置き換えて、クラウド証明書を設定できます。
の権限を変更します。postgresqlフォルダー。
chown postgres:postgres /var/lib/pgsql/.postgresql/* chmod 600 /var/lib/pgsql/.postgresql/*
次のコマンドを実行して、環境変数を含むファイルを開きます。
vim /var/lib/pgsql/.bash_profile
i
を入力して編集モードを有効にします。 次に、次のコンテンツをファイルに追加します。export PGSSLCERT="/var/lib/pgsql/.postgresql/client.crt" export PGSSLKEY="/var/lib/pgsql/.postgresql/client.key" export PGSSLROOTCERT="/var/lib/pgsql/.postgresql/ca1.crt"
[Esc]
を押して編集モードを終了します。 次に、:wq
と入力してファイルを保存し、終了します。環境変数をリロードします。
ソース。bash_profile
RDSインスタンスの検証にデータベースクライアントが使用する方法を指定します。
エクスポートPGSSLMODE="verify-full"
RDSインスタンスに対してSSL暗号化が有効になっている場合、RDSインスタンスはデータベースクライアントからのSSL接続を許可します。 ビジネス要件に基づいてPGSSLMODEパラメーターを設定する必要があります。
ACL設定済み
SSL接続が必要
PGSSLMODE値
任意
必須
require、verify-ca、またはverify-full
任意
disable
必須
データベースクライアントは、SSL接続を介してのみRDSインスタンスに接続できます。
require、verify-ca、またはverify-full
説明次に、PGSSLMODEパラメーターの値を示します。
require: データベースクライアントは、データの送信に使用されるSSL接続を暗号化します。 ただし、データベースクライアントはRDSインスタンスを検証しません。
verify-ca: データベースクライアントは、データの送信に使用されるSSL接続を暗号化し、RDSインスタンスを検証します。
verify-full: データベースクライアントは、データの送信に使用されるSSL接続を暗号化し、RDSインスタンスを検証し、サーバー証明書で指定されたCNまたはDNSが、接続確立中に設定されたエンドポイントと一致していることを確認します。
RDSインスタンスに接続します。
psql -h <エンドポイント> -U <ユーザー名> -p <ポート番号> -d <データベース名>
次の表に、ApsaraDB RDSコンソールから上記のパラメーターの値を取得する方法の詳細を示します。
パラメーター
取得する方法
エンドポイント
RDSインスタンスのSSL暗号化によって保護されているエンドポイント。 このエンドポイントは、[データセキュリティ] ページの [SSL暗号化] タブの [保護されたホスト] パラメーターで指定します。
ユーザー名
RDSインスタンスへのログインに使用されるアカウントのユーザー名。 [アカウント] ページからユーザー名を取得できます。
ポート番号
RDSインスタンスへの接続に使用されるポート番号。 既定のポート番号は 5432 です。 デフォルトのポート番号を変更した場合は、[データベース接続] ページから新しいポート番号を取得できます。
データベース名
RDSインスタンスに接続するデータベースの名前。 データベースの名前は、[データベース接続] ページから取得できます。 postgresデータベースはデフォルトのシステムデータベースです。 postgresデータベースに対して操作を実行しないでください。
JDBCを使用してSSL接続を介してRDSインスタンスに接続する
次のファイルをコンピュータにダウンロードします。
client.crtおよびclient.key: ApsaraDB RDSコンソールでクライアントCA証明書を設定した場合、これらのファイルを取得する必要があります。 それ以外の場合、これらのファイルはオプションです。 詳細については、「ApsaraDB RDS For PostgreSQLインスタンスでのクライアントCA証明書の設定」をご参照ください。
ca1.crt: このファイルの取得方法の詳細については、「ApsaraDB RDS For PostgreSQLインスタンスのSSL暗号化の設定」または「ApsaraDB RDS for PostgreSQLインスタンスのカスタム証明書の設定」をご参照ください。
client.keyファイルをPK8形式に変換します。
openssl pkcs8 -topk8 -inform PEM -in client.key -outform der -out client.pk8 -v1 PBE-MD5-DES # RDSインスタンスへの接続に使用されるパスワードを入力します。 暗号化パスワードを入力: 確認-暗号化パスワードを入力します。
警告client.keyファイルをPK8形式に変換するには、アプリケーションが存在するホストでopensslコマンドを実行する必要があります。 アプリケーションが存在するホストでコマンドを実行しない場合、次のエラーメッセージが表示されることがあります。
org.postgresql.util.PSQLException: SSLキーファイルC:/Users/XXX/XXX/client.pk8
org.postgresql.util.PSQLException: SSLエラー: 受信した致命的なアラート: 予期しない_メッセージ
この例では、データベースクライアントはMavenを実行します。 この場合、PostgreSQLのMaven依存関係をpom.xmlファイルにインポートします。
<dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.2.10</version> </dependency>
RDSインスタンスへのJDBCベースのSSL接続を確立するために使用されるコードスニペットをコンパイルします。
説明この例では、カスタム証明書が設定されています。 クラウド証明書を設定することもできます。 たとえば、
ca1.crt
をApsaraDB-CA-Chain.pem
に置き換えて、クラウド証明書を設定できます。// RDSインスタンスへの接続に使用されるエンドポイントを指定します。 文字列hostname = "pgm-bpxxxxx.pg.rds.aliyuncs.com"; // RDSインスタンスへの接続に使用されるポート番号を指定します。 String port = "5432"; // RDSインスタンスで接続するデータベースの名前を指定します。 文字列dbname = "postgres"; 文字列jdbcUrl = "jdbc:postgresql://" + hostname + ":" + port + "/" + dbname + "?binaryTransfer=true"; Properties properties = new Properties(); // RDSインスタンスの指定されたデータベースに接続するために使用されるユーザー名を指定します。 properties.setProperty("user", "username"); // RDSインスタンス上の指定されたデータベースに接続するために使用されるパスワードを指定します。 properties.setProperty("password", "*****"); // クライアント証明書を含むファイルの保存パスを指定します。 文字列パス="D :\\ ssl\\"; // SSL暗号化を設定します。 properties.setProperty("ssl", "true"); // CAの公開鍵を指定します。 properties.setProperty("sslrootcert", path + "/" + "ca1.crt"); // クライアント証明書の秘密鍵を指定します。 properties.setProperty("sslkey", path + "/" + "client.pk8"); // クライアント証明書を指定します。 properties.setProperty("sslcert", path + "/" + "client.crt"); // client.keyファイルをPK8形式に変換したときに指定したパスワードを入力します。 properties.setProperty("sslpassword", "*****"); // SSLモードを指定します。 有効な値: require、verify-ca、およびverify-full。 properties.setProperty("sslmode", "verify-ca"); try { Class.forName("org.postgresql.Driver"); 接続接続=DriverManager.getConnection(jdbcUrl、プロパティ); // この例では、postgresデータベースには、データの照会元となるexampleという名前のテーブルが含まれています。 PreparedStatement preparedStatement = connection.prepareStatement("select * from" + "example"); ResultSet resultSet = preparedStatement.exe cuteQuery(); while (resultSet.next()) { ResultSetMetaData rsmd = resultSet.getMetaData(); int columnCount = rsmd.getColumnCount(); マップマップ=新しいHashMap(); for (int i = 0; i < columnCount; i ++) { map.put(rsmd.getColumnName(i + 1).toLowerCase(), resultSet.getObject(i + 1)); } System.out.println (マップ); } } catch (例外) { exception.printStackTrace(); }