¿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?

8 minutos de lectura
0

Quiero conectarme a una instancia de base de datos (DB) de Amazon Relational Database Service (Amazon RDS) que ejecuta MySQL. Quiero usar las credenciales de AWS Identity and Access Management (IAM) en lugar de utilizar métodos de autenticación nativos.

Breve descripción

Los usuarios pueden conectarse a una instancia de base de datos o clúster de Amazon RDS mediante credenciales de rol o de usuario de IAM y un token de autenticación. La autenticación de bases de datos de IAM es más segura que los métodos de autenticación nativos debido a lo siguiente:

  • Los tokens de autenticación de bases de datos de IAM se generan con sus claves de acceso de AWS. 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 forzar el restablecimiento de contraseñas.
  • La autenticación de bases de datos de IAM requiere una conexión de capa de sockets seguros (SSL). Todos los datos transmitidos hacia y desde su instancia de base de datos están cifrados.
  • Si su solicitud se ejecuta en Amazon Elastic Compute Cloud (Amazon EC2), puede usar las credenciales de su perfil de instancia de 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 base de datos de IAM en la instancia de base de datos de RDS.
  2. Cree una cuenta de usuario de base de datos que utilice un token de autenticación de AWS.
  3. Añada una política de IAM que asigne el usuario de la base de datos al rol de IAM.
  4. Cree un rol de IAM que permita el acceso a Amazon RDS.
  5. Asocie el rol de IAM a la instancia de Amazon EC2.
  6. Genere un token de autenticación de AWS para identificar el rol de IAM.
  7. Descargue el archivo de certificado raíz SSL o el archivo de paquete de certificados.
  8. Conéctese a la instancia de base de datos de RDS mediante las credenciales del rol de IAM y el token de autenticación.
  9. Conéctese a la instancia de base de datos de RDS mediante credenciales de rol de IAM y certificados SSL.

Solución

Antes de empezar, debe lanzar una instancia de base de datos que admita la autenticación de bases de datos de IAM y una instancia de Amazon EC2 para conectarse a la base de datos.

Activación de la autenticación de base de datos de IAM en la instancia de base de datos de RDS

Puede activar la autenticación de bases de datos de IAM mediante la consola de Amazon RDS, la Interfaz de la línea de comandos de AWS (AWS CLI) o la API de Amazon RDS. Si utiliza la consola de Amazon RDS para modificar la instancia de base de datos, seleccione Aplicar inmediatamente para activar la autenticación de la base de datos de IAM. La activación de la autenticación de IAM requiere una breve interrupción. Para obtener más información sobre las modificaciones que requieren interrupciones, consulte Instancias de base de datos de Amazon RDS.

Nota: Si selecciona Aplicar inmediatamente, las modificaciones pendientes también se aplicarán inmediatamente en lugar de durante el período de mantenimiento. Esto puede provocar una interrupción prolongada de su instancia. Para obtener más información, consulte Uso de la configuración de aplicación inmediata.

Creación de una cuenta de usuario de base de datos que utilice un token de autenticación de AWS

1.    Ejecute el siguiente comando para conectarse a la instancia de base de datos o al punto de conexión del clúster. Introduzca la contraseña maestra para iniciar sesión.

$ mysql -h {database or cluster endpoint} -P {port number database is listening on} -u {master db username} -p

2.    Cree una cuenta de usuario de base de datos que utilice un token de autenticación de AWS en lugar de una contraseña:

CREATE USER {dbusername} IDENTIFIED WITH AWSAuthenticationPlugin as 'RDS';

3.    De forma predeterminada, el usuario de la base de datos se crea sin privilegios. Esto aparece como GRANT USAGE cuando ejecuta SHOW GRANTS FOR {dbusername}. Para solicitar una cuenta de usuario con el fin de conectarse mediante SSL, ejecute este comando:

ALTER USER {dbusername} REQUIRE SSL;

4.    Ejecute el comando exit para cerrar MySQL. A continuación, cierre la sesión en la instancia de base de datos.

Adición de una política de IAM que asigne el usuario de la base de datos al rol de IAM

1.    Abra la consola de IAM.

2.    Seleccione Políticas en el panel de navegación.

3.    Seleccione Crear política.

4.    Introduzca una política que permita ejecutar la acción rds-db:connect al usuario requerido. Para obtener más información sobre la creación de esta política, consulte Creación y uso de una política de IAM para el acceso a bases de datos de IAM.

Nota: Asegúrese de editar el valor de Resource con los detalles de los recursos de la base de datos, como el identificador de la instancia de base de datos y el nombre de usuario de la misma.

5.    Seleccione Siguiente: Etiquetas.

6.    Seleccione Siguiente: Revisar.

7.    En Nombre, introduzca un nombre de política.

8.    Seleccione Crear política.

Creación de un rol de IAM que permita el acceso a Amazon RDS

1.    Abra la consola de IAM.

2.    Seleccione Roles en el panel de navegación.

3.    Seleccione Crear rol.

4.    Seleccione Servicio de AWS.

5.    Seleccione EC2.

6.    En Seleccionar el caso de uso, elija EC2 y luego Siguiente: Permisos.

7.    En la barra de búsqueda, busque la política de IAM que creó anteriormente en la sección «Adición de una política de IAM que asigne el usuario de la base de datos».

8.    Seleccione Siguiente: Etiquetas.

9.    Seleccione Siguiente: Revisar.

10.    En Nombre del rol, introduzca un nombre para este rol de IAM.

11.    Seleccione Crear rol.

Asociación del rol de IAM a la instancia de Amazon EC2

1.    Abra la consola de Amazon EC2.

2.    Seleccione la instancia de EC2 que utiliza para conectarse a Amazon RDS.

3.    Asocie el rol de IAM recién creado a la instancia de EC2.

4.    Conéctese a su instancia de EC2 mediante SSH.

Generación de un token de autenticación de AWS para identificar el rol de IAM

Tras conectarse a su instancia de Amazon EC2, ejecute el siguiente comando de AWS CLI para generar un token de autenticación.

Nota: Si se muestran errores al ejecutar los comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), compruebe si está ejecutando una versión reciente de la AWS CLI.

$ aws rds generate-db-auth-token --hostname {db or cluster endpoint} --port 3306 --username {db username}

Copie y almacene este token de autenticación para usarlo más adelante. El token caduca a los 15 minutos de su creación.

También puede generar un token mediante un SDK de AWS.

Descarga del archivo del certificado raíz SSL o el archivo de paquete de certificados

Ejecute este comando para descargar el certificado raíz, que funciona en todas las regiones:

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

Conexión a la instancia de base de datos de RDS mediante las credenciales del rol de IAM y el token de autenticación

Tras descargar el archivo del certificado, ejecute uno de los siguientes comandos para conectarse a la instancia de base de datos con SSL.

Nota: Si su aplicación no acepta cadenas de certificados, ejecute el siguiente comando para descargar el paquete de certificados:

$ wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem

RDSHOST="rdsmysql.abcdefghijk.us-west-2.rds.amazonaws.com"
TOKEN="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 3306 --region us-west-2 --username {db username})"

Según el certificado que utilice (RootCA o Bundle), ejecute uno de los siguientes comandos:

Comando RootCA:

mysql --host=$RDSHOST --port=3306 --ssl-ca=/sample_dir/rds-ca-2019-root.pem --enable-cleartext-plugin --user={db username} --password=$TOKEN

Comando Bundle:

mysql --host=$RDSHOST --port=3306 --ssl-ca=/sample_dir/rds-combined-ca-bundle.pem --enable-cleartext-plugin --user={db username} --password=$TOKEN

Nota: Si utiliza un cliente de MariaDB, la opción --enable-cleartext-plugin no es necesaria.

Conexión a la instancia de base de datos de RDS mediante credenciales de rol de IAM y certificados SSL

Tras descargar el archivo del certificado, conéctese a la instancia de base de datos con SSL. Para obtener más información, consulte Conexión a una instancia de base de datos que ejecuta el motor de base de datos de MySQL.

Información relacionada

Autenticación de bases de datos de IAM para MariaDB, MySQL y PostgreSQL

¿Cuáles son los privilegios mínimos necesarios para que un usuario pueda crear, eliminar, modificar, hacer copias de seguridad y recuperar una instancia de base de datos de Amazon RDS?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año