すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:SSL接続を介したApsaraDB RDS for PostgreSQLインスタンスへの接続

最終更新日:Jan 16, 2024

このトピックでは、SSL接続を介してデータベースクライアントからApsaraDB RDS for PostgreSQLインスタンスに接続する方法について説明します。 RDSインスタンスにSSL暗号化を設定した後、pgAdmin、PostgreSQL CLI、またはJava database Connectivity (JDBC) を使用して、データベースクライアントからRDSインスタンスに接続できます。

前提条件

手順

pgAdminを使用してSSL接続を介してRDSインスタンスに接続する

pgAdminは、RDSインスタンスへの接続に使用できる推奨されるPostgreSQLクライアントです。 PostgreSQL公式WebサイトからPostgreSQLソフトウェアパッケージをダウンロードしてPostgreSQLをインストールすると、pgAdmin 4が自動的にダウンロードされてインストールされます。 次のセクションでは、pgAdmin 4 V6.2.0を使用してRDSインスタンスに接続する方法の例を示します。

PostgreSQLをインストールしたくない場合は、リモート接続用のpgAdminのみをダウンロードできます。

  1. pgAdmin 4を起動します。

    説明

    新しいバージョンのpgAdminに初めてログインする場合は、保存したパスワードやその他の資格情報を保護するために使用するマスターパスワードを指定する必要があります。

  2. [サーバー] を右クリックし、[サーバーの登録] > [サーバー] を選択します。

  3. [登録-サーバー] ダイアログボックスの [全般] タブで、pgAdminがインストールされているサーバーの名前を入力します。

  4. [接続] タブをクリックし、RDSインスタンスへの接続に使用する情報を入力します。 连接信息

    パラメーター

    説明

    ホスト名 /アドレス

    RDSインスタンスへの接続に使用されるエンドポイントとポート。

    • 内部ネットワーク経由でRDSインスタンスに接続する場合は、RDSインスタンスの内部エンドポイントと内部ポートを入力します。

    • インターネット経由でRDSインスタンスに接続する場合は、RDSインスタンスのパブリックエンドポイントとパブリックポートを入力します。

    上記の情報は、RDSインスタンスの [データベース接続] ページで確認できます。

    詳細については、「ApsaraDB RDS For PostgreSQLインスタンスのエンドポイントとポート番号の表示と変更」をご参照ください。

    ポート

    ユーザー名

    RDSインスタンスへのログインに使用されるユーザー名とパスワード。

    RDSインスタンスにアカウントを作成する方法の詳細については、「ApsaraDB RDS For PostgreSQLインスタンスにデータベースとアカウントを作成する」をご参照ください。

    Password

  5. [パラメーター] タブで、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.crtApsaraDB-CA-Chain.pemに置き換えて、クラウド証明書を設定できます。

  6. [保存] をクリックします。

    入力した情報が正しい場合、次の図に示すページが表示され、RDSインスタンスへの接続が成功したことが示されます。

    重要

    postgresデータベースはデフォルトのシステムデータベースです。 postgresデータベースに対して操作を実行しないでください。

psqlを使用してSSL接続を介してRDSインスタンスに接続する

説明

この方法では、psqlを使用してSSL接続を介してRDSインスタンスに接続します。 PostgreSQLクライアントがコンピューターにインストールされていることを確認します。 詳細については、「PostgreSQLドキュメント」をご参照ください。

  1. /var/lib/pgsqlディレクトリにという名前のフォルダを作成します。postgresql

    mkdir /var/lib/pgsql/.postgresql
  2. 次のファイルをにコピーします。フォルダpostgresql:

    cp client.crt client.key ca1.crt /var/lib/pgsql/.postgresql/
    説明
    • この例では、ビジネス要件に基づいて、client.crtファイル、client.keyファイル、およびca1.crtファイルへのパスを設定する必要があります。

    • この例では、カスタム証明書が設定されています。 クラウド証明書を設定することもできます。 たとえば、ca1.crtApsaraDB-CA-Chain.pemに置き換えて、クラウド証明書を設定できます。

  3. の権限を変更します。postgresqlフォルダー。

    chown postgres:postgres /var/lib/pgsql/.postgresql/*
    chmod 600 /var/lib/pgsql/.postgresql/* 
  4. 次のコマンドを実行して、環境変数を含むファイルを開きます。

    vim /var/lib/pgsql/.bash_profile
  5. 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" 
  6. [Esc] を押して編集モードを終了します。 次に、:wqと入力してファイルを保存し、終了します。

  7. 環境変数をリロードします。

    ソース。bash_profile
  8. 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が、接続確立中に設定されたエンドポイントと一致していることを確認します。

  9. RDSインスタンスに接続します。

    psql -h <エンドポイント> -U <ユーザー名> -p <ポート番号> -d <データベース名>

    次の表に、ApsaraDB RDSコンソールから上記のパラメーターの値を取得する方法の詳細を示します。

    パラメーター

    取得する方法

    エンドポイント

    RDSインスタンスのSSL暗号化によって保護されているエンドポイント。 このエンドポイントは、[データセキュリティ] ページの [SSL暗号化] タブの [保護されたホスト] パラメーターで指定します。

    ユーザー名

    RDSインスタンスへのログインに使用されるアカウントのユーザー名。 [アカウント] ページからユーザー名を取得できます。

    ポート番号

    RDSインスタンスへの接続に使用されるポート番号。 既定のポート番号は 5432 です。 デフォルトのポート番号を変更した場合は、[データベース接続] ページから新しいポート番号を取得できます。

    データベース名

    RDSインスタンスに接続するデータベースの名前。 データベースの名前は、[データベース接続] ページから取得できます。 postgresデータベースはデフォルトのシステムデータベースです。 postgresデータベースに対して操作を実行しないでください。

JDBCを使用してSSL接続を介してRDSインスタンスに接続する

  1. 次のファイルをコンピュータにダウンロードします。

  2. 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エラー: 受信した致命的なアラート: 予期しない_メッセージ

  3. この例では、データベースクライアントはMavenを実行します。 この場合、PostgreSQLのMaven依存関係をpom.xmlファイルにインポートします。

    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>42.2.10</version>
      </dependency> 
  4. RDSインスタンスへのJDBCベースのSSL接続を確立するために使用されるコードスニペットをコンパイルします。

    説明

    この例では、カスタム証明書が設定されています。 クラウド証明書を設定することもできます。 たとえば、ca1.crtApsaraDB-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();
      }