Saltar al contenido principal

Hacer pública base de datos RDS

aviso

Trata de evitar este método que expone tu fuente de datos.

Introducción y Caso Actual

Actualmente todas las bases de datos levantadas con SleakOps tienen la misma configuración de accesos:

  • Publicly Accessible ❌
  • Alocada en SubnetGroup conformado por subnets "de Persistencia" creadas en la VPC de SleakOps.

Bajo esta configuración no existe forma directa de transformar a la DB a acceso público por lo que hay que realizar un pequeño workaround.

¿Por qué no se puede hacer pública una base de datos de forma directa?

  • No se puede editar un SubnetGroup de RDS.
  • AWS no permite editar el SubnetGroup asociado a una RDS sin que exista cambio de VPC. Por ende, nos obliga a hacerlo usando una VPC externa.

Solución con Workaround

Pre-requisitos:

  1. 30 mins aproximadamente.

  2. Tener creada la VPC default con Subnets en la cual situar la DB. De no tenerse, habrá que crear una nueva de 0 por nuestra cuenta así como subnets dentro de ella que se usaran para este cambio. Llamémosla "transitoria".

  3. Crear el SubnetGroup que utilice Subnets de la VPC transitoria, es indistinto las subnets que use. Se utiliza para migrar hacia la otra VPC.

    En mi caso yo creé la siguiente, nótese que tanto la VPC como las Subnets son de la VPC Default.

    rds-db-public-1
  4. Crear el SubnetGroup que utilice las Subnet Públicas de la VPC desplegada por SleakOps. Esta es la que usará la DB al final del flujo.

    rds-db-public-2
  5. Crear un SecurityGroup que permita el acceso público, o bien editar el existente. Para ambos casos debe pertenecer a la VPC donde está la Base de Datos.

    En mi caso creé el siguiente.

    rds-db-public-3

Paso a Paso:

Con los pre-requisitos cumplidos solo realizar las modificaciones a las configuraciones.

  1. Cambiar el SubnetGroup al correspondiente a la VPC Transitoria y eliminar el SG actual.

    rds-db-public-4
  2. Tocar next y hacer la revisión de los cambios, tener en cuenta seleccionar 'Apply Immediately'.

    rds-db-public-5

    Una vez hecho esto hay que esperar que se aplique el cambio para luego seguir con los pasos siguientes donde se vuelve a la VPC inicial que es la creada por SleakOps.

  3. Finalizado el cambio de VPC. Cambiar el SubnetGroup al público que fue creado, el cual se conformó con las Subnet Públicas de la VPC de SleakOps. Nuevamente, eliminar el SG default que se liga automáticamente.

    rds-db-public-6
  4. Hacer la DB Publicly Accessible.

    rds-db-public-7
  5. Revisar los cambios, deberían ser los siguientes. Dar next y Apply Immediately.

    rds-db-public-8

    Nuevamente esperar a que se termine de realizar el cambio para el último paso:

  6. Agregar el SecurityGroup creado en los pre-requisitos.

    rds-db-public-9
  7. Revisar el cambio. Dar next y Apply Immediately nuevamente.

    rds-db-public-10

Conclusión

Con esto nuestra DB queda completamente pública para todas las request en el puerto que use la DB, para el caso de Postgres, 5432.