Como faço para resolver erros no arquivo de certificado raiz ao usar wrappers de dados externos e verificação completa de SSL no Amazon RDS/Aurora PostgreSQL?

2 minuto de leitura
0

Estou usando Foreign Data Wrappers (FDW) e sslmode que estão configurados para verificação completa no Amazon Relational Database Service (Amazon RDS) executando o PostgreSQL. Quando tento criar um servidor FDW para minha instância de banco de dados, recebo o seguinte erro: “O arquivo de certificado raiz “/home/rdsdb/.postgresql/root.crt” não existe”. Como faço para resolver esse erro?

Breve descrição

Para habilitar a verificação do certificado no PostgreSQL, sslmode deve ser definido como verify-full. Se sslmode estiver definido como verifiy-full ao criar um servidor FDW de uma instância do Amazon RDS para outra, você receberá o erro do arquivo do certificado raiz. Esse erro é gerado na instância de banco de dados em que o comando CREATE SERVER é executado. Você não pode acessar filesystem em uma instância do Amazon RDS nem instalar os certificados CA, mas o certificado raiz necessário já está instalado na instância de banco de dados. Para encontrar a localização do certificado, execute o seguinte comando:

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

Para resolver esse erro, aponte a conexão FDW para o arquivo /rdsdbdata/rds-metadata/server-cert.pem ao criar o servidor.

Resolução

Para apontar a conexão FDW para o arquivo de certificado raiz, execute um comando semelhante ao seguinte:

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

Para confirmar se a conexão está funcionando, crie um mapeamento de usuário e uma tabela externa:

Observação: o PostgreSQL registra senhas em texto não criptografado nos arquivos de log. Para evitar isso, consulte Como faço para impedir que o Amazon RDS para PostgreSQL registre minhas senhas em texto não criptografado nos arquivos de log?

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

A conexão não é estabelecida até que a tabela seja acessada. Para confirmar que a conexão está funcionando, consulte a tabela:

SELECT * from foreign_table ;

Se a conexão FDW for bem-sucedida, os dados da tabela externa serão retornados.


Informações relacionadas

Tarefas comuns de gerenciamento para PostgreSQL no Amazon RDS

Documentação do PostgreSQL para /rdsdbdata/rds-metadata/server-cert.pem