PostgreSQL을 실행하는 Amazon RDS에서 외부 데이터 래퍼 및 SSL verify-full을 사용하는 경우 루트 인증서 파일 오류를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2019년 9월 16일

PostgreSQL을 실행하는 Amazon Relational Database Service(Amazon RDS)에서 verify-full로 설정된 sslmode와 외부 데이터 래퍼(FDW)를 사용하고 있습니다. DB 인스턴스에 대한 FDW 서버를 생성하려고 하면 다음 오류가 발생합니다. "root certificate file "/home/rdsdb/.postgresql/root.crt" does not exist"

간략한 설명

PostgreSQL에서 인증서 검증을 활성화하려면 sslmodeverify-full로 설정해야 합니다. sslmodeverify-full로 설정된 경우 한 Amazon RDS 인스턴스에서 다른 인스턴스로 FDW 서버를 생성하면 루트 인증서 파일 오류가 발생합니다. 이 오류는 CREATE SERVER 명령을 실행하는 DB 인스턴스에서 생성됩니다. 사용자는 Amazon RDS 인스턴스에서 파일 시스템에 직접 액세스하거나 CA 인증서를 설치할 수 없지만, 필수 루트 인증서는 이미 RDS DB 인스턴스에 설치되어 있습니다. 이 인증서의 위치를 찾으려면 다음 명령을 실행합니다.

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

참고: Aurora PostgreSQL의 경우 sslrootcert '/rdsdbdata/rds-metadata/server-cert.pem' 대신 sslrootcert '/rdsdbdata/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 연결에 성공하면 외부 테이블의 데이터가 반환됩니다.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?