Comment autoriser les utilisateurs à s'authentifier sur une instance de base de données MySQL Amazon RDS à l'aide de leurs informations d'identification IAM ?

Date de la dernière mise à jour : 22/06/2021

Je souhaite me connecter à une instance de base de données Amazon Relational Database Service (Amazon RDS) qui exécute MySQL. Je souhaite utiliser les informations d'identification AWS Identity and Access Management (IAM) au lieu d'utiliser des méthodes d'authentification natives. Comment dois-je procéder ?

Brève description

Les utilisateurs peuvent se connecter à une instance ou un cluster de base de données Amazon RDS à l'aide d'informations d'identification d'utilisateur ou de rôle IAM et d'un jeton d'authentification. L'authentification de base de données IAM est plus sécurisée que les méthodes d'authentification natives pour les raisons suivantes :

  • Les jetons d'authentification de base de données IAM sont générés à l'aide de vos clés d'accès AWS. Vous n'avez pas besoin de stocker des informations d'identification utilisateur de base de données.
  • Les jetons d'authentification ont une durée de vie de 15 minutes. Vous n'avez donc pas besoin d'appliquer la réinitialisation de mot de passe.
  • L'authentification de base de données IAM nécessite une connexion SSL (Secure Socket Layer). Toutes les données transmises depuis et vers votre instance DB seront chiffrées.
  • Si votre application s'exécute sur Amazon Elastic Compute Cloud (Amazon EC2), vous pouvez utiliser les informations d'identification du profil d'instance EC2 pour accéder à la base de données. Vous n'avez pas besoin de stocker les mots de passe de base de données sur votre instance.

Pour configurer l'authentification de base de données IAM à l'aide de rôles IAM, procédez comme suit :

1.    Activez l'authentification de base de données IAM sur l'instance de base de données.

2.    Créez un compte d'utilisateur de base de données qui utilise un jeton d'authentification AWS.

3.    Ajoutez une stratégie IAM qui mappe l'utilisateur de base de données au rôle IAM.

4.    Attachez le rôle IAM à l'instance Amazon EC2.

5.    Générez un jeton d'authentification AWS pour identifier le rôle IAM.

6.    Téléchargez le fichier de certificat racine SSL ou le fichier de groupe de certificats.

7.    Connectez-vous à l'instance de base de données à l'aide des informations d'identification liées au rôle IAM et du jeton d'authentification, ou d'un certificat SSL.

Résolution

Avant de commencer, vous devez lancer une instance de base de données qui prend en charge l'authentification de base de données IAM et une instance Amazon EC2 pour vous connecter à la base de données.

Activez l'authentification de base de données IAM sur l'instance de base de données RDS.

Vous pouvez activer l'authentification de base de données IAM à l'aide de la console Amazon RDS, d'AWS Command Line Interface (AWS CLI) ou de l'API Amazon RDS. Si vous utilisez la console Amazon RDS pour modifier l'instance de base de données, choisissez Appliquer immédiatement pour activer immédiatement l'authentification de base de données IAM. L'activation de l'authentification IAM nécessite une brève interruption de service. Pour plus d'informations sur les modifications nécessitant des interruptions de service, consultez Paramètres des instances de base de données.

Remarque : si vous choisissez Appliquer immédiatement, toutes les modifications en attente sont également appliquées immédiatement au cours de votre fenêtre de maintenance. Cela peut entraîner une interruption prolongée pour votre instance. Pour plus d'informations, consultez Utilisation du paramètre Apply Immediately (Appliquer immédiatement).

Créer un compte utilisateur de base de données qui utilise un jeton d'authentification AWS

1.    Connectez-vous au point de terminaison de l'instance ou du cluster de base de données en exécutant la commande suivante. Saisissez le mot de passe principal pour vous connecter.

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

2.    Créez un compte d'utilisateur de base de données qui utilise un jeton d'authentification AWS au lieu d'un mot de passe :

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

3.    (Facultatif) Exécutez cette commande pour demander à l'utilisateur de se connecter à la base de données à l'aide de SSL :

