Comment puis-je résoudre les problèmes de connexion à Amazon RDS for PostgreSQL ou à un cluster Aurora PostgreSQL à l'aide de l'authentification IAM ?

Lecture de 6 minute(s)
0

Je souhaite me connecter à mon instance Amazon Relational Database Service (Amazon RDS) for PostgreSQL ou à un cluster Amazon Aurora compatible avec PostgreSQL. Lorsque j'essaie de me connecter à l'aide de l'authentification AWS Identity and Access Management (IAM), je reçois le message d'erreur suivant : « PAM authentication failed for user » (Échec de l'authentificaton PAM pour l'utilisateur).

Brève description

Il se peut que vous ne soyez pas en mesure de vous connecter à votre instance de base de données Amazon RDS for PostgreSQL ou Aurora à l'aide de l'authentification IAM pour l'une des raisons suivantes :

  • Authentification IAM désactivée
  • Autorisations de rôle IAM insuffisantes ou politique incorrecte
  • Utilisateur de la base de données mal configuré
  • Chaîne de connexion incorrecte
  • Entité IAM incorrecte

Solution

L'authentification IAM est désactivée

Par défaut, l'authentification IAM est désactivée. Vérifiez les paramètres de configuration de votre instance RDS for PostgreSQL ou de votre cluster Aurora compatible avec PostgreSQL. Assurez-vous que l'authentification IAM est activée. À partir de la console Amazon RDS, vous pouvez modifier le cluster Aurora ou l'instance RDS en sélectionnant Authentification de base de données. Sélectionnez ensuite Authentification de base de données IAM et cliquez sur Continuer pour mettre à jour vos paramètres de configuration.

Remarque : si vous sélectionnez Appliquer 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. Cette action n'entraîne pas de temps d'arrêt.

Autorisations de rôle IAM insuffisantes

Pour vous connecter à votre instance de base de données à 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 for RDS PostgreSQL or DbClusterResourceId for Aurora PostgreSQL)/db_user_name"
        ]
    }]

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

En outre, veillez à utiliser le bon ID de ressource (plutôt que de spécifier uniquement l'ARN). Pour trouver l'ID de ressource d'une instance de base de données, sélectionnez l'instance ou le cluster de base de données dans la console Amazon RDS. Ensuite, sélectionnez l'onglet Configuration pour afficher l'ID de ressource.

Pour en savoir plus sur les éléments répertoriés dans l'exemple de politique IAM, consultez Création et utilisation d'une politique IAM pour l'accès à la base de données IAM.

Remarque : l'authentification IAM ne prend pas en charge les clés de contexte spécifiques au service qui peuvent être utilisées dans l'élément conditionnel des instructions de politique. L'authentification IAM ne prend pas non plus en charge l'ensemble des clés de contexte de condition globales. Pour plus d'informations sur les clés de contexte de condition globales, consultez la rubrique Clés de contexte de condition globales AWS dans le guide de l'utilisateur IAM.

Utilisateur de la base de données mal configuré

Pour utiliser l'authentification IAM avec PostgreSQL, attribuez le rôle rds_iam à l'utilisateur de la base de données. Pour vérifier que ce rôle est associé à l'utilisateur, exécutez la commande suivante :

Remarque : cette commande s'exécute uniquement dans le client PostgreSQL.

\du

La sortie est similaire à ce qui suit :

List of roles
   Role name    |                         Attributes                         |                          Member of                          
-----------------+------------------------------------------------------------+-------------------------------------------------------------
db_user_name    |                                                            | {rds_iam}                                
postgres        | Create role, Create DB                                    +| {rds_superuser}          
                | Password valid until infinity                              |

Vous pouvez également utiliser la requête suivante. Celle-ci s'exécute sur n'importe quelle plateforme :

SELECT r.rolname,
ARRAY(SELECT b.rolname
FROM pg_catalog.pg_auth_members m
JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid)
WHERE m.member = r.oid) memberof
FROM pg_catalog.pg_roles r
WHERE r.rolname !~ '^pg_'
ORDER BY 1;

Pour créer un utilisateur et attribuer le rôle rds_iam, exécutez la commande suivante :

CREATE USER db_user_name WITH LOGIN; 
GRANT rds_iam TO db_user_name;

Chaîne de connexion incorrecte

Les jetons d'authentification se composent de plusieurs caractères qui peuvent être difficiles à utiliser sur la ligne de commande. Enregistrez plutôt le jeton dans une variable d'environnement, puis utilisez cette dernière lorsque vous vous connectez à votre instance de base de données PostgreSQL.

Par exemple :

export RDSHOST='aurorapostgresql.cluster-abcdef12ghi.us-east-1.rds.amazonaws.com'
export PGPASSWORD="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 5432 --region us-east-1 --username db_user_name)"
psql "host=$RDSHOST port=5432 sslmode=verify-full sslrootcert=global-bundle.pem dbname=postgres user=db_user_name password=$PGPASSWORD"

Pour en savoir plus sur la façon de se connecter à une instance de base de données PostgreSQL à l'aide d'une variable d'environnement, consultez la rubrique Connexion à un cluster Aurora PostgreSQL.

Si vous recevez une erreur similaire à celle de cet exemple, cela signifie que le client essaie de se connecter à l'instance de base de données sans certificat SSL.

FATAL: no pg_hba.conf entry for host "host.ip", user "<username>", database "postgres", SSL off 
FATAL: password authentication failed for user "db_user_name"

L'authentification de base de données IAM nécessite une connexion SSL, de sorte que toutes les données transmises depuis et vers votre instance de base de données soient chiffrées. Pour éviter cette erreur, assurez-vous que la connexion utilise un certificat SSL. Il est recommandé d'utiliser l'option sslmode pour verify-full et de fournir le certificat dans l'option sslrootcert dans votre chaîne de connexion.

Pour télécharger le dernier certificat CA, consultez Utilisation de SSL/TLS pour chiffrer une connexion à un cluster de bases de données.

Entité IAM incorrecte

Assurez-vous que le jeton d'authentification est généré par le rôle IAM adéquat. Pour vérifier le rôle endossé par l'utilisateur IAM actuel, exécutez la commande suivante :

aws sts get-caller-identity

Si le rôle endossé n'est pas correct, vous pouvez passer à l'utilisateur/rôle IAM approprié ou assumer le rôle adéquat. Assurez-vous d'utiliser le rôle IAM approprié pour générer le jeton d'authentification.

Si vous recevez toujours une erreur comme « PAM authentication failed for your userr » (É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 SCP de l'organisation. Pour plus d'informations, consultez Création, mise à jour et suppression de politiques de contrôle des services.

Si le compte fait partie d'une organisation, vérifiez s'il existe une hiérarchie de l'utilisateur IAM qui ne dispose pas de l'autorisation rds-db. Pour plus d’informations, consultez Comment utiliser les politiques de contrôle des services pour définir des barrières de protection des autorisations pour tous les comptes de votre organisation AWS Organization (langue française non garantie).

Si vous utilisez des limites d'autorisations pour les entités IAM, assurez-vous que l'action rds-db:connect est activée pour votre utilisateur/rôle IAM. Pour plus d'informations sur les limites d'autorisations, consultez Limites d'autorisations pour les entités IAM. Pour modifier les limites d'autorisations d'un utilisateur, consultez la section Modification de la limite d'autorisations pour un utilisateur.


AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an