在 Amazon RDS/Aurora PostgreSQL 上使用外部資料包裝函式和 SSL 驗證完整時,如何解決根憑證檔案錯誤?

1 分的閱讀內容
0

我在執行 PostgreSQL 的 Amazon Relational Database Service (Amazon RDS) 上使用外部資料包裝函式 (FDW) 和設定為驗證完整的 sslmode。我在嘗試為資料庫執行個體建立 FDW 伺服器時遇到以下錯誤:「根憑證檔案 "/home/rdsdb/.postgresql/root.crt" 不存在」。我該如何解決此錯誤?

簡短描述

若要在 PostgreSQL 中啟用憑證驗證,必須將 sslmode 設定為驗證完整。如果 sslmode 在您從一個 Amazon RDS 執行個體將 FDW 伺服器建立到另一個時被設定為驗證完整,您將收到根憑證檔案錯誤。此錯誤在執行 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 年前