Amazon RDS/Aurora PostgreSQL で外部データラッパーと SSL verify-full を使用しているときのルート証明書ファイルエラーを解決する方法を教えてください。

所要時間1分
0

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 証明書をインストールすることはできません。 しかし、必要なルート証明書は 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');

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

注: PostgreSQL は、パスワードをクリアテキストでログファイルに記録します。これを防ぐには、「Amazon RDS for PostgreSQL がパスワードをクリアテキストでログファイルにログ記録しないようにするにはどうすればよいですか?」を参照してください。

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 接続が正常であれば、外部テーブルからデータが返されます。


関連情報

Common management tasks for PostgreSQL on Amazon RDS (Amazon RDS での PostgreSQL の一般的な管理タスク)

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

AWS公式
AWS公式更新しました 2年前
コメントはありません

関連するコンテンツ