Wie kann ich Fehler mit der Stammzertifikatsdatei beheben, wenn ich Foreign Data Wrappers und vollständige Überprüfung mit SSL auf Amazon RDS/Aurora PostgreSQL verwende?

Lesedauer: 2 Minute
0

Ich verwende Foreign Data Wrappers (FDW) und sslmode, das auf vollständige Überprüfung eingestellt ist, auf Amazon Relational Database Service (Amazon RDS) mit PostgreSQL. Wenn ich versuche, einen FDW-Server für meine DB-Instance zu erstellen, erhalte ich die folgende Fehlermeldung: „root certificate file "/home/rdsdb/.postgresql/root.crt" does not exist“. Wie kann ich diesen Fehler beheben?

Kurzbeschreibung

Um die Zertifikatsüberprüfung in PostgreSQL zu aktivieren, muss sslmode auf verify-full gesetzt sein. Wenn sslmode auf verify-full gesetzt ist, wenn Sie einen FDW-Server von einer Amazon-RDS-Instance zu einer anderen erstellen, erhalten Sie den Stammzertifikatsdatei-Fehler. Dieser Fehler wird auf der DB-Instance generiert, die den Befehl CREATE SERVER ausführt. Sie können nicht direkt auf das Dateisystem einer Amazon-RDS-Instance zugreifen oder die CA-Zertifikate installieren, aber das erforderliche Stammzertifikat ist bereits auf der DB-Instance installiert. Führen Sie folgenden Befehl aus, um den Speicherort des Zertifikats zu ermitteln:

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

Um den Fehler zu beheben, richten Sie beim Erstellen des Servers die FDW-Verbindung auf die Datei /rdsdbdata/rds-metadata/server-cert.pem.

Behebung

Führen Sie einen Befehl wie den folgenden aus, um die FDW-Verbindung auf die Stammzertifikatsdatei zu richten:

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

Um zu überprüfen, ob die Verbindung funktioniert, erstellen Sie eine Benutzerzuordnung und eine Fremdtabelle:

Hinweis: PostgreSQL protokolliert Passwörter im Klartext in den Protokolldateien. Um dies zu verhindern, lesen Sie How can I stop Amazon RDS for PostgreSQL from logging my passwords in clear-text in the log files?

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

Eine Verbindung wird erst hergestellt, wenn auf die Tabelle zugegriffen wird. Um zu überprüfen, ob die Verbindung funktioniert, fragen Sie die Tabelle ab:

SELECT * from foreign_table ;

Wenn die FDW-Verbindung erfolgreich zustandekommt, werden die Daten aus der Fremdtabelle zurückgegeben.


Verwandte Themen

Common management tasks for PostgreSQL on Amazon RDS

PostgreSQL-Dokumentation für postgres_fdw

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren