Comment me connecter à mon instance RDS PostgreSQL à l'aide de l'authentification IAM ?

Dernière mise à jour : 19/08/2020

Comment utiliser l'authentification AWS Identity and Access Management (IAM) pour me connecter à une instance PostgreSQL DB d'Amazon Relational Database Service (Amazon RDS) ?

Brève description

Les utilisateurs peuvent se connecter à une instance ou un cluster DB 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, car :

  • IAM génère des jetons d'authentification de base de données à l'aide de vos clés d'accès AWS, vous n'avez donc pas besoin de stocker les informations d'identification de l'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 d'appliquer des réinitialisations de mot de passe.
  • L'authentification de base de données IAM nécessite une connexion SSL, de sorte que toutes les données que vous transmettez vers et depuis votre instance de base de données RDS 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 RDS.
  2. Créez un utilisateur IAM et attachez une stratégie IAM qui mappe l'utilisateur de la base de données au rôle IAM.
  3. Attachez 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 groupe de certificats.
  6. Connectez-vous à l'instance de base de données RDS à l'aide des identifiants associés au rôle IAM et du jeton d'authentification, ou d'un certificat SSL.

Si vous exécutez MySQL, consultez Comment autoriser les utilisateurs à se connecter à une instance de base de données Amazon RDS MySQL avec des informations d'identification IAM ?

Résolution

Avant de commencer, assurez-vous d'avoir lancé une instance de base de données RDS PostgreSQL ou un cluster Aurora PostgreSQL prenant en charge l'authentification de base de données IAM et une instance EC2 pour se connecter à la base de données.

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

Vous pouvez utiliser l' authentification de base de données IAM pour PostgreSQL pour vous connecter à une instance de base de données Amazon RDS ou à un cluster de bases de données Amazon Aurora PostgreSQL. 

1.    Activez l'authentification IAM sur votre instance DB RDS ou votre cluster Aurora.

2.    Créez un utilisateur IAM et attachez la stratégie suivante :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "rds-db:connect"
            ],
            "Resource": [
                "arn:aws:rds-db:<region>:<account>:dbuser:<resource id>/iamuser"
            ]
        }
    ]
}

Remarque : dans l'exemple de stratégie, l'utilisateur IAM est appelé iamuser.

3.    Connectez-vous à votre instance de base de données Amazon RDS PostgreSQL ou à votre cluster Aurora PostgreSQL à l'aide de l'utilisateur principal.

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

pgAdmin

Choisissez Serveurs dans le panneau de navigation de pgAdmin, puis choisissez le nom du serveur et entrez le mot de passe de l'utilisateur principal.

4.    Créez un utilisateur enfant qui porte 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 pour l'utilisateur à utiliser ultérieurement. Voir l'exemple de connexion suivant :

[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 serveur dans pgAdmin, choisissez l'onglet Général et désactivez (décochez) la case Se connecter maintenant . Dans l'onglet Connexion entrez le nom d'hôte, le port et le nom d'utilisateur, mais pas 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 pour obtenir une vérification complète. Saisissez le chemin du certificat (que vous pouvez télécharger en exécutant la commande ci-dessous) en fonction du mode SSL sélectionné.

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

Remarque : si vous utilisez un certificat racine 2015, il expirera en 2020. Pour passer à un certificat racine 2019, consultez Renouvellement de votre certificat SSL/TLS.

Remarque : si votre application n'accepte pas les chaînes de certificats, exécutez la commande suivante pour télécharger l'ensemble de certificats qui comprend à la fois l'ancien et le nouveau certificat racine :

$ wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem

8.    Une fois le serveur créé, connectez-vous au serveur en entrant le jeton temporaire généré par db-auth-token pour l'utilisateur iamuser, lorsque vous y êtes invité.

Lorsque vous utilisez psql, exécutez la commande suivante pour vous connecter. L'exemple suivant utilise la variable d'environnement $PGPASSWORD que vous avez définie lorsque vous avez généré le jeton :

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 l'avoir généré. 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 une erreur comme « Échec de l'authentification PAM pour votre utilisateur », vérifiez si le compte AWS fait partie d'une organisation AWS Organisations. Si le compte fait partie d'une organisation, ajoutez rds-db : * à la stratégie de contrôle des services (SCP) de l'unité d'organisation à laquelle appartient le compte. Pour plus d'informations, consultez Mise à jour d'un SCP.

Si le compte fait partie d'une organisation, vérifiez s'il existe une hiérarchie de l'utilisateur ou du rôle IAM qui ne dispose pas de l'autorisation rds-db . Pour plus d’informations, consultez Comment utiliser les stratégies de contrôle de service pour définir des garde-fous d'autorisation sur les comptes de votre organisation AWS.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?