Comment éliminer les erreurs de fichier de certificat racine lors de l'utilisation d'encapsuleurs de données externes et de SSL verify-full sur Amazon RDS exécutant PostgreSQL ?

Date de la dernière mise à jour : 16/09/2019

J'utilise des encapsuleurs FDW (Foreign Data Wrapper) et sslmode défini sur verify-full sur Amazon Relational Database Service (Amazon RDS) exécutant PostgreSQL. Lorsque j'essaie de créer un serveur FDW pour mon instance de base de données, je reçois le message d'erreur « root certificate file "/home/rdsdb/.postgresql/root.crt" does not exist » (Le fichier de certificat racine "/home/rdsdb/.postgresql/root.crt" n'existe pas).

Brève description

Pour activer la vérification de certificat dans PostgreSQL, sslmode doit être défini sur verify-full. Si sslmode est défini sur verify-full lorsque vous créez un serveur FDW d’une instance Amazon RDS vers une autre, vous recevez une erreur de fichier de certificat racine. Cette erreur est générée sur l'instance de base de données où la commande CREATE SERVER est exécutée. Vous ne pouvez pas accéder directement au système de fichiers sur une instance Amazon RDS ni installer des certificats CA, mais le certificat racine requis est déjà installé sur l'instance de base de données RDS. Pour rechercher l'emplacement du certificat, exécutez la commande suivante :

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

Pour éliminer cette erreur, pointez la connexion FDW vers le fichier /rdsdbdata/rds-metadata/server-cert.pem lors de la création du serveur.

Résolution

Pour pointer la connexion FDW vers le fichier de certificat racine, exécutez une commande similaire à celle ci-dessous :

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

Remarque : pour Aurora PostgreSQL, utilisez sslrootcert '/rdsdbdata/rds-metadata/root-cert.pem' au lieu de sslrootcert '/rdsdbdata/rds-metadata/server-cert.pem'.

Pour vérifier que la connexion fonctionne, créez un mappage d'utilisateur et une table externe :

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

Aucune connexion n'est établie tant que la table est accessible. Pour vérifier que la connexion fonctionne, interrogez la table :

SELECT * from foreign_table ;

Si la connexion FDW aboutit, les données de la table externe sont renvoyées.


Cet article vous a-t-il été utile ?

Cette page peut-elle être améliorée ?


Vous avez besoin d'aide ?