在 Amazon RDS/Aurora PostgreSQL 上使用外部数据包装器和 SSL verify-full 时,如何解决根证书文件错误?

上次更新时间:2020 年 11 月 2 日

我在运行 PostgreSQL 的 Amazon Relational Database Service (Amazon RDS) 上使用外部数据封装器和设置为 verify-full 的 sslmode。我在尝试为数据库实例创建 FDW 服务器时收到以下错误:“root certificate file "/home/rdsdb/.postgresql/root.crt" 不存在”。如何解决此错误?

简短描述

要在 PostgreSQL 中启用证书验证,必须将 sslmode 设置为 verify-full。如果 sslmode 在您从一个 Amazon RDS 实例将 FDW 服务器创建到另一个时被设置为 verify-full,您将收到根证书文件错误。此错误在运行 CREATE SERVER 命令的数据库实例上生成。您无法在 Amazon RDS 实例上直接访问文件系统或安装 CA 证书,但必需的根证书已安装在数据库实例上。要查找证书的位置,请运行以下命令:

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

要解决此错误,在创建服务器时将 FDW 连接指向 /rdsdbdata/rds-metadata/server-cert.pem 文件。

解决方法

要将 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');

要确认连接正常工作,请创建一个用户映射和外部表:

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 连接成功,则会返回外部表中的数据。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?