¿Cómo puedo conectarme a una instancia de base de datos privada de Amazon RDS desde un equipo local con una instancia de Amazon EC2 que actúe como un host bastión?

8 minutos de lectura
0

Quiero utilizar una instancia de Amazon Elastic Compute Cloud (Amazon EC2) como host bastión (de salto). Después, quiero utilizar la instancia para conectarme a una instancia de base de datos privada de Amazon Relational Database Service (Amazon RDS) desde un equipo local.

Descripción breve

Para utilizar una instancia de Amazon EC2 como servidor de salto para conectarse a una instancia de base de datos privada de Amazon RDS desde un equipo local, siga estos pasos:

1.    Lance y configure la instancia de EC2 y ajuste su configuración.

2.    Configure los grupos de seguridad de la instancia de base de datos de RDS.

3.    Conéctese a la instancia de base de datos de RDS desde la máquina local.

Importante: Para conectarse a una instancia de base de datos de Amazon RDS o Amazon Aurora privada, la práctica recomendada es usar una VPN o AWS Direct Connect. Si no puede utilizar estas opciones, utilice un host bastión. El siguiente ejemplo de configuración utiliza grupos de seguridad para restringir el acceso. Sin embargo, puede restringir la lista de control de acceso de la red (ACL de la red) de subredes para que la conexión sea más segura. También puede restringir el alcance de la ruta de la puerta de enlace de Internet para usar un rango menor en lugar de 0.0.0.0/0. Por ejemplo, al agregar la puerta de enlace de Internet, agregue solo el rango de CIDR requerido en la tabla de enrutamiento para el destino. Para más información, consulte Opciones de enrutamiento de ejemplo.

Resolución

El siguiente ejemplo de configuración es para una instancia de Amazon RDS para MySQL que se encuentra en una Amazon Virtual Private Cloud (Amazon VPC). La instancia tiene grupos de seguridad configurados para una instancia de EC2.

Lanzar y configurar la instancia de EC2

1.    Abra la consola de Amazon EC2 y, a continuación, elija Launch instance (Lanzar instancia).

2.    Elija una imagen de máquina de Amazon (AMI).

3.    Elija un tipo de instancia, y luego elija Next: Configure Instance Details (Siguiente: Configurar detalles de la instancia).

4.    Para Network (Red), elija la VPC que utiliza la instancia de base de datos de RDS.

5.    Para Subnet (Subred), elija la subred que cuenta con una puerta de enlace de Internet en su tabla de enrutamiento. Si aún no dispone de una puerta de enlace de Internet, puede agregarla a la subred una vez que se haya creado la instancia de EC2.

6.    Para Auto-assign public IP (Asignar automáticamente IP pública), asegúrese de que esté seleccionada la opción Enable (Habilitar).

7.    Elija Next: Add Storage (Siguiente: agregar almacenamiento) y, luego, modifique el almacenamiento según sea necesario.

8.    Elija Next: Add Tags (Siguiente: agregar etiquetas) y, luego, agregue etiquetas según sea necesario.

9.    Elija Next: Configure Security Group (Siguiente: configurar grupo de seguridad). A continuación, elija Add Rule (Agregar regla) e ingrese lo siguiente: Type (Tipo): ingrese Custom TCP Rule (Regla TCP personalizada). Protocol (Protocolo): ingrese TCP. Port Range (Rango de puertos): ingrese 22. Source (Origen): ingrese la dirección IP de su equipo local. De forma predeterminada, la dirección IP de origen está abierta a todos, pero puede restringir el acceso a la dirección IP pública local.

10.    Elija Review and Launch (Revisar y lanzar).

11.    Elija Launch (Lanzar).

Configurar los grupos de seguridad de la instancia de base de datos de RDS

Nota: Para conectar una o más instancias de EC2 a una base de datos de RDS automáticamente, consulte Conexión automática de una instancia de EC2 a una base de datos de RDS.

1.    Abra la consola de Amazon RDS y, luego, elija Databases (Bases de datos) en el panel de navegación.

2.    Elija el nombre de la instancia de base de datos de RDS. o cree una instancia de base de datos de RDS si aún no tiene una.

3.    Elija la pestaña Connectivity & security (Conectividad y seguridad).

4.    Desde la sección Security (Seguridad), elija el enlace que aparece debajo de VPC security groups (Grupos de seguridad de VPC).

5.    Seleccione el grupo de seguridad, elija Actions (Acciones) y, luego, elija Edit inbound rules (Editar reglas de entrada).

6.    Elija Add rule (Agregar regla) y, a continuación, ingrese lo siguiente: Type (Tipo): ingrese Custom TCP Rule (Regla TCP personalizada). Protocol (Protocolo): ingrese TCP. Port Range (Rango de puertos): ingrese el puerto de su instancia de base de datos de RDS. Source (Origen): ingrese la dirección IP privada de su instancia de EC2.

7.    Elija Save (Guardar).

Esta configuración para el grupo de seguridad permite el tráfico desde la dirección IP privada de la instancia EC2. Si la instancia EC2 y la instancia de base de datos de RDS utilizan la misma VPC, entonces no necesita modificar la tabla de enrutamiento que utiliza la instancia de base de datos de RDS. Si la VPC es diferente, cree una conexión de emparejamiento de VPC para permitir conexiones entre esas VPC.

Nota: Tenga cuidado si utiliza una solución más escalable. Por ejemplo, si utiliza el ID del grupo de seguridad en una regla del grupo de seguridad, asegúrese de que no restrinja el acceso a una única instancia. En su lugar, configure la regla para restringir el acceso a cualquier recurso que utilice el ID del grupo de seguridad específico.

Conectarse a la instancia de base de datos de RDS desde su máquina local

Según el cliente que use, pueden variar los pasos necesarios para conectarse a la instancia de base de datos de RDS. Para obtener más información, consulte Conexión a una instancia de base de datos de Amazon RDS. Si utiliza MySQL, es una práctica recomendada utilizar SSL para cifrar la conexión entre la aplicación cliente y Amazon RDS.

El siguiente ejemplo utiliza el cliente MySQL Workbench para conectarse al host bastión:

1.    Inicie una nueva conexión y seleccione Standard TCP/IP over SSH (TCP/IP estándar por medio de SSH) para Connection Method (Método de conexión).

2.    Para la configuración de SSH, ingrese los siguientes detalles sobre la instancia de EC2: Auto-assign public IP (Asignar automáticamente IP pública): asegúrese de que esté seleccionada la opción Enable (Habilitar) para DNS Hostnames (Nombres de host de DNS). SSH Hostname (Nombre de host de SSH): ingrese el nombre de DNS público de la instancia de EC2 o su dirección IP pública. SSH Username (Nombre de usuario de SSH): ingrese el nombre de usuario para su instancia de EC2. Por ejemplo, ec2-user es el nombre de usuario para los equipos de EC2 Linux. SSH Key File (Archivo de claves de SSH): seleccione la clave privada que utilizó al crear la instancia de EC2. Nota: Una instancia de EC2 lanzada con una dirección IP pública tiene un DNS público si la VPC en la que se creó tiene activada la opción DNS Hostnames (Nombres de host de DNS).

3.    Ingrese los siguientes detalles para la configuración de la instancia de MySQL: MySQL Hostname (Nombre de host de MySQL): ingrese el punto de conexión de la instancia de base de datos de RDS. Puerto del servidor MySQL: ingrese 3306. O bien, si utiliza un puerto personalizado, ingrese el número del puerto personalizado. Username (Nombre de usuario): ingrese el nombre de usuario de la instancia de base de datos de RDS. Password (Contraseña): ingrese la contraseña de la instancia de base de datos de RDS.

4.    Elija Test Connection (Probar conexión).

5.    Una vez que la conexión se realice correctamente, dele un nombre y guárdela.

Si desea conectarse desde su cliente MySQL local a una instancia privada de RDS mediante un túnel SSH, consulte los siguientes comandos.

Linux o macOS:

1.    Ejecute el siguiente comando para configurar un túnel de SSH:

ssh -i "YOUR_EC2_KEY" -L LOCAL_PORT:RDS_ENDPOINT:REMOTE_PORT EC2_USER@EC2_HOST -N -f

Nota: Reemplace YOUR_EC2_KEY, LOCAL_PORT, RDS_ENDPOINT, REMOTE_PORT, EC2_USER y EC2_HOST por la información pertinente.

Una vez completados los campos personalizados del comando anterior, el comando tiene un aspecto similar al del ejemplo siguiente:

ssh -i "ec2Key.pem" -L 3336:rdsinstance.xxx.xxx.rds.amazonaws.com:3306 ec2-user@ec2-34-244-136-223.xxxcompute.amazonaws.com -N -f

2.    Para probar y confirmar que el túnel escucha en el puerto local, ejecute los siguientes comandos:

lsof -i4 -P | grep -i "listen" | grep LOCAL_PORT
nc -zv 127.0.0.1 LOCAL_PORT

Nota: Reemplace LOCAL_PORT por el número de su puerto local.

3.    Si el túnel escucha correctamente en el puerto local, verá un resultado similar al siguiente:

lsof -i4 -P | grep -i "listen" | grep 3336
ssh       17692 user    8u  IPv4 0x3bc46bcfeffce12f      0t0  TCP localhost:3336 (LISTEN)

nc -zv 127.0.0.1 3336
Connection to 127.0.0.1 port 3336 [tcp/directv-tick] succeeded!

4.    Ejecute el siguiente comando para conectarse a su instancia de RDS desde su equipo local mediante su instancia de EC2 como host bastión:

mysql -h 127.0.0.1 -P LOCAL_PORT -u RDS_USER -p

Nota: Reemplace LOCAL_PORT por el número de su puerto local y DB_USER por su nombre de usuario de base de datos de RDS.


Información relacionada

¿Cómo soluciono los problemas de conexión con la instancia de base de datos de Amazon RDS?