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

1 分钟阅读
0

我在运行 PostgreSQL 的 Amazon Relational Database Service (Amazon RDS) 上使用 Foreign Data Wrappers (FDW) 和设置为 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');

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

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


相关信息

Amazon RDS 上的 PostgreSQL 的常见管理任务

postgres_fdw 的 PostgreSQL 文档

AWS 官方
AWS 官方已更新 2 年前