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.
Descripción corta
La autenticación de bases de datos de IAM es más segura que los métodos de autenticación nativos. Para obtener más información, consulta Autenticación de bases de datos de IAM para MariaDB, MySQL y PostgreSQL.
Para usar los roles de IAM para configurar la autenticación de bases de datos de IAM, sigue estos pasos:
- Activa la autenticación de bases de datos de IAM en la instancia de base de datos de RDS.
- Crea un usuario de IAM y, a continuación, adjunta una política de IAM que asigne el usuario de la base de datos al rol de IAM.
- Adjunta el rol de IAM a la instancia de Amazon Elastic Compute Cloud (Amazon EC2).
- Para identificar el rol de IAM, genera un token de autenticación de AWS.
- Descarga el archivo de certificado raíz SSL o el archivo de paquete de certificados.
- Para conectarte a la instancia de base de datos de RDS, utiliza tus credenciales de rol de IAM y el token de autenticación o un certificado SSL.
Si ejecutas MySQL, consulta ¿Cómo puedo permitir que los usuarios se autentiquen en una instancia de base de datos de MySQL de Amazon RDS con sus credenciales de IAM?
Resolución
Requisitos previos
Completa los siguientes requisitos previos:
- Inicio de 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
- Inicio de una instancia de EC2 para conectarse a la base de datos
Para obtener más información, consulta Autenticación de bases de datos de IAM para Aurora y Autenticación de bases de datos de IAM para Amazon RDS.
Para verificar la configuración necesaria para la autenticación de IAM con una instancia de Amazon RDS o un clúster de Aurora, o para solucionar problemas de autenticación de IAM, utiliza el runbook AWSSupport-TroubleshootRDSIAMAuthentication. Para obtener más información, consulta AWSSupport-TroubleshootRDSIAMAuthentication.
Uso de la autenticación de bases de datos de IAM
Para conectarte a una instancia de base de datos de RDS o a un clúster de base de datos de Aurora compatible con PostgreSQL, utiliza la autenticación de base de datos de IAM para PostgreSQL:
-
Activa la autenticación de IAM en la instancia de base de datos de RDS o en el clúster de Aurora.
-
Crea un usuario de IAM y, a continuación, adjunta 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: Sustituye iamuser por la información del usuario de IAM.
-
Inicia sesión en tu instancia de base de datos de Amazon RDS para PostgreSQL o en tu clúster de Aurora compatible con PostgreSQL como usuario principal:
psql
psql -h {database or cluster endpoint} -U {Master username} -d {database name}
pgAdmin
Selecciona Servidores en el panel de navegación de pgAdmin. A continuación, selecciona el nombre del servidor e introduce la contraseña del usuario principal.
-
Crea un usuario secundario que tenga el mismo nombre que el usuario de IAM:
CREATE USER iamuser WITH LOGIN; GRANT rds_iam TO iamuser;
-
Ejecuta generate-db-auth-token con el nombre de usuario que creaste. Con esta acción, 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 ~]$
-
Para crear una nueva conexión de servidor en pgAdmin, selecciona la pestaña General y desactiva la casilla Conectarse ahora. En la pestaña Conexión, introduce el nombre de host, el puerto y el nombre de usuario, pero no introduzcas la contraseña todavía. En la pestaña SSL, define el modo SSL en Requerir y, a continuación, guarda la conexión al servidor.
-
(Opcional) Puedes cambiar el modo SSL a verificación-completa en la pestaña SSL. En el modo SSL seleccionado, introduce la ruta del certificado. Para descargar la ruta, ejecuta el comando siguiente:
wget https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem
Si tu aplicación no acepta cadenas de certificados, descarga el paquete de certificados que incluye los certificados raíz antiguos y nuevos:
$ wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
-
Conéctate al servidor. Cuando se te solicite, introduce el token temporal que generate-db-auth-token generó para el usuario iamuser.
Para psql, ejecuta el siguiente comando para conectarte. En este ejemplo, se utiliza la variable de entorno $PGPASSWORD que configuraste 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 vence 15 minutos después de generarlo. Si intentas restablecer la conexión con el mismo token, se produce un error en la conexión. Debes generar un nuevo token.
Si sigue apareciendo un error similar a PAM authentication failed for your user, comprueba si la cuenta de AWS forma parte de una organización de AWS Organizations. Si la cuenta forma parte de una organización, agrega rds-db:* a la política de control de servicio (SCP) de la organización a la que pertenece la cuenta. Además, comprueba si hay una jerarquía del usuario o rol de IAM que no tenga el permiso rds-db.
Para obtener más información, consulta How to use service control policies to set permission guardrails across accounts in your AWS Organization (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).
Información relacionada
Uso de la autenticación de IAM con Aurora compatible con PostgreSQL
Rotar certificados SSL/TLS