Cómo conectarte a PostgreSQL (psql) desde tu computadora local a un RDS en AWS

Conectarte a una base de datos RDS de Amazon Web Services (AWS) desde tu computadora local es una tarea esencial para administrar y consultar tus datos. Sin embargo, es común cometer algunos errores en el proceso. En este tutorial, te mostraré cómo hacerlo correctamente.

Pasos previos

Antes de comenzar, asegúrate de cumplir con los siguientes requisitos:

  1. Tener instalado PostgreSQL en tu computadora local. Esto incluye la herramienta de línea de comandos psql. Puedes verificar si está instalado ejecutando psql --version en tu terminal.
  2. Credenciales de acceso a tu base de datos RDS. Necesitarás:
    • Host: La dirección de tu instancia RDS.
    • Usuario: El nombre de usuario configurado en tu base de datos.
    • Contraseña: La contraseña del usuario.
    • Nombre de la base de datos: La base específica a la que deseas conectarte.
  3. Configuración adecuada en tu RDS Security Group. Este paso es crucial y donde muchos suelen equivocarse.

Ojo: Errores Comunes

Un error común al configurar el acceso a una instancia RDS es dar permisos al Security Group de una EC2 en lugar del de la RDS.

Otro error frecuente es crear una regla para SSH (puerto 22), ya que muchas veces se asume que el problema está relacionado con la terminal, debido a que el error se muestra allí. Sin embargo, aunque el acceso se inicia desde la terminal, lo que realmente necesita es conexión al puerto correspondiente de la base de datos, como el puerto PostgreSQL (5432). Por lo tanto, es importante asegurarse de que el puerto necesario para la base de datos esté configurado en las reglas de seguridad.

Paso 1: Configura el Security Group de tu RDS

Un error común al configurar el acceso a una instancia RDS es dar permisos al Security Group de una EC2 en lugar del de la RDS. Para conectarte desde tu computadora local, debes agregar tu dirección IP a las reglas de entrada (Inbound Rules) del Security Group asociado a tu RDS. Aquí te explico cómo hacerlo:

