Actualizar certificados SSL / TLS de Amazon RDS - Elastic Beanstalk

14

AWS anunció recientemente la necesidad de:

Actualice sus certificados SSL / TLS de Amazon RDS antes del 31 de octubre de 2019

Tengo una aplicación Rails alojada con un equilibrador de carga Elastic Beanstalk clásico, que se conecta a una base de datos Postgres usando RDS.

Los pasos requeridos según Amazon son:

  1. Descargue el nuevo certificado SSL / TLS de Uso de SSL / TLS para cifrar una conexión a una instancia de base de datos.
  2. Actualice las aplicaciones de su base de datos para usar el nuevo certificado SSL / TLS.
  3. Modifique la instancia de DB para cambiar la CA de rds-ca-2015 a rds-ca-2019.

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

Dado que tengo mis equilibradores de carga configurados de esta manera (conectándome a mis instancias EC2 a través del puerto HTTP 80 (no SSL), ¿significa esto que no necesito seguir los pasos 1 y 2? ¿Y solo seguir el paso 3?

LoadBalancerListeners

¿O tengo que descargar los certificados actualizados e instalarlos / agregarlos a mi equilibrador de carga o instancias de EC manualmente? No estoy seguro de cómo hacer eso.

stwr667
fuente
1
¿Qué tuviste que hacer al final? No estoy claro cuál fue la solución final.
weber
3
@weber, lo principal que necesitaba determinar era si las instancias EC2 detrás de un equilibrador de carga Elastic Beanstalk con una conexión RDS vinculada confiarían automáticamente en el certificado actualizado 2019 o no. No estaba seguro de si necesitaría confiar manualmente en ellos a través de SSH o, por ejemplo, usarlos .ebextensions. Al final después de probarlo, pude confirmar que tenían confían automáticamente la nueva conexión RDS. Si la instancia de RDS DB se desacopla del entorno EB como se describe aquí https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo.RDS.html, entonces no estoy seguro del resultado.
stwr667

Respuestas:

8

Los pasos 1 y 2 solo son necesarios si la conexión de su aplicación con MySQL está cifrada con TLS .

No cambie la configuración de LB TLS , puede interrumpir su aplicación, LB TLS es otra cosa, donde RDS TLS es otra cosa.

Si su aplicación solo crea una conexión simple, puede realizar directamente el paso 3.

Modifique la instancia de DB para cambiar la CA de rds-ca-2015 a rds-ca-2019.

Normalmente, la práctica para DB, DB debe estar en una subred privada y no debe ser accesible desde el público, TLS es útil cuando su base de datos y conexión de back-end está en Internet, no dentro de VPC.

Con una conexión no cifrada entre el cliente MySQL y el servidor, alguien con acceso a la red podría vigilar todo su tráfico e inspeccionar los datos que se envían o reciben entre el cliente y el servidor.

Adiii
fuente
Gracias @ Adiii. ¿Estás seguro? Aquí docs.aws.amazon.com/AmazonRDS/latest/UserGuide/… describe cómo ver si su conexión DB está utilizando SSL. Cuando accedo eb ssha mi servidor, me conecto desde allí a la base de datos a través de psql, y luego ejecuto select ssl_is_used(), ¡vuelve verdadero! Mi instancia de RDS está vinculada a mi entorno EB como se describe aquí docs.aws.amazon.com/elasticbeanstalk/latest/dg/… . Como EB se conecta automáticamente a RDS, me preocupa, según lo anterior, que cambiar la CA interrumpirá la conexión generada.
stwr667
Estoy hablando en general, depende de la aplicación cómo crea la conexión, pero el código sugerido por el enlace es una conexión pálida. 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
Gracias @ Adi. Fyi, uso Postgres, no MySQL. La buena noticia es que tomé una instantánea e intenté el paso 3 en este momento. Todo sigue funcionando como se esperaba. Incluso cuando se vuelve a conectar a la base de datos desde el servidor de aplicaciones, aún informa que está utilizando SSL, por lo que supongo que ElasticBeanstalk maneja la confianza del certificado automáticamente cuando la instancia de RDS está vinculada al entorno EB. Gracias de nuevo.
stwr667
Entonces, ¿cómo creas la conexión? ¿Especificó SSL en la cadena de conexión?
Adiii
Tengo una aplicación Rails, por lo que la información de conexión se define en database.ymllas llamadas a variables ENV como RDS_DB_NAME, RDS_USERNAMEetc. No especifica que se requiera SSL allí (aunque podría). Aunque creo que la configuración predeterminada de EB debe ser algo así como allow, prefero require, configurado a través de una variable de entorno o algo así. cf: postgresql.org/docs/current/… . Definitivamente no es uno de los otros 3 porque disableapagaría SSL, y las otras verifyopciones fallaron cuando las probé en la CLI.
stwr667
2

Hay una respuesta mucho más fácil a la pregunta:

No necesita instalar nada en su entorno Beanstalk si actualiza el certificado de CA utilizado por el RDS adjunto. https://stackoverflow.com/a/59742149/7051819

Simplemente siga el punto 3 e ignore 1 y 2.

(Sí, escribí esa respuesta yo mismo).

Rbbn
fuente
3
Creo que la respuesta de salto es rechazada porque la mayoría de los entornos de producción NO usan RDS dentro de beanstalk elástico. El uso de RDS desde dentro de Elastic Beanstalk es potencialmente peligroso porque si finaliza su instancia de Elastic Beanstalk, su base de datos también se cancela, lo que no es bueno para fines de retención de datos. Por lo tanto, en general, las personas preguntan sobre entornos de beanstalk elásticos donde la instancia de RDS está separada.
Jakeatwork