¿Cómo me conecto a Amazon RDS para PostgreSQL o a Amazon Aurora compatible con PostgreSQL mediante la autenticación de IAM?

6 minutos de lectura
0

Tengo una instancia de base de datos de Amazon Relational Database Service (Amazon RDS) para PostgreSQL o la edición de Amazon Aurora compatible con PostgreSQL. Quiero usar la autenticación de AWS Identity and Access Management (IAM) para conectarme a la instancia.

Breve descripción

La autenticación de bases de datos de IAM es más segura que los métodos de autenticación nativos por los motivos siguientes:

  • IAM usa sus claves de acceso de AWS para generar tokens de autenticación de bases de datos. No necesita almacenar las credenciales de usuario de la base de datos.
  • Los tokens de autenticación tienen una vida útil de 15 minutos, por lo que no necesita aplicar restablecimientos de contraseña.
  • La autenticación de bases de datos de IAM requiere una conexión SSL. Esto cifra todos los datos que transmite a su instancia de base de datos de Amazon RDS y desde dicha instancia.
  • Si su aplicación se ejecuta en Amazon Elastic Compute Cloud (Amazon EC2), puede usar las credenciales del perfil de instancia de Amazon EC2 para acceder a la base de datos. No necesita almacenar las contraseñas de la base de datos en su instancia.

Para configurar la autenticación de bases de datos de IAM mediante roles de IAM, siga estos pasos:

  1. Active la autenticación de bases de datos de IAM en la instancia de base de datos de RDS.
  2. Cree un usuario de IAM y adjunte una política de IAM que asigne el usuario de la base de datos al rol de IAM.
  3. Adjunte el rol de IAM a la instancia de EC2.
  4. Genere un token de autenticación de AWS para identificar el rol de IAM.
  5. Descargue el archivo del certificado raíz SSL o el archivo del paquete de certificados.
  6. Para conectarse a la instancia de base de datos de RDS, utilice sus credenciales de rol de IAM y el token de autenticación o un certificado SSL.

Si ejecuta MySQL, consulte ¿Cómo puedo permitir que los usuarios se autentiquen en una instancia de base de datos de Amazon RDS para MySQL con sus credenciales de IAM?

Solución

Antes de empezar, complete los requisitos previos siguientes:

  • Inicie una instancia de base de datos de Amazon RDS para PostgreSQL o un clúster de Aurora compatible con PostgreSQL que admita la autenticación de bases de datos de IAM.
  • Inicie una instancia de EC2 para conectarse a la base de datos

Para obtener más información, consulte Autenticación de bases de datos de IAM para Aurora y Autenticación de bases de datos de IAM para Amazon RDS.

Para conectarse a una instancia de base de datos de RDS o a un clúster de base de datos de Aurora compatible con PostgreSQL, utilice la autenticación de base de datos de IAM para PostgreSQL:

  1. Active la autenticación de IAM en la instancia de base de datos de RDS o en el clúster de Aurora.

  2. Cree un usuario de IAM y, a continuación, adjunte la política siguiente:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "rds-db:connect"
          ],
          "Resource": [
            "arn:aws:rds-db:REGION:ACCOUNT:dbuser:RESOURCE_ID/iamuser"
          ]
        }
      ]
    }

    Nota: Sustituya iamuser por la información de usuario de IAM.

  3. Inicie sesión en su instancia de base de datos de Amazon RDS para PostgreSQL o en su clúster de Aurora compatible con PostgreSQL como usuario principal:

    psql

    psql -h {database or cluster endpoint} -U {Master username} -d {database name}

    pgAdmin

    Elija Servidores en el panel de navegación de pgAdmin. A continuación, elija el nombre del servidor e introduzca la contraseña del usuario principal.

  4. Cree un usuario secundario que tenga el mismo nombre que el usuario de IAM:

    CREATE USER iamuser WITH LOGIN;
    GRANT rds_iam TO iamuser;
  5. Ejecute generate-db-auth-token con el nombre de usuario que creó. De este modo, se crea una contraseña temporal que se utilizará en un paso posterior:

    [ec2-user@ip-172-31-24-237 ~]$ export RDSHOST="aurorapg-ssl.cluster-XXXXXXXXXXX.us-west-2.rds.amazonaws.com"
    [ec2-user@ip-172-31-24-237 ~]$ export PGPASSWORD="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 5432 --region us-west-2 --username iamuser)"
    [ec2-user@ip-172-31-24-237 ~]$ echo $PGPASSWORD
    aurorapg-ssl.cluster-XXXXXXX.us-west-2.rds.amazonaws.com:5432/?Action=connect&DBUser=iamuser&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=900&X-Amz-Credential=AKIA2O5GXNVDTAMABZFE%2F20190909%2Fus-west-2%2Frds-db%2Faws4_request&X-Amz-SignedHeaders=host&X-Amz-Date=20190909T171907Z&X-Amz-Signature=ead28003477c3082e5a17529ac8316db4f4bdf2fa8f79d3aaea806e9bafa2673
    [ec2-user@ip-172-31-24-237 ~]$
  6. Para crear una nueva conexión de servidor en pgAdmin, seleccione la pestaña General y desactive la casilla Conectarse ahora. En la pestaña Conexión, introduzca el nombre de host, el puerto y el nombre de usuario, pero no introduzca la contraseña todavía. En la pestaña SSL, defina el modo SSL en Requerir y guarde la conexión al servidor.

  7. (Opcional) En la pestaña SSL, puede cambiar el modo SSL a Verificación completa. En el modo SSL seleccionado, introduzca la ruta del certificado. Para descargar la ruta, ejecute el comando siguiente:

    wget https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem

    Nota: Los certificados raíz de 2015 están vencidos desde el año 2020. Para pasarse a un certificado raíz de 2019, consulte Rotar certificados SSL/TLS.

    Si su aplicación no acepta cadenas de certificados, descargue el paquete de certificados que incluye los certificados raíz antiguos y nuevos:

    $ wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
  8. Después de crear el servidor, conéctese al servidor. Introduzca el token temporal que generate-db-auth-token generó para el usuario iamuser cuando se le solicite.

Para psql, ejecute el siguiente comando para conectarse. En este ejemplo, se utiliza la variable de entorno $PGPASSWORD que configuró al generar el token. Esta variable inicia la conexión:

psql -h aurorapg-ssl.cfkx5hi8csxj.us-west-2.rds.amazonaws.com -p 5432 "sslmode=verify-full sslrootcert=rds-ca-2019-root.pem dbname=aurora_pg_ssl user=iamuser"

Nota: Cada token caduca 15 minutos después de generarlo. Si intenta restablecer la conexión con el mismo token, la conexión fallará. Debe generar un nuevo token.

Si sigue apareciendo un error similar al error de autenticación PAM para su usuario, compruebe si la cuenta de AWS forma parte de una organización de AWS Organizations. Si la cuenta forma parte de una organización, añada rds-db:* a la política de control de servicio (SCP) de la organización a la que pertenece la cuenta. Además, compruebe si hay una jerarquía del usuario o rol de IAM que no tenga el permiso rds-db. Para obtener más información, consulte Cómo utilizar las políticas de control de servicio para establecer barreras de protección de permisos en las cuentas de su organización de AWS.

Información relacionada

Uso de la autenticación de IAM con Aurora compatible con PostgreSQL