Aggiorna i certificati Amazon RDS SSL / TLS - Elastic Beanstalk


14

AWS ha recentemente annunciato la necessità di:

Aggiorna i tuoi certificati Amazon RDS SSL / TLS entro il 31 ottobre 2019

Ho un'applicazione Rails ospitata con un classico bilanciamento del carico Elastic Beanstalk, che si collega a un DB Postgres usando RDS.

I passaggi richiesti secondo Amazon sono:

  1. Scarica il nuovo certificato SSL / TLS da Uso di SSL / TLS per crittografare una connessione a un'istanza DB.
  2. Aggiorna le tue applicazioni di database per utilizzare il nuovo certificato SSL / TLS.
  3. Modificare l'istanza DB per cambiare la CA da rds-ca-2015 a rds-ca-2019.

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

Dato che i bilanciatori del carico sono configurati in questo modo (connettendomi alle mie istanze EC2 tramite la porta HTTP 80 (non SSL), ciò significa che non devo seguire i passaggi 1 e 2? E seguire solo il passaggio 3?

LoadBalancerListeners

Oppure devo scaricare i certificati aggiornati e installarli / aggiungerli manualmente al mio bilanciamento del carico o alle istanze EC? Non sono sicuro di come farlo.


1
cosa hai dovuto fare alla fine? Non sono chiaro quale sia stata la soluzione finale.
weber,

3
@weber, la cosa principale che dovevo determinare era se le istanze EC2 dietro un bilanciamento del carico Elastic Beanstalk con una connessione RDS collegata si fiderebbero automaticamente del certificato aggiornato del 2019 o meno. Non ero sicuro se avrei avuto bisogno di fidarmi di loro manualmente tramite SSH o di usarli .ebextensions. Alla fine dopo il test, ho potuto confermare che si fidano automaticamente la nuova connessione RDS. Se l'istanza DB RDS è stata disaccoppiata dall'ambiente EB come descritto qui https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo.RDS.html, non sono sicuro del risultato.
stwr667,

Risposte:


8

I passaggi 1 e 2 sono necessari solo se la connessione dell'applicazione con MySQL è crittografata TLS .

Non modificare l' impostazione LB TLS , poiché potrebbe interrompere l'applicazione, LB TLS è qualcos'altro, dove RDS TLS è qualcos'altro.

Se l'applicazione crea semplicemente una connessione semplice, puoi eseguire direttamente il passaggio 3.

Modificare l'istanza DB per cambiare la CA da rds-ca-2015 a rds-ca-2019.

Normalmente la pratica per DB, DB dovrebbe essere in sottorete privata e non dovrebbe essere accessibile al pubblico, TLS è utile quando la connessione al database e al back-end è su Internet, non all'interno di VPC.

Con una connessione non crittografata tra il client MySQL e il server, qualcuno con accesso alla rete potrebbe guardare tutto il tuo traffico e ispezionare i dati inviati o ricevuti tra client e server.


Grazie @Adiii. Sei sicuro? Qui docs.aws.amazon.com/AmazonRDS/latest/UserGuide/… descrive come vedere se la tua connessione DB utilizza SSL. Quando mi eb sshcollego al mio server, mi collego da lì al DB tramite psql, quindi eseguo select ssl_is_used(), restituisce true! La mia istanza RDS è legata al mio ambiente EB come descritto qui docs.aws.amazon.com/elasticbeanstalk/latest/dg/… . Poiché EB è auto-connesso a RDS, sono preoccupato in base a quanto sopra che la modifica della CA interromperà la connessione generata.
stwr667,

Sto parlando in generale, dipende dall'applicazione come crea la connessione ma il codice suggerito dal link palin connection. 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,

2
Grazie @Adii. Cordiali saluti, utilizzo Postgres, non MySQL. La buona notizia è che ho fatto un'istantanea e ho appena provato il passaggio 3. Tutto funziona ancora come previsto. Anche quando si riconnette al DB dal server delle applicazioni, segnala comunque che sta utilizzando SSL, quindi suppongo che ElasticBeanstalk gestisca automaticamente l'attendibilità del certificato quando l'istanza RDS è legata all'ambiente EB. Grazie ancora.
stwr667,

Quindi, come si crea una connessione? Specifica SSL nella stringa di connessione?
Adiii,

Ho un'app Rails, quindi le informazioni di connessione sono definite in database.ymlcui chiama le variabili ENV come RDS_DB_NAME, RDS_USERNAMEecc. Non specifica di richiedere SSL lì (anche se potrebbe). Anche se credo che l'impostazione predefinita su EB deve essere qualcosa di simile allow, prefero require, configurato tramite una variabile d'ambiente o qualcosa del genere. cf: postgresql.org/docs/current/… . Non è sicuramente uno degli altri 3 perché disabledisabiliterebbe SSL e le altre verifyopzioni fallivano quando le ho testate sulla CLI.
stwr667,

2

C'è una risposta molto più semplice alla domanda:

Non è necessario installare nulla nel proprio ambiente Beanstalk se si aggiorna il certificato CA utilizzato dall'RDS ad esso collegato. https://stackoverflow.com/a/59742149/7051819

Basta seguire il punto 3 e ignorare 1 e 2.

(Sì, ho scritto questa risposta da solo).


3
penso che la risposta al salto sia sottovalutata perché la maggior parte degli ambienti di produzione NON utilizza RDS all'interno di beanstalk elastico. l'utilizzo di RDS dall'interno del beanstalk elastico è potenzialmente pericoloso perché se si termina l'istanza del beanstalk elastico, anche il database viene chiuso, il che non è utile ai fini della conservazione dei dati. Quindi, in generale, le persone chiedono ambienti beanstalk elastici in cui l'istanza RDS è separata.
jakeatwork il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.