Atualizar aplicações para conexão com clusters de banco de dados PostgreSQL do Aurora usando novos certificados SSL/TLS - Amazon Aurora

Atualizar aplicações para conexão com clusters de banco de dados PostgreSQL do Aurora usando novos certificados SSL/TLS

Em 13 de janeiro de 2023, o Amazon RDS publicou novos certificados de autoridade de certificação (CA) para conexão com clusters de banco de dados do Aurora via Secure Socket Layer ou Transport Layer Security (SSL/TLS). A seguir, você pode encontrar informações sobre como atualizar seus aplicativos para usar os novos certificados.

Este tópico pode ajudá-lo a determinar se algum aplicativo cliente usa SSL/TLS para conectar-se aos seus clusters de banco de dados. Em caso positivo, examine mais a fundo se esse aplicativo exige verificação de certificado para se conectar.

nota

Alguns aplicativos são configurados para se conectar a clusters de banco de dados PostgreSQL do Aurora apenas quando podem verificar com sucesso o certificado no servidor.

Para esses aplicativos, você deve atualizar os repositórios confiáveis de aplicativos cliente para incluir os novos certificados de CA.

Depois de atualizar seus certificados de CA nos armazenamentos confiáveis do aplicativo cliente, você pode fazer o rodízio dos certificados nos seus clusters de banco de dados. É altamente recomendável testar esses procedimentos em um ambiente de desenvolvimento ou teste antes de implementá-los em seus ambientes de produção.

Para obter mais informações sobre a mudança de certificados, consulte Alternar o certificado SSL/TLS. Para ter mais informações sobre como fazer download de certificados, consulte Usar SSL/TLS para criptografar uma conexão com um cluster de banco de dados. Para obter informações sobre como usar o SSL/TLS com clusters de banco de dados PostgreSQL, consulte Como proteger dados do Aurora PostgreSQL com SSL/TLS.

Determinar se as aplicações estão se conectando a clusters de banco de dados PostgreSQL do Aurora usando SSL

Verifique a configuração do cluster de banco de dados para obter o valor do parâmetro rds.force_ssl. Por padrão, o parâmetro rds.force_ssl é definido como 0 (desativado). Se o parâmetro rds.force_ssl estiver definido como 1 (ativado), os clientes serão obrigados a usar SSL/TLS para conexões. Para ter mais informações sobre parameter groups, consulte Trabalhar com grupos de parâmetros.

Se rds.force_ssl não estiver definido como 1 (ligado), consulte a exibição pg_stat_ssl para verificar conexões usando SSL. Por exemplo, a consulta a seguir retorna apenas conexões SSL e informações sobre os clientes que usam SSL.

select datname, usename, ssl, client_addr from pg_stat_ssl inner join pg_stat_activity on pg_stat_ssl.pid = pg_stat_activity.pid where ssl is true and usename<>'rdsadmin';

Somente as linhas que usarem conexões SSL/TLS serão exibidas com informações sobre a conexão. Esta é uma saída de exemplo.

datname | usename | ssl | client_addr ----------+---------+-----+------------- benchdb | pgadmin | t | 53.95.6.13 postgres | pgadmin | t | 53.95.6.13 (2 rows)

A consulta anterior exibe apenas as conexões atuais no momento da consulta. A ausência de resultados não indica que nenhum aplicativo esteja usando conexões SSL. Outras conexões SSL podem ser estabelecidas em um momento diferente.

Determinar se um cliente requer verificação de certificado para se conectar

Quando um cliente, como psql ou JDBC, é configurado com suporte para SSL, primeiro ele tenta se conectar ao banco de dados via SSL por padrão. Se esse cliente não puder se conectar via SSL, ele voltará a se conectar sem SSL. O modo sslmode padrão utilizado é diferente entre os clientes baseados em libpq (como o psql) e o JDBC. Os clientes baseados em libpq usam prefer por padrão, enquanto os clientes JDBC usam verify-full por padrão. O certificado no servidor é verificado apenas quando sslrootcert é fornecido com sslmode definido como verify-ca ou verify-full. Um erro será lançado se o certificado for inválido.

Use PGSSLROOTCERT para verificar o certificado com a variável de ambiente PGSSLMODE, com PGSSLMODE definido como verify-ca ou verify-full.

PGSSLMODE=verify-full PGSSLROOTCERT=/fullpath/ssl-cert.pem psql -h pgdbidentifier.cxxxxxxxx.us-east-2.rds.amazonaws.com -U primaryuser -d postgres

Use o argumento sslrootcert para verificar o certificado com sslmode no formato de string de conexão, com sslmode definido como verify-ca ou verify-full.

psql "host=pgdbidentifier.cxxxxxxxx.us-east-2.rds.amazonaws.com sslmode=verify-full sslrootcert=/full/path/ssl-cert.pem user=primaryuser dbname=postgres"

Por exemplo, no caso anterior, se você usar um certificado raiz inválido, verá um erro semelhante ao seguinte no seu cliente.

psql: SSL error: certificate verify failed

Atualizar o armazenamento confiável de aplicações

Para obter informações sobre como atualizar o armazenamento de confiança para aplicações PostgreSQL, consulte Secure TCP/IP connections with SSL na documentação do PostgreSQL.

nota

Ao atualizar o armazenamento confiável, é possível reter certificados mais antigos, além de adicionar os novos certificados.

Atualizar o armazenamento confiável de aplicações para JDBC

Você pode atualizar o armazenamento confiável para aplicativos que usam conexões JDBC para SSL/TLS.

Para obter informações sobre como baixar o certificado raiz, consulte Usar SSL/TLS para criptografar uma conexão com um cluster de banco de dados.

Para obter exemplos de scripts que importam certificados, consulte Script de exemplo para importar certificados para o seu armazenamento confiável.

Usar conexões SSL/TLS para diferentes tipos de aplicações

Veja a seguir informações sobre o uso de conexões SSL/TLS para diferentes tipos de aplicativos:

  • psql

    O cliente é chamado da linha de comandos especificando opções como uma string de conexão ou como variáveis de ambiente. Para conexões SSL/TLS, as opções relevantes são sslmode (variável de ambiente PGSSLMODE), sslrootcert (variável de ambiente PGSSLROOTCERT).

    Para conhecer a lista completa de opções, consulte Palavras-chave de parâmetros na documentação do PostgreSQL. Para conhecer a lista completa de variáveis de ambiente, consulte Variáveis de ambiente na documentação do PostgreSQL.

  • pgAdmin

    Esse cliente baseado em navegador é uma interface mais amigável para conectar-se a um banco de dados PostgreSQL.

    Para obter informações sobre como configurar conexões, consulte a Documentação de pgAdmin.

  • JDBC

    O JDBC permite conexões de banco de dados com aplicativos Java.

    Para obter informações gerais sobre como conectar-se a um banco de dados PostgreSQL com JDBC, consulte Conectar ao banco de dados na documentação do PostgreSQL. Para obter informações sobre como conectar-se com SSL/TLS, consulte Configurar o cliente na documentação do PostgreSQL.

  • Python

    Uma biblioteca Python popular para conectar-se a bancos de dados PostgreSQL é psycopg2.

    Para obter informações sobre como usar o psycopg2, consulte a documentação de psycopg2. Para um breve tutorial sobre como conectar-se a um banco de dados PostgreSQL, consulte Tutorial sobre psycopg2. Você pode encontrar informações sobre as opções aceitas pelo comando de conexão em O conteúdo do módulo psycopg2.

Importante

Depois de determinar que suas conexões com o banco de dados usam SSL/TLS e ter atualizado o armazenamento confiável de aplicações, você poderá atualizar o banco de dados para usar os certificados rds-ca-rsa2048-g1. Para obter instruções, consulte a etapa 3 em Atualizar o certificado CA modificando a instância de banco de dados.