Comment autoriser les utilisateurs à se connecter à 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 : 14/08/2020

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 les informations d'identification de l'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 des réinitialisations de mot de passe.
  • L'authentification de base de données IAM nécessite une connexion SSL (secure socket layer), de sorte que toutes les données transmises vers et depuis votre instance de base de données soient 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 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, assurez-vous que vous avez lancé une instance de base de données qui prend en charge l'authentification de base de données IAM et une instance EC2 pour vous connecter à la base de données.

Activer 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, de l'interface de ligne de commande AWS (AWS CLI) ou de l'API Amazon RDS. Si vous utilisez la console Amazon RDS pour modifier l'instance de base de données, sélectionnez Apply Immediately (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 Apply Immediately (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 Appliquer immédiatement.

Créer un compte d'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.

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

1.    Ouvrez la console IAM, puis sélectionnez Rôles dans le panneau de navigation.

2.    Choisissez Create role (Créer un rôle), AWS service, (Service AWS), puis EC2.

3.    Pour Select your use case (Sélectionner votre cas d'utilisation), choisissez EC2, puis Next : Permissions (Étape suivante : Autorisations).

4.    Dans la barre de recherche, saisissez RDS. Ensuite, sélectionnez une stratégie basée sur une identité, telle qu'AmazonRDSFullAccess, ou utilisez une stratégie IAM Amazon RDS personnalisée qui accorde moins de privilèges.

5.    Choisissez Étape suivante : vérification.

6.    Pour Role Name (Nom du rôle), saisissez le nom du rôle IAM.

7.    Sélectionnez Create role (Créer un rôle).

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

1.    Dans la liste IAM role (Rôle IAM), choisissez le rôle IAM que vous venez de créer.

2.    Sélectionnez Add inline policy (Ajouter une stratégie en ligne).

3.    Saisissez la stratégie depuis Création et utilisation d'une stratégie IAM pour l'accès à une 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.

4.    Sélectionnez Examiner une stratégie

5.    Pour Name (Nom), saisissez le nom de la stratégie.

6.    Choisissez Create policy (Créer une stratégie).

Attacher le rôle IAM à l'instance 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 nouvellement créé à l'instance EC2.

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

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

Une fois que vous vous êtes connecté à votre instance EC2, exécutez la commande d'interface de ligne de commande AWS suivante pour générer un jeton d'authentification. Copiez et stockez le jeton d'authentification pour une utilisation ultérieure.

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

Remarque : ce jeton expire dans les 15 minutes après sa création.

Télécharger le fichier de certificat racine SSL ou le fichier de groupe 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 les commandes suivantes pour vous connecter à l'instance de base de données avec SSL. Si votre application n'accepte pas les chaînes de certificats, exécutez la commande suivante pour télécharger le groupe de certificats qui inclut l'ancien et le nouveau certificats racines :

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

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

Remarque : avec les applications Windows nécessitant un fichier PKCS7, consultez la section Utilisation de SSL/TLS pour chiffrer une connexion à une instance de base de données pour télécharger le certificat approprié.

Connexion à l'instance de base de données RDS à l'aide des 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 la section Connexion à une instance de base de données en exécutant le moteur de base de données MySQL.