GRANT USAGE ON *.* TO '{dbusername}'@'%' REQUIRE SSL;

4.    Exécutez la commande exit pour fermer MySQL. Ensuite, déconnectez-vous de l'instance de base de données.

Ajoutez une politique IAM qui mappe l'utilisateur de base de données.

1.    Ouvrez la console IAM.

2.    Dans le panneau de navigation, choisissez Politiques.

3.    Choisissez Créer une politique.

4.    Saisissez une politique qui autorise l'action rds-db:connect à l'utilisateur requis. Pour plus d'informations sur la création de cette politique, voir Création et utilisation d'une politique IAM pour l'accès à la base de données IAM.

Remarque : veillez à remplacer la valeur Ressource par les informations de vos ressources de base de données, telles que votre identifiant d'instance de base de données et le nom d'utilisateur de base de données.

5.    Choisissez Next: Tags (Suivant : Balises).

6.    Choisissez Étape suivante : Vérification.

7.    Pour Nom, saisissez un nom de politique.

8.    Choisissez Créer une politique.

Créez un rôle IAM qui autorise l'accès Amazon RDS.

1.    Ouvrez la console IAM.

2.    Choisissez Rôles dans le panneau de navigation.

3.    Sélectionnez Créer un rôle.

4.    Choisissez Service AWS.

5.    Choisissez EC2.

6.    Pour Sélectionner votre cas d'utilisation, choisissez EC2, puis Étape suivante : Autorisations.

7.    Dans la barre de recherche, recherchez la politique IAM que vous avez précédemment créée dans la section « Ajouter une politique IAM qui mappe l'utilisateur de la base de données ».

8.    Choisissez Next: Tags (Suivant : Balises).

9.    Choisissez Étape suivante : Vérification.

10.    Pour Nom du rôle, saisissez le nom du rôle IAM.

11.    Choisissez Créer un rôle.

Attachez le rôle IAM à l'instance Amazon EC2.

1.    Ouvrez la console Amazon EC2.

2.    Choisissez l'instance EC2 que vous utilisez pour vous connecter à Amazon RDS.

3.    Attachez le rôle IAM que vous venez de créer à l'instance EC2.

4.    Connectez-vous à l’instance EC2 en utilisant SSH..

Générez un jeton d'authentification AWS pour identifier le rôle IAM.

Une fois que vous vous êtes connecté à votre instance Amazon EC2, exécutez la commande AWS CLI suivante pour générer un jeton d'authentification.

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

Copiez et stockez ce jeton d'authentification pour une utilisation ultérieure. Le jeton expire 15 minutes après sa création.

Remarque : si vous recevez des erreurs lors de l'exécution de commandes AWS Command Line Interface (AWS CLI), assurez-vous d'utiliser la version la plus récente d'AWS CLI.

Téléchargez le fichier de certificat racine SSL ou le fichier de solutions groupées de certificats.

Exécutez cette commande pour télécharger le certificat racine qui fonctionne pour toutes les régions :

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

Se connecter à l'instance de base de données RDS à l'aide des informations d'identification du rôle IAM et du jeton d'authentification

Après avoir téléchargé le fichier de certificat, exécutez l’une des commandes suivantes pour vous connecter à l'instance de base de données avec SSL.

Remarque : si votre application n'accepte pas les chaînes de certificats, exécutez la commande suivante pour télécharger le groupe de certificats :

$ 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})"

Selon le certificat que vous utilisez (RootCA ou Bundle), exécutez l'une des commandes suivantes :

Commande RootCA :

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

Commande Bundle :

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

Remarque : si vous utilisez un client MariaDB, l'option --enable-cleartext-plugin n'est pas nécessaire.

Connectez-vous à l'instance de base de données RDS à l'aide d'informations d'identification associées au rôle IAM et de certificats SSL

Après avoir téléchargé le fichier de certificat, connectez-vous à l'instance de base de données avec SSL. Pour plus d'informations, consultez Connexion à une instance de base de données exécutant le moteur de base de données MySQL.