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

Última actualización: 18/01/2023

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 de Amazon Relational Database Service (Amazon RDS) privada desde una máquina local.

Descripción breve

Para conectarse a una instancia de base de datos de Amazon RDS desde una máquina local con una instancia de EC2 como servidor de salto, 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 usar estas opciones, use un host bastión. En la siguiente configuración de ejemplo, se restringe el acceso mediante grupos de seguridad. 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, agregue solo el rango de enrutamiento entre dominios sin clases (CIDR) requerido en la tabla de enrutamiento para el destino cuando agregue la puerta de enlace de Internet. 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, luego, seleccione 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). Luego, seleccione Add Rule (Agregar regla) e ingrese lo siguiente:

Type (Tipo): ingrese Regla TCP personalizada.

Protocol (Protocolo): ingrese CP.

Port Range (Intervalo de puertos): ingrese 22.

Source (Origen): ingrese la dirección IP de su máquina 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, luego, ingrese lo siguiente:

Type (Tipo): ingrese 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 dichas VPC.

Nota: Tenga cuidado si utiliza una solución más escalable. Por ejemplo, si usa 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.    Ingrese los siguientes detalles sobre la instancia de EC2 para la configuración SSH:

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 DNS).

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 DNS).

SSH Hostname (Nombre de host 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 SSH): ingrese el nombre de usuario para su instancia de EC2. Por ejemplo, ec2-user es el nombre de usuario para las máquinas de EC2 Linux.

SSH Key File (Archivo de clave SSH): seleccione la clave privada que utilizaba cuando creó la instancia de EC2.

3.    Ingrese los siguientes detalles para la configuración de la instancia 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 de 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.    Configure un túnel SSH mediante el siguiente comando:

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

Nota: Asegúrese de reemplazar YOUR_EC2_KEY, LOCAL_PORT, RDS_ENDPOINT, REMOTE_PORT, EC2_USER y EC2_HOST por la información pertinente.

Cuando se hayan completado los campos personalizados del comando anterior, el comando tendrá 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: Asegúrese de reemplazar 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 máquina local utilizando su instancia de EC2 como host bastión:

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

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


¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?