¿Por qué aparece un error de acceso denegado cuando intento conectarme a Amazon RDS para MySQL utilizando la autenticación de IAM?

5 minutos de lectura
0

Estoy intentando conectarme a mi instancia de Amazon Relational Database Service (Amazon RDS) para MySQL mediante la autenticación de AWS Identity Access Management (IAM). Pero, recibo un error de “Acceso denegado”: ERROR 1045 (28 000): Acceso denegado para el usuario 'root'@'10.0.4.253' (mediante contraseña: YES) ¿Cómo soluciono este problema?

Descripción corta

Si no puede conectarse a una instancia de Amazon RDS para MySQL o de base de datos de Aurora mediante la autenticación de IAM, verifique los siguientes motivos:

  • La autenticación de IAM está desactivada
  • Permisos de rol de IAM insuficientes
  • El usuario de base de datos no está configurado adecuadamente
  • Cadena de conexión incorrecta

Resolución

La autenticación de IAM está desactivada

De forma predeterminada, la autenticación de IAM está desactivada. Revise los ajustes de configuración del clúster de Amazon RDS para MySQL y asegúrese de que la autenticación de IAM esté habilitada. En la consola de Amazon RDS, puede modificar la instancia al seleccionar Database Authentication (Autenticación de base de datos). A continuación, elija Password and IAM database authentication (Autenticación de base de datos de IAM y contraseña) y Continue (Continuar) para actualizar los ajustes de configuración.

Nota: Si elije Apply Immediately (Aplicar inmediatamente) al actualizar la configuración del clúster, todas las modificaciones pendientes se aplican inmediatamente (en lugar de durante un periodo de mantenimiento). Esta acción puede provocar una interrupción prolongada en la instancia de Amazon RDS para MySQL. Para obtener más información, consulte Uso de la configuración de aplicación inmediata.

Permisos de rol de IAM insuficientes

Para conectarse correctamente a la instancia de Amazon RDS for MySQL mediante la autenticación de base de datos de IAM, debe tener acceso a la acción rds-db:connect. La acción rds-db:connect permite las conexiones a la instancia de base de datos.

Por ejemplo:

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

Nota: Reemplace db-user-name por el usuario de la cuenta de base de datos asociado a la autenticación de IAM.

Además, asegúrese de que utiliza el ID de recurso correcto (en lugar de especificar solo el ARN). Para buscar el ID de recurso de una instancia de base de datos, elija la pestaña Resource (Recurso) en la consola de administración de AWS. A continuación, elija la pestaña Configuration (Configuración) para ver el ID del recurso.

Para obtener más información sobre los elementos enumerados en el ejemplo de política de IAM, consulte Creación y uso de una política de IAM para el acceso a base de datos de IAM.

El usuario de base de datos no está configurado adecuadamente

Con Amazon RDS para MySQL, la autenticación de IAM la administra AWSAuthenticationPlugin. Por lo tanto, para conectarse a su instancia de Amazon RDS para MySQL mediante la autenticación de IAM, debe utilizar AWSAuthenticationPlugin. Para confirmar que este complemento está asociado al rol de IAM, ejecute este comando:

select user,plugin,host from mysql.user where user like '%db-user-name%';

Obtendrá un resultado similar al siguiente:

+------+-------------------------+------+
| user | plugin | host |
+------+-------------------------+------+
| root | AWSAuthenticationPlugin | % |
+------+-------------------------+------+
1 row in set (0.00 sec)

Si el rol de IAM está restringido al uso de un host específico, asegúrese de que utiliza el nombre de host correcto. Además, debe asegurarse de que dispone de los permisos adecuados para acceder a la base de datos especificada.

Para ver los permisos concedidos a un usuario, utilice esta sintaxis de comando:

show grants for <user>;

Para conceder privilegios a otro usuario, utilice esta sintaxis de comando:

grant select on <mydb>.<mytable> to <user>;

Cadena de conexión incorrecta

Al conectarse a la base de datos de Amazon RDS para MySQL, debe utilizar la opción --enable-cleartext-plugin en la cadena de conexión. La sintaxis --enable-cleartext-plugin se utiliza para pasar la contraseña y actúa como un token de autenticación.

Por ejemplo:

$ mysql -h <endpoint> -P 3306 --enable-cleartext-plugin --user=RDSConnect --password=$

La sintaxis --enable-cleartext-plugin también indica que se debe utilizar AWSAuthenticationPlugin para la conexión a la base de datos. El complemento es necesario para configurar el usuario de la base de datos y es necesario para que funcione la autenticación de IAM. Si AWSAuthenticationPlugin está configurado incorrectamente, la autenticación de IAM no funciona. Como resultado, aparecerá un error Acceso denegado cuando intente conectarse a la base de datos.

Además, dado que los tokens de autenticación constan de varios caracteres (lo que puede resultar incómodo en la línea de comandos), guarde el token en una variable de entorno. A continuación, utilice esa variable cuando se conecte a la instancia de base de datos MySQL. Por ejemplo:

RDSHOST="rdsmysql.123456789012.us-west-2.rds.amazonaws.com"
TOKEN="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 3306 --region us-west-2 --username db-user-name)"
mysql --host=$RDSHOST --port=3306 --enable-cleartext-plugin --user=db-user-name --password=$TOKEN

Para obtener más información sobre cómo conectarse a una instancia de base de datos MySQL mediante una variable del entorno, consulte Conexión a una instancia de base de datos.


Información relacionada

¿Cómo permito que los usuarios se autentiquen en una instancia de base de datos MySQL de Amazon RDS con sus credenciales de IAM?

Autenticación de bases de datos de IAM

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