Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
¿Cómo soluciono los errores que recibo 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?
Quiero conectarme a mi instancia de Amazon Relational Database Service (Amazon RDS) para PostgreSQL o a un clúster de edición compatible con PostgreSQL de Amazon Aurora. Cuando uso la autenticación de AWS Identity Access Management (IAM), aparece el error «PAM authentication failed for user».
Solución
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Solución de problemas de AWS CLI. Además, asegúrese 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. Active la autenticación de IAM en su instancia de 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 conectarse a la instancia de base de datos, actualice la política para incluir la acción rds-db:connect.
Ejemplo de política:
{ "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úrese de usar el ID de recurso y el ARN correctos en la política. Para buscar el ID de recurso de una instancia de base de datos, seleccione la instancia de base de datos o el clúster en la consola de Amazon RDS y, a continuación, elija la pestaña Configuración.
Para obtener más información, consulte 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, ejecute el siguiente comando en el cliente PostgreSQL:
\du
Resultado esperado:
List of roles Role name | Attributes | Member of ----------------+------------------------------------------------------------+------------------------------------------------------------- db_user_name | | {rds_iam} postgres | Create role, Create DB | {rds_superuser} | Password valid until infinity |
También puede 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, ejecute 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, guarde el token de autenticación en una variable de entorno. A continuación, utilice la variable de entorno cuando se conecte a su clúster de Aurora PostgreSQL.
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 su instancia de base de datos están cifrados. Para evitar el error anterior, asegúrese 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.
Está usando un rol de IAM incorrecto
Es posible que reciba un mensaje de error porque está usando un rol de IAM incorrecto para generar el token de autenticación. Para comprobar el rol asumido por el usuario de IAM actual, ejecute el comando get-caller-identity:
aws sts get-caller-identity
Si el rol asumido es incorrecto, [cambie de un usuario de IAM al rol de IAM correcto o asuma el rol correcto](https://repost.aws/es/knowledge-center/iam-assume-role-cli).
Si sigue recibiendo un mensaje de error, compruebe si la cuenta de AWS forma parte de una organización de AWS Organizations. Si la cuenta forma parte de una organización, cree una política de control de servicio (SCP) que permita rds-db:. Para obtener más información, consulte Efectos de las SCP en los permisos.
Además, compruebe si hay una jerarquía del usuario 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.
Si usa límites de permisos para las entidades de IAM, permita la acción rds-db:connect para su usuario o rol de IAM. Para modificar los límites de permisos de un usuario, consulte Cómo modificar el límite de permisos de un usuario.
Vídeos relacionados


Contenido relevante
- preguntada hace 3 meseslg...
- preguntada hace un meslg...
- preguntada hace 3 meseslg...
- preguntada hace un meslg...
- preguntada hace 2 meseslg...