Pourquoi un message d'erreur « Accès refusé » s'affiche-t-il lorsque j'essaie de me connecter à Amazon RDS for MySQL à l'aide de l'authentification IAM ?

Lecture de 5 minute(s)
0

Je souhaite me connecter à mon instance Amazon Relational Database Service (Amazon RDS) for MySQL à l'aide de l'authentification AWS Identity Access Management (IAM). Cependant, je reçois un message d'erreur « Accès refusé » : « ERREUR 1045 (28000) : accès refusé à l'utilisateur 'root'@'10.0.4.253' (utilisant le mot de passe : OUI) »

Brève description

La résolution suivante identifie les raisons possibles pour lesquelles vous ne pouvez pas connecter une instance de base de données Amazon RDS for MySQL ou Aurora à l'aide de l'authentification IAM.

Résolution

L'authentification IAM est désactivée

L'authentification IAM est désactivée par défaut. Vérifiez les paramètres de configuration de votre cluster Amazon RDS for MySQL et assurez-vous que l'authentification IAM est désactivée. Dans la console Amazon RDS, modifiez l'instance en choisissant Authentification de base de données. Choisissez ensuite Authentification par mot de passe et base de données IAM, puis cliquez sur Continuer pour mettre à jour vos paramètres de configuration.

Remarque : si vous choisissez Mettre à jour immédiatement lors de la mise à jour des paramètres de configuration de votre cluster, toutes les modifications en attente sont appliquées immédiatement plutôt que dans une fenêtre de maintenance. Cette action peut provoquer une interruption prolongée de votre instance Amazon RDS for MySQL. Pour en savoir plus, reportez-vous à Utilisation du paramètre Mettre à jour immédiatement.

Autorisations de rôle IAM insuffisantes

Pour vous connecter à votre instance Amazon RDS for MySQL à l'aide de l'authentification de base de données IAM, vous devez avoir accès à l'action rds-db:connect. L'action rds-db:connect autorise les connexions à l'instance de base de données.

Par exemple :

{
  "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"
      ]
    }
  ]
}

Remarque : remplacez db-user-name par l'utilisateur du compte de base de données associé à l'authentification IAM.

Assurez-vous d'utiliser le bon identifiant de ressource au lieu de spécifier uniquement l'ARN. Pour trouver l'ID de ressource d'une instance de base de données, choisissez l'onglet Ressource dans la console de gestion AWS. Choisissez ensuite l'onglet Configuration pour afficher l'ID de la ressource.

Pour en savoir plus, reportez-vous à Création et utilisation d'une politique IAM pour l'accès à la base de données IAM.

Si vous utilisez une politique de contrôle des services, assurez-vous que celle-ci autorise les connexions à l'instance de base de données. Pour plus d'informations, reportez-vous à Création, mise à jour et suppression de politiques de contrôle des services.

L'utilisateur de la base de données n'est pas correctement configuré

Avec Amazon RDS for MySQL, l'authentification IAM est gérée par AWSAuthenticationPlugin. Pour vous connecter à votre instance Amazon RDS for MySQL à l'aide de l'authentification IAM, utilisez AWSAuthenticationPlugin. Pour vérifier que ce plug-in est associé à votre rôle IAM, exécutez la commande suivante :

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

Vous recevez un résultat similaire à celui-ci :

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

Si le rôle IAM est limité à l'utilisation d'un hôte spécifique, assurez-vous d'utiliser le bon nom d'hôte. Assurez-vous également que vous disposez des autorisations nécessaires pour accéder à la base de données spécifiée.

Pour afficher les autorisations accordées à un utilisateur, utilisez la syntaxe de commande suivante :

show grants for <user>;

Pour accorder des privilèges à un autre utilisateur, utilisez la syntaxe de commande suivante : Pour en savoir plus, reportez-vous à la Déclaration GRANT (sur le site Web de MySQL).

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

Chaîne de connexion incorrecte

Pour vous connecter à la base de données Amazon RDS for MySQL, utilisez l'option --enable-cleartext-plugin dans votre chaîne de connexion. La syntaxe --enable-cleartext-plugin agit comme un jeton d'authentification.

Par exemple :

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

La syntaxe --enable-cleartext-plugin indique également que AWSAuthenticationPlugin doit être utilisé pour la connexion à la base de données. Le plug-in est nécessaire lors de la configuration de l'utilisateur de la base de données. Si le module AWSAuthenticationPlugin n'est pas correctement configuré, l'authentification IAM ne fonctionne pas. Dans ce cas, le message d'erreur Accès refusé s'affiche lorsque vous essayez de vous connecter à votre base de données.

Remarque : si vous utilisez un client MariaDB, la syntaxe --enable-cleartext-plugin n'est pas requise. Commencez par enregistrer le jeton plutôt dans une variable d'environnement. Utilisez ensuite cette variable lorsque vous vous connectez à votre instance de base de données MySQL. Par exemple :

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

Pour en savoir plus sur la façon de se connecter à une instance de base de données MySQL à l'aide d'une variable d'environnement, reportez-vous à Connexion à une instance de base de données.

Informations connexes

Comment puis-je autoriser les utilisateurs à s'authentifier auprès d'une instance de base de données Amazon RDS for MySQL à l'aide de leurs informations d'identification IAM ?

Authentification de base de données IAM

Authentification de base de données IAM pour MariaDB, MySQL et PostgreSQL