Saltar al contenido

¿Cómo soluciono los errores cuando uso la autenticación de IAM para conectarme a una instancia de Amazon RDS para PostgreSQL o a un clúster de Aurora PostgreSQL?

5 minutos de lectura
0

Se producen errores cuando uso la autenticación de AWS Identity Access Management (IAM) para conectarme a mi instancia de Amazon Relational Database Service (Amazon RDS) para PostgreSQL o a un clúster de edición compatible con Amazon Aurora PostgreSQL.

Breve descripción

Es posible que se muestre el mensaje de error «PAM authentication failed for user» cuando ocurra lo siguiente:

  • La autenticación de IAM está desactivada
  • La política de IAM no incluye la acción rds-db:connection
  • El rol rds_iam no está asociado al usuario de la base de datos
  • La conexión es incorrecta
  • Se utiliza un rol de IAM incorrecto

Resolución

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

La autenticación de IAM está desactivada

De forma predeterminada, la autenticación de IAM está desactivada. Activa la autenticación de IAM en tu instancia de Amazon RDS para PostgreSQL o en un clúster compatible con Aurora PostgreSQL.

La política de IAM no incluye la acción rds-db:connect

Para usar la autenticación de bases de datos de IAM para conectarte a la instancia de base de datos, actualiza la política para incluir la acción rds-db:connect.

A continuación se muestra una política de ejemplo:

{    "Version": "2012-10-17",  
    "Statement": [  
        {  
            "Effect": "Allow",  
            "Action": [  
                "rds-db:connect"  
            ],  
            "Resource": [  
                " arn:aws:rds-db:region:account-id:dbuser:(DbiResourceId for RDS PostgreSQL or DbClusterResourceId for Aurora PostgreSQL)/db_user_name"  
            ]  
        }  
    ]  
}

Nota: Asegúrate de utilizar el ID de recurso y el nombre de recurso de Amazon (ARN) correctos en la política.

Para buscar el ID de recurso de una instancia de base de datos, selecciona la instancia de base de datos o el clúster en la consola de Amazon RDS y, a continuación, elige la pestaña Configuración. Para obtener más información, consulta Creación y uso de una política de IAM para el acceso a bases de datos de IAM.

Nota: La autenticación de IAM no admite claves de contexto de condición global específicas del servicio en el elemento de condición de las declaraciones de política.

El rol rds_iam no está asociado al usuario de la base de datos

Para usar la autenticación de IAM con PostgreSQL, el usuario de la base de datos debe asumir el rol rds_iam. Para confirmar que este rol está asociado al usuario, ejecuta el siguiente comando en el cliente PostgreSQL:

\du

El resultado esperado es el siguiente:


                                         List of rolesRole name       |                         Attributes                         | Member of                            
----------------+------------------------------------------------------------+-------------------------------------------------------------  
db_user_name    |                                                            | {rds_iam}                                  
postgres        | Create role, Create DB                                     | {rds_superuser}            
                | Password valid until infinity                              |

También puedes ejecutar la siguiente consulta en cualquier plataforma:

SELECT r.rolname,       ARRAY(  
           SELECT b.rolname  
           FROM pg_catalog.pg_auth_members m  
           JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid)  
           WHERE m.member = r.oid  
       ) AS memberof  
FROM pg_catalog.pg_roles r  
WHERE r.rolname !~ '^pg_'  
ORDER BY 1;

Para crear un usuario y conceder el rol rds_iam, ejecuta el siguiente comando:

CREATE USER db_user_name WITH LOGIN;GRANT rds_iam TO db_user_name;

La conexión es incorrecta

Los tokens de autenticación incluyen varios caracteres que pueden resultar difíciles de usar en la línea de comandos. En su lugar, guarda el token de autenticación en una variable de entorno. A continuación, utiliza la variable de entorno cuando te conectes a tu clúster de Aurora PostgreSQL.

A continuación se muestra un ejemplo de generación de tokens de autenticación con variables de entorno:

export RDSHOST='aurorapostgresql.cluster-abcdef12ghi.us-east-1.rds.amazonaws.com'export PGPASSWORD="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 5432 --region us-east-1 --username db_user_name)"  
psql "host=$RDSHOST port=5432 sslmode=verify-full sslrootcert=global-bundle.pem dbname=postgres user=db_user_name password=$PGPASSWORD"

Cuando el cliente intenta conectarse a la instancia de base de datos sin una conexión SSL/TLS, aparece el siguiente error:

«FATAL: no pg_hba.conf entry for host "host.ip", user »<username>«, database "postgres", SSL off FATAL: password authentication failed for user "db_user_name"»

La autenticación de bases de datos de IAM requiere una conexión SSL/TLS, porque todos los datos que transmite a y desde tu instancia de base de datos están cifrados. Para evitar el error anterior, asegúrate de usar una conexión SSL/TLS. Se recomienda utilizar la opción sslmode como verify-full y proporcionar el certificado en la opción sslrootcert de la cadena de conexión.

Para descargar el certificado de autoridad de certificación (CA) más reciente, consulte Uso de SSL/TLS para cifrar una conexión a un clúster de base de datos.

Se utiliza un rol de IAM incorrecto

Es posible que recibas un mensaje de error porque estás usando un rol de IAM incorrecto para generar el token de autenticación. Para comprobar el rol asumido por el usuario de IAM actual, ejecuta el comando get-caller-identity:

aws sts get-caller-identity

Si el rol asumido es incorrecto, [cambia de un usuario de IAM al rol de IAM correcto o asume el rol correcto](https://repost.aws/es/knowledge-center/iam-assume-role-cli). Si sigues recibiendo un mensaje de error, comprueba si la cuenta de AWS forma parte de una organización de AWS Organizations. Si la cuenta forma parte de una organización, crea una política de control de servicio (SCP) que permita rds-db:. Para obtener más información, consulta Efectos de las SCP en los permisos.

Además, comprueba si hay una jerarquía del usuario de IAM que no tenga el permiso rds-db:. Para obtener más información, consulta Cómo utilizar las políticas de control de servicio para establecer barreras de protección de permisos en las cuentas de tu organización de AWS.
Si usas límites de permisos para las entidades de IAM, permite la acción rds-db:connect para tu usuario o rol de IAM. Para modificar los límites de permisos de un usuario, consulta Cómo modificar el límite de permisos de un usuario.

OFICIAL DE AWSActualizada hace 6 meses