Comment me connecter à mon compte Amazon RDS for PostgreSQL ou Amazon Aurora PostgreSQL à l'aide de l'authentification IAM ?

Lecture de 6 minute(s)
0

J'ai une instance de base de données d'édition compatible avec Amazon Relational Database Service (Amazon RDS) for PostgreSQL ou Amazon Aurora PostgreSQL. Je souhaite utiliser l'authentification AWS Identity and Access Management (IAM) pour me connecter à mon instance.

Brève description

L'authentification de la base de données IAM est plus sécurisée que les méthodes d'authentification natives pour les raisons suivantes :

  • IAM utilise vos clés d'accès AWS pour générer des jetons d'authentification de base de données. Vous n'avez pas besoin de stocker les informations d'identification utilisateur de la base de données.
  • Les jetons d'authentification ont une durée de vie de 15 minutes, vous n'avez donc pas besoin de réinitialiser votre mot de passe.
  • L'authentification de la base de données IAM nécessite une connexion SSL. Cela chiffre toutes les données que vous transmettez vers et depuis votre instance de base de données Amazon RDS.
  • Si votre application s'exécute sur Amazon Elastic Compute Cloud (Amazon EC2), vous pouvez utiliser les informations d'identification du profil d'instance Amazon EC2 pour accéder à la base de données. Vous n'avez pas besoin de stocker les mots de passe des bases de données sur votre instance.

Pour configurer l'authentification de la 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 RDS.
  2. Créez un utilisateur IAM et associez une politique IAM qui mappe l'utilisateur de base de données au rôle IAM.
  3. Associez le rôle IAM à l'instance EC2.
  4. Générez un jeton d'authentification AWS pour identifier le rôle IAM.
  5. Téléchargez le fichier de certificat racine SSL ou le fichier de lot de certificats.
  6. Pour vous connecter à l'instance de base de données RDS, utilisez vos informations d'identification de rôle IAM et le jeton d'authentification ou un certificat SSL.

Si vous exécutez MySQL, consultez la rubrique Comment 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 ?

Résolution

Avant de commencer, remplissez les prérequis suivants :

  • Lancez une instance de base de données Amazon RDS for PostgreSQL ou un cluster compatible Aurora PostgreSQL prenant en charge l'authentification de base de données IAM.
  • Lancez une instance EC2 pour vous connecter à la base de données.

Pour plus d'informations, consultez la rubrique Authentification de base de données IAM pour Aurora et la rubrique Authentification de base de données IAM pour Amazon RDS.

Pour vous connecter à une instance de base de données RDS ou à un cluster de bases de données compatible avec Aurora PostgreSQL, utilisez l'authentification de base de données IAM pour PostgreSQL :

  1. Activez l'authentification IAM sur votre instance de base de données RDS ou sur votre cluster Aurora.

  2. Créez un utilisateur IAM, puis associez la politique suivante :

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "rds-db:connect"
          ],
          "Resource": [
            "arn:aws:rds-db:REGION:ACCOUNT:dbuser:RESOURCE_ID/iamuser"
          ]
        }
      ]
    }

    Remarque : Remplacez iamuser par les informations utilisateur IAM.

  3. Connectez-vous à votre instance de base de données Amazon RDS for PostgreSQL ou à votre cluster compatible Aurora PostgreSQL en tant qu'utilisateur principal :

    psql

    psql -h {database or cluster endpoint} -U {Master username} -d {database name}

    pgAdmin

    Choisissez Serveurs dans le volet de navigation pgAdmin. Choisissez ensuite le nom du serveur et entrez le mot de passe de l'utilisateur principal.

  4. Créez un utilisateur enfant portant le même nom que l'utilisateur IAM :

    CREATE USER iamuser WITH LOGIN;
    GRANT rds_iam TO iamuser;
  5. Exécutez generate-db-auth-token avec le nom d'utilisateur que vous avez créé. Cela crée un mot de passe temporaire que vous utiliserez ultérieurement :

    [ec2-user@ip-172-31-24-237 ~]$ export RDSHOST="aurorapg-ssl.cluster-XXXXXXXXXXX.us-west-2.rds.amazonaws.com"
    [ec2-user@ip-172-31-24-237 ~]$ export PGPASSWORD="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 5432 --region us-west-2 --username iamuser)"
    [ec2-user@ip-172-31-24-237 ~]$ echo $PGPASSWORD
    aurorapg-ssl.cluster-XXXXXXX.us-west-2.rds.amazonaws.com:5432/?Action=connect&DBUser=iamuser&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=900&X-Amz-Credential=AKIA2O5GXNVDTAMABZFE%2F20190909%2Fus-west-2%2Frds-db%2Faws4_request&X-Amz-SignedHeaders=host&X-Amz-Date=20190909T171907Z&X-Amz-Signature=ead28003477c3082e5a17529ac8316db4f4bdf2fa8f79d3aaea806e9bafa2673
    [ec2-user@ip-172-31-24-237 ~]$
  6. Pour créer une nouvelle connexion au serveur dans pgAdmin, choisissez l'onglet Général et décochez la case Se connecter maintenant. Dans l'onglet Connexion, saisissez le nom d'hôte, le port et le nom d'utilisateur, mais ne saisissez pas encore le mot de passe. Dans l'onglet SSL, définissez le mode SSL sur Exiger et enregistrez la connexion au serveur.

  7. (Facultatif) Dans l'onglet SSL, vous pouvez modifier le mode SSL en verifiy-full. Pour le mode SSL sélectionné, saisissez le chemin du certificat. Pour télécharger le chemin, exécutez la commande suivante :

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

    Remarque : Les certificats racines de 2015 ont expiré en 2020. Pour passer à un certificat racine de 2019, consultez la rubrique Rotation de votre certificat SSL/TLS.

    Si votre application n'accepte pas les chaînes de certificats, téléchargez le lot de certificats qui inclut à la fois l'ancien et le nouveau certificat racine :

    $ wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
  8. Après avoir créé le serveur, connectez-vous au serveur. Saisissez le jeton temporaire generate-db-auth-token généré pour l'utilisateur iamuser, lorsque vous y êtes invité.

Pour psql, exécutez la commande suivante pour vous connecter. Cet exemple utilise la variable d'environnement $PGPASSWORD que vous avez définie au cours de génération du jeton. Cette variable initie la connexion :

psql -h aurorapg-ssl.cfkx5hi8csxj.us-west-2.rds.amazonaws.com -p 5432 "sslmode=verify-full sslrootcert=rds-ca-2019-root.pem dbname=aurora_pg_ssl user=iamuser"

Remarque : Chaque jeton expire 15 minutes après sa génération. Si vous essayez de rétablir la connexion avec le même jeton, la connexion échouera. Vous devez générer un nouveau jeton.

Si vous recevez toujours un message d'erreur similaire au message « Échec de l'authentification PAM pour votre utilisateur », vérifiez si le compte AWS fait partie d'une organisation AWS Organizations. Si le compte fait partie d'une organisation, ajoutez rds-db:* à la politique de contrôle des services (SCP) de l'organisation d'appartenance du compte. Vérifiez également s'il existe une hiérarchie de l'utilisateur ou du rôle IAM qui ne possède pas l'autorisation rds-db. Pour plus d'informations, consultez la rubrique Comment utiliser les politiques de contrôle des services pour définir des barrières de protection en matière d'autorisations sur les comptes de votre organisation AWS.

Informations connexes

Utilisation de l'authentification IAM avec Aurora compatible avec PostgreSQL