Otro error comun es crear la regla para SSH (se tiene a pensar esto ya que generalmente el error se muestra en la terminal o inferimos que la coneccion es de la terminal.. y si eso pero en realidad es de la tarminal y busca coneccion a otro puerto entonces el puerto necesario es PostgreSQL

  1. Inicia sesión en tu consola de AWS.
  2. Ve a la sección de EC2 y selecciona Security Groups.
  3. Encuentra el Security Group asociado a tu RDS.
  4. Edita las reglas de entrada (Inbound Rules) y agrega una nueva regla:
    • Tipo: PostgreSQL.
    • Protocolo: TCP.
    • Puerto: 5432.
    • Origen: Tu dirección IP (selecciona “My IP” para agregarla automáticamente).

Guarda los cambios.

Paso 2: Conéctate a tu RDS desde psql

Una vez configurado el Security Group, utiliza el siguiente comando en tu terminal para conectarte a tu RDS desde tu computadora local:

psql -h <host> -U <username> -d <database_name> -p 5432

Detalle de los parámetros:

  • -h <host>: El endpoint de tu instancia RDS (por ejemplo, mydb.xxxxxx.us-east-1.rds.amazonaws.com).
  • -U <username>: El nombre de usuario de tu base de datos.
  • -d <database_name>: El nombre de la base de datos específica a la que deseas conectarte.
  • -p 5432: El puerto en el que PostgreSQL escucha por defecto.

Posibles errores y soluciones

Error 1: Connection timed out

Esto sucede si tu IP no está correctamente configurada en las reglas de entrada del Security Group. Revisa el paso 1 y confirma que tu dirección IP es la que aparece.

Error 2: FATAL: password authentication failed

Esto indica que el nombre de usuario o contraseña son incorrectos. Verifica tus credenciales y asegúrate de que coincidan con las configuradas en tu RDS.

Error 3: psql: could not translate host name

Esto sucede si el host ingresado no es válido. Asegúrate de usar el endpoint completo que aparece en la configuración de tu RDS.


Con estos pasos, deberías poder conectarte exitosamente a tu RDS desde tu computadora local utilizando psql. Si tienes alguna duda, ¡déjala en los comentarios! 🚀

Cuando configuramos las reglas de seguridad para nuestras aplicaciones en Elastic Beanstalk, podemos preguntarnos cuáles puertos son realmente necesarios. A continuación, te explico el propósito de cada puerto y las mejores prácticas para configurarlos.


Revisión de Reglas de Inbound

Estas son las reglas que definen qué tipo de tráfico puede llegar a tus instancias de Elastic Beanstalk:

1. PostgreSQL (Puerto 5432)

  • ¿Es necesario?
    Sí, este puerto es absolutamente necesario para que tu aplicación se comunique con la base de datos (RDS).
  • Configuración recomendada:
    Permitir tráfico únicamente desde el grupo de seguridad de Elastic Beanstalk.

2. HTTP (Puerto 80)

  • ¿Es necesario?
    Opcional. Este puerto permite acceso no seguro a tu aplicación. Si tu aplicación utiliza HTTPS (puerto 443), puedes eliminar esta regla.
  • Configuración recomendada:
    Si decides mantenerlo, asegúrate de configurar una redirección de HTTP a HTTPS.

3. HTTPS (Puerto 443)

  • ¿Es necesario?
    Sí, si estás utilizando conexiones seguras (SSL/TLS) en tu aplicación.
  • Configuración recomendada:
    Mantener esta regla activa para asegurar el tráfico de tu aplicación.

4. SSH (Puerto 22)

  • ¿Es necesario?
    No, para entornos de producción. Este puerto permite el acceso remoto a tus instancias, pero dejarlo abierto puede ser un riesgo de seguridad. Para producción, se recomienda desactivarlo.
  • Alternativas a SSH:
    • Usa la función de SSH de Elastic Beanstalk desde la consola de AWS, que crea sesiones seguras temporales.
    • Utiliza AWS Systems Manager (SSM) para acceder remotamente sin necesidad de habilitar SSH.

Mejores Prácticas para Entornos de Producción

En un entorno de producción, las reglas de inbound deberían ser lo más restrictivas posible para garantizar la seguridad. Aquí te dejo las configuraciones recomendadas:

Reglas de Inbound para Producción:

TipoProtocoloRango de PuertosFuenteNotas
PostgreSQLTCP5432Grupo de Seguridad de Elastic BeanstalkPermite que las instancias EC2 se conecten a la base de datos (RDS).
HTTPSTCP4430.0.0.0/0 (o IPs específicas)Permite conexiones seguras a tu aplicación.

Reglas que puedes eliminar:

  • SSH (22): No es necesario para producción. Usa AWS Systems Manager o Elastic Beanstalk SSH desde la consola.
  • HTTP (80): Si solo utilizas HTTPS, elimina esta regla y redirige el tráfico de HTTP a HTTPS.

Reglas de Inbound para Desarrollo

Si estás trabajando activamente en el desarrollo de tu aplicación, podrías necesitar acceso por SSH para depuración. Sin embargo, asegúrate de limitar el acceso a tu IP específica.

Reglas de Inbound para Desarrollo:

TipoProtocoloRango de PuertosFuenteNotas
SSHTCP22Tu IP (203.0.113.0/32)Permite acceso SSH solo desde tu IP.
PostgreSQLTCP5432Grupo de Seguridad de Elastic BeanstalkPermite conexión a la base de datos.
HTTPSTCP4430.0.0.0/0Permite conexiones seguras.
HTTPTCP800.0.0.0/0Opcional, pero útil para desarrollo.

Resumen

  • PostgreSQL (5432): Necesario para comunicar tu aplicación con RDS.
  • HTTPS (443): Requerido para conexiones seguras.
  • HTTP (80): Opcional; puede ser eliminado si usas solo HTTPS.
  • SSH (22): No necesario en producción. Usa alternativas más seguras como AWS Systems Manager.

Al seguir estas recomendaciones, podrás mejorar la seguridad y el rendimiento de tu aplicación en Elastic Beanstalk.