PostgreSQL を実行中の Amazon RDS で、外部データラッパーと SSL verify-full を使用する時に発生するルート証明書ファイルエラーを解決する方法を教えてください。

最終更新日: 2019 年 9 月 16 日

PostgreSQL を実行中の Amazon Relational Database Service (Amazon RDS) で、外部データラッパー (FDW) および verify-full に設定された sslmode を使用しています。DB インスタンスのために FDW サーバーを作成しようとすると「root certificate file "/home/rdsdb/.postgresql/root.crt" does not exist」というエラーが発生します。

簡単な説明

PostgreSQL で証明書認証を有効にするには、sslmodeverify-full に設定する必要があります。しかし、ある Amazon RDS インスタンスから別のインスタンスに FDW サーバーを作成する時に、sslmodeverify-full に設定 されていると、ルート証明書ファイルのエラーが発生します。このエラーは、CREATE SERVER コマンドを実行している DB インスタンスで生成されます。Amazon RDS インスタンスのファイルシステムには、直接アクセスすることやCA 証明書をインストールすることはできません。 しかし、必要なルート証明書は RDS DB インスタンスに既にインストールされています。この証明書の場所を確認するには、次のコマンドを実行します。

postgres=> show ssl_cert_file;
ssl_cert_file
-----------------------------------------
/rdsdbdata/rds-metadata/server-cert.pem
(1 row)

このエラーを解決するには、サーバーを作成する際、/rdsdbdata/rds-metadata/server-cert.pem ファイルを FDW 接続で指定します。

解決方法

FDW 接続でルート証明書ファイルを指定するには、次のようなコマンドを実行します。

CREATE SERVER my_foreign_db 
foreign data wrapper postgres_fdw 
options (host 'my_db.xyz.eu-west-1.rds.amazonaws.com', port '5432', dbname 'my_db', sslmode 'verify-full', sslrootcert '/rdsdbdata/rds-metadata/server-cert.pem');

注意 : Aurora PostgreSQL の場合は、 sslrootcert'/rdsdbdata/rds-metadata/root-cert.pem' の代わりに sslrootcert'/rds-metadata/server-cert.pem'を使用します。

接続が機能していることを確認するには、ユーザーマッピングと外部テーブルを作成します。

CREATE USER MAPPING FOR dbuser SERVER my_foreign_db OPTIONS (user 'dbuser', password 'dbpasswd');

CREATE FOREIGN TABLE foreign_table ( id integer not null, name character(84)) SERVER my_foreign_db OPTIONS (schema_name 'public', table_name 'my_table');

このテーブルがアクセスされるまでは、接続は行われません。この接続が機能していることを確認するには、テーブルにクエリを送ります、

SELECT * from foreign_table ;

FDW 接続が正常であれば、外部テーブルからデータが返されます。


Amazon RDS での PostgreSQL の一般的な管理タスク

postgres_fdw に関する PostgreSQL のドキュメント

この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合