Atualizar certificados SSL / TLS do Amazon RDS - Elastic Beanstalk

14

A AWS anunciou recentemente a necessidade de:

Atualize seus certificados SSL / TLS do Amazon RDS até 31 de outubro de 2019

Eu tenho um aplicativo Rails hospedado com um balanceador de carga clássico do Elastic Beanstalk, que se conecta a um banco de dados Postgres usando RDS.

As etapas necessárias de acordo com a Amazon são:

  1. Faça o download do novo certificado SSL / TLS em Usando SSL / TLS para criptografar uma conexão com uma instância de banco de dados.
  2. Atualize seus aplicativos de banco de dados para usar o novo certificado SSL / TLS.
  3. Modifique a instância do banco de dados para alterar a CA de rds-ca-2015 para rds-ca-2019.

( https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL-certificate-rotation.html )

Como meus balanceadores de carga estão configurados dessa maneira (conectando-me às minhas instâncias do EC2 via porta HTTP 80 (não SSL)), isso significa que não preciso seguir as etapas 1 e 2 e seguir apenas a etapa 3?

LoadBalancerListeners

Ou tenho que baixar os certificados atualizados e instalá-los / adicioná-los ao meu balanceador de carga ou instâncias do EC manualmente? Não tenho certeza de como fazer isso.

stwr667
fonte
11
o que você fez no final? não estou claro qual era a solução final.
Weber #
3
@weber, a principal coisa que eu precisava determinar era se as instâncias do EC2 atrás de um balanceador de carga do Elastic Beanstalk com uma conexão RDS vinculada confiariam automaticamente no certificado 2019 atualizado ou não. Eu não tinha certeza se precisaria confiar neles manualmente via SSH, ou por exemplo, usando .ebextensions. No final, após testá-lo, pude confirmar que eles se confiar automaticamente a nova conexão RDS. Se a instância do RDS DB foi dissociada do ambiente EB, conforme descrito aqui https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo.RDS.html, não tenho certeza do resultado.
stwr667

Respostas:

8

As etapas 1 e 2 são necessárias apenas se a conexão do seu aplicativo com o MySQL for criptografada por TLS .

Não altere a configuração do LB TLS , pois isso pode interromper o seu aplicativo; o LB TLS é outra coisa, enquanto o RDS TLS é outra coisa.

Se o seu aplicativo apenas criar uma conexão simples, você poderá executar diretamente a etapa 3.

Modifique a instância do banco de dados para alterar a CA de rds-ca-2015 para rds-ca-2019.

Normalmente, pratique para DB, DB deve estar em sub-rede privada e não deve ser acessível ao público, o TLS é útil quando sua conexão de Banco de Dados e Back-end estiver na Internet, não no VPC.

Com uma conexão não criptografada entre o cliente MySQL e o servidor, alguém com acesso à rede pode observar todo o seu tráfego e inspecionar os dados que estão sendo enviados ou recebidos entre cliente e servidor.

Adiii
fonte
Obrigado @Adiii. Você tem certeza? Aqui docs.aws.amazon.com/AmazonRDS/latest/UserGuide/… , descreve como ver se sua conexão com o banco de dados está usando SSL. Quando eu eb sshno meu servidor, conecto a partir daí ao DB via psqle, em seguida select ssl_is_used(), corro , ele retorna true! Minha instância do RDS está vinculada ao meu ambiente de EB, conforme descrito aqui docs.aws.amazon.com/elasticbeanstalk/latest/dg/… . Como o EB é conectado automaticamente ao RDS, estou preocupado com o exposto acima, que alterar a CA interromperá a conexão gerada.
stwr667
Eu estou falando em geral, depende da aplicação como ele cria a conexão, mas o código sugerido pelo link é a conexão. var mysql = require('mysql'); var connection = mysql.createConnection({ host : process.env.RDS_HOSTNAME, user : process.env.RDS_USERNAME, password : process.env.RDS_PASSWORD, port : process.env.RDS_PORT }); connection.connect(function(err) { if (err) { console.error('Database connection failed: ' + err.stack); return; } console.log('Connected to database.'); }); connection.end();
Adiii 18/10/19
2
Obrigado @Adii. Se você está usando o Postgres, não o MySQL. A boa notícia é que tirei um instantâneo e tentei a etapa 3 agora. Tudo ainda funciona como esperado. Mesmo ao se reconectar ao banco de dados a partir do servidor de aplicativos, ele ainda relata que está usando SSL, portanto, presumo que o ElasticBeanstalk lide com a confiança do certificado automaticamente quando a instância do RDS estiver vinculada ao ambiente EB. Obrigado novamente.
stwr667
Então, como você cria uma conexão? Especificou SSL na cadeia de conexão?
Adiii 18/10/19
Eu tenho um aplicativo Rails, então as informações de conexão são definidas para database.ymlchamar variáveis ​​ENV como RDS_DB_NAME, RDS_USERNAMEetc. Não especifica para exigir SSL lá (mesmo que pudesse). Embora eu acho que a configuração padrão na EB deve ser algo como allow, preferou require, configurado através de uma variável de ambiente ou algo assim. cf: postgresql.org/docs/current/… . Definitivamente, não é um dos outros 3 porque disabledesativaria o SSL, e as outras verifyopções falharam quando os testei na CLI.
stwr667
2

Há uma resposta muito mais fácil para a pergunta:

Você não precisa instalar nada no seu ambiente Beanstalk se atualizar o certificado da CA usado pelo RDS anexado a ele. https://stackoverflow.com/a/59742149/7051819

Basta seguir o ponto 3 e ignorar 1 e 2.

(Sim, eu mesmo escrevi essa resposta).

Rbbn
fonte
3
Eu acho que a resposta do salto é votada para baixo, porque a maioria dos ambientes de produção NÃO usa RDS dentro do pé de feijão elástico. usar o RDS de dentro do beanstalk elástico é potencialmente perigoso, porque se você encerrar sua instância do beanstalk elástico, o banco de dados também será encerrado, o que não é bom para fins de retenção de dados. Portanto, em geral, as pessoas estão perguntando sobre os ambientes elásticos de pé de feijão em que a instância do RDS é separada.
jakeatwork 18/01