En utilisant AWS re:Post, vous acceptez les AWS re:Post Conditions d’utilisation

Comment puis-je résoudre les problèmes liés à la 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 Access Management (IAM), le message d'erreur « PAM authentication failed for user » s'affiche.

Brève description

Il est possible que vous ne puissiez pas 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 :

  • L'authentification IAM est désactivée
  • Autorisations de rôle IAM insuffisantes ou stratégie incorrecte
  • L'utilisateur de la base de données n'est pas correctement configuré
  • Chaîne de connexion incorrecte
  • Entité IAM incorrecte

Résolution

L'authentification IAM est désactivée

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

Remarque : Lorsque 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 durée d’indisponibilité.

Autorisations de rôle IAM insuffisantes

Pour vous connecter correctement à 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.

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.

Assurez-vous également d’utiliser l’ID de ressource approprié (au lieu de spécifier uniquement l'ARN). Pour trouver l'ID de ressource d'une instance de base de données, choisissez l'instance de base de données ou le cluster dans la console Amazon RDS. Puis, choisissez l'onglet Configuration pour afficher l'ID de la ressource.

Pour plus d'informations sur les éléments répertoriés dans l'exemple de stratégie IAM, consultez la section Création et utilisation d'une stratégie 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 à un service qui peuvent être utilisées dans l'élément Condition des instructions de stratégie. L'authentification IAM ne prend pas non plus en charge toutes les clés de contexte de condition globale. Pour plus d'informations sur les clés de contexte de condition globale, consultez la section Clés de contexte de condition globale AWS dans le guide de l'utilisateur IAM.

L'utilisateur de la base de données n'est pas correctement configuré

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

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

\du

Votre résultat ressemble à 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 cette requête, qui 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 lui attribuer le rôle rds_iam, exécutez cette commande :

CREATE USER db_user_name WITH LOGIN;
GRANT rds_iam TO db_user_name;

Chaîne de connexion incorrecte

Les jetons d'authentification comprennent 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 variable lorsque vous vous connectez à votre instance de base de données PostgreSQL.

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 plus d'informations sur la connexion à une instance de base de données PostgreSQL à l'aide d'une variable d'environnement, consultez la section Connexion à un cluster Aurora PostgreSQL.

Si vous obtenez une erreur similaire à celle fournie dans cet exemple, cela signifie que le client essaie de se connecter à l'instance de base de données sans 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 la base de données IAM requiert une connexion SSL, et toutes les données transmises depuis et vers votre instance de base de données sont chiffrées. Pour éviter cette erreur, assurez-vous que la connexion utilise le protocole SSL. Il est recommandé d'utiliser l'option sslmode comme verify-full et de fournir le certificat dans l'option sslrootcert de votre chaîne de connexion.

Pour télécharger le dernier certificat CA, consultez la section 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 approprié. Pour vérifier le rôle endossé par l'utilisateur IAM actuel, exécutez cette commande :

aws sts get-caller-identity

Si le rôle endossé est incorrect, vous pouvez basculer vers l’utilisateur/rôle IAM approprié ou endosser le rôle approprié. Assurez-vous d’utiliser le rôle IAM approprié pour générer le jeton d'authentification.

Si vous recevez toujours un message d'erreur similaire au message « PAM authentication failed for your user », vérifiez si le compte AWS fait partie d'une organisation AWS Organizations. Si le compte fait partie d'une organisation, ajoutez rds-db:* au SCP de l'organisation. Pour plus d'informations, consultez la section Création, mise à jour et suppression de stratégies 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 la section Comment utiliser les stratégies de contrôle des services pour définir des barrières de protection d'autorisation sur les comptes de votre organisation AWS.

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


AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans