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 base de données IAM est plus sécurisée que les méthodes d'authentification natives. Pour plus d'informations, consultez la section Authentification de base de données IAM pour MariaDB, MySQL et PostgreSQL.
Pour utiliser les rôles IAM afin de configurer l'authentification de base de données IAM, procédez comme suit :
- Activez l'authentification de base de données IAM sur l'instance de base de données RDS.
- Créez un utilisateur IAM et attachez une stratégie IAM qui mappe l'utilisateur de base de données au rôle IAM.
- Attachez le rôle IAM à l'instance Amazon Elastic Compute Cloud (Amazon EC2).
- Pour identifier le rôle IAM, générez un jeton d'authentification AWS.
- Téléchargez le fichier de certificat racine SSL ou le fichier de bundle de certificats.
- 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
Prérequis
Complétez 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 section Authentification de base de données IAM pour Aurora et la section Authentification de base de données IAM pour Amazon RDS.
Pour vérifier la configuration requise pour l'authentification IAM avec une instance Amazon RDS ou Aurora Cluster ou résoudre les problèmes d'authentification IAM, utilisez le dossier d’exploitation AWSSupport-TroubleshootRDSIAMAuthentication. Pour plus d'informations, consultez la section AWSSupport-TroubleshootRDSIAMAuthentication.
Utiliser l’authentification de base de données IAM
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 :
-
Activez l'authentification IAM sur votre instance de base de données RDS ou sur votre cluster Aurora.
-
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.
-
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.
-
Créez un utilisateur enfant portant le même nom que l'utilisateur IAM :
CREATE USER iamuser WITH LOGIN; GRANT rds_iam TO iamuser;
-
Exécutez generate-db-auth-token avec le nom d'utilisateur que vous avez créé. Cette action entraîne la création d’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 ~]$
-
Pour créer une nouvelle connexion au serveur dans pgAdmin, choisissez l'onglet Général et désactivez la case Connectez-vous 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.
-
(Facultatif) Vous pouvez modifier le mode SSL en verify-full à partir de l’onglet SSL. 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
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
-
Connectez-vous au serveur. Lorsque vous y êtes invité, saisissez le jeton temporaire generate-db-auth-token généré pour l'utilisateur iamuser.
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 échoue. Vous devez générer un nouveau jeton.
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:* à la stratégie de contrôle des services (SCP) de l'organisation à laquelle le compte appartient. 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 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.
Informations connexes
Utilisation de l'authentification IAM avec Aurora compatible avec PostgreSQL
Rotation de votre certificat SSL/TLS.