Quiero conectarme a una instancia de base de datos de Amazon Relational Database Service (Amazon RDS) para MySQL. Quiero usar las credenciales de AWS Identity and Access Management (IAM) en lugar de utilizar métodos de autenticación nativos.
Solución
Nota: Utiliza una conexión de MySQL sin cifrar solo cuando el cliente y el servidor estén en la misma nube virtual privada (VPC) y la red sea de confianza.
Requisito previo: Debes iniciar una instancia de base de datos que admita la autenticación de bases de datos de IAM y una instancia de Amazon Elastic Compute Cloud (Amazon EC2) para conectarte a la base de datos.
Para verificar la configuración requerida para la autenticación de IAM, utiliza el runbook de Automatización de AWS Systems Manager AWSSupport-TroubleshootRDSIAMAuthentication. También puedes usar el runbook para solucionar problemas de conectividad con la instancia de Amazon RDS o el clúster de Amazon Aurora.
Activación de la autenticación de base de datos de IAM en la instancia de base de datos de RDS
Puedes usar la consola de Amazon RDS, la AWS CLI o la API de Amazon RDS para activar la autenticación de bases de datos de IAM.
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.
Si utilizas la consola de Amazon RDS para modificar la instancia de base de datos, selecciona Aplicar inmediatamente para activar la autenticación de la base de datos de IAM. Para obtener más información, consulta ](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.html) Instancias de base de datos de Amazon RDS[.
Nota: Si eliges Aplicar inmediatamente, cualquier modificación pendiente también se aplicará inmediatamente. Para obtener más información, consulta Uso de la configuración de la programación de modificaciones.
Creación de una cuenta de usuario de base de datos que utilice un token de autenticación de AWS
Para conectarte al punto de enlace de la instancia de base de datos o del clúster, ejecuta el siguiente comando:
mysql -h {database or cluster endpoint} -P {port number database is listening on} -u {master db username} -p
Nota: Usa tu contraseña principal para iniciar sesión.
Para crear una cuenta de usuario de base de datos que utilice la autenticación de IAM en lugar de una contraseña, ejecuta el siguiente comando:
CREATE USER {dbusername} IDENTIFIED WITH AWSAuthenticationPlugin as 'RDS';
De forma predeterminada, el usuario de la base de datos no tiene permisos. El usuario de la base de datos aparece como GRANT USAGE cuando usas SHOW GRANTS FOR {dbusername}. Para solicitar una cuenta de usuario al usar SSL para conectarte, ejecuta el siguiente comando:
ALTER USER {dbusername} REQUIRE SSL;
Para cerrar MySQL, ejecuta el comando exit. A continuación, cierra 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
Sigue estos pasos:
- Abre la consola de IAM.
- En el panel de navegación, elige Políticas.
- Selecciona Crear política.
- Introduce una política que conceda la acción rds-db:connect en el usuario requerido. 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: Asegúrate de introducir los detalles de los recursos de tu base de datos en la sección Recursos.
- Selecciona Siguiente.
- En Nombre, introduce un nombre de política.
- Selecciona Crear política.
Creación de un rol de IAM que permita el acceso a Amazon RDS
Sigue estos pasos:
- Abre la consola de IAM.
- En la página de navegación, selecciona Roles.
- Selecciona Crear rol.
- En la sección Tipo de entidad de confianza, selecciona Servicio de AWS.
- En la sección Caso de uso, para Caso de servicio o de usuario, elige EC2.
- Selecciona Siguiente.
- Usa la barra de búsqueda para encontrar la política de IAM.
- Selecciona Siguiente.
- En Nombre del rol, introduce un nombre para este rol de IAM.
- Selecciona Crear rol.
Asociación del rol de IAM a la instancia de Amazon EC2
Sigue estos pasos:
- Abre la consola de Amazon EC2.
- En el panel de navegación, elige Instancias y, a continuación, selecciona la instancia que utilizas para conectarte a Amazon RDS.
- Adjunta el rol de IAM a la instancia de EC2.
- Usa SSH para conectarte a la instancia de EC2.
Generación de un token de autenticación de AWS para identificar el rol de IAM
Tras conectarte a tu instancia de Amazon EC2, ejecuta el siguiente comando de AWS CLI generate-db-auth-token para generar un token de autenticación:
aws rds generate-db-auth-token --hostname {db or cluster endpoint} --port 3306 --username {db username}
Copia y almacena el token de autenticación para usarlo más adelante. O bien, utiliza AWS SDK para.NET para generar un token.
Descarga del archivo de agrupación de certificados raíz SSL
Para descargar una agrupación de certificados para todas las regiones de AWS, consulta Agrupaciones de certificados por región de AWS.
Uso de las credenciales del rol de IAM y el token de autenticación para conectarse a la instancia de base de datos de RDS
Tras descargar el archivo del certificado, ejecuta el siguiente comando para usar SSL para conectarte a la instancia de base de datos:
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})"
mysql --host=$RDSHOST --port=3306 --ssl-ca=/sample_dir/global-bundle.pem --enable-cleartext-plugin --user=jane_doe --password=$TOKEN
Nota: Si usas un cliente de MariaDB, no incluyas la opción —enable-cleartext-plugin.
Uso de las credenciales de rol de IAM y los certificados SSL para conectarse a la instancia de base de datos de RDS
Tras descargar el archivo del certificado, usa SSL para conectarte a la instancia de base de datos.
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?