Voici un résumé rapide de la question. Lisez la section de description complète pour les détails sous-jacents.
Description condensée :
Supposons que vous avez un utilisateur IAM déjà existant et que l'utilisateur est déjà en mesure d'accéder à d'autres services AWS, tels que S3, CloudFront, ECS, EC2....
Disons que nous devons fournir à l'utilisateur un accès en lecture seule sur le cluster RDS et configurer également l'authentification IAM DB.
Nous effectuons toutes les étapes mentionnées dans le guide officiel, dans NOTRE système local, et cela fonctionne parfaitement. Nous sommes en mesure de générer un jeton d'authentification correct pour l'utilisateur. db_user
.
Cependant, c'est ici que cela devient intéressant lorsque l'utilisateur essaie de générer le jeton pour le programme db_user
depuis sa machine locale l'utilisateur se verra refuser l'accès.
Description complète :
Mise en place :
Mon instance de cluster RDS utilise le moteur MySQL Aurora. Version du moteur : 5.6.10a
J'ai suivi le guide du centre de connaissances AWS sur Comment puis-je autoriser les utilisateurs à se connecter à Amazon RDS avec des informations d'identification IAM ?
Le guide ne le mentionne pas explicitement, mais lors de la génération du jeton d'authentification, AWS CLI utilise les informations d'identification IAM stockées localement, pour signer la demande.
J'aimerais le souligner dans l'extrait ci-dessous, admin est le nom du profil stocké par l'AWS CLI pour mon utilisateur IAM admin tandis que l'option db_user est l'utilisateur IAM (avec rds-db:connect
privilèges).
TOKEN="$(aws --profile admin rds generate-db-auth-token -h.. .. .. -u db_user)
En utilisant l'extrait ci-dessus, je suis capable de m'authentifier avec le jeton généré et de me connecter au cluster.
Si --profile
n'est pas mentionné, il lit le profil par défaut enregistré dans le fichier d'informations d'identification.
Question :
Au lieu d'utiliser --profile admin
Je cherche à utiliser un profil IAM non administrateur déjà existant pour générer un jeton d'authentification.
Par exemple, supposons que l'utilisateur IAM nommé développeur avec des privilèges RDS en lecture seule et les informations d'identification stockées localement sous le profil rds_read_only
TOKEN="$(aws --profile rds_read_only rds generate-db-auth-token -h.. .. .. -u db_user)
Si j'utilise le jeton ci-dessus, j'obtiens l'erreur suivante :
ERROR 1045 (28000): Access denied for user 'db_user'@'ip' (using password: YES)
Après des heures de dépannage, j'ai pu conclure que ma rds_read_only est incapable de générer des jetons d'authentification valides, probablement parce que l'utilisateur IAM développeur est dépourvu de certaines politiques requises.
J'ai essayé de joindre toutes les politiques disponibles sous RDS
y RDS Data API
(individuellement ainsi qu'en combinaison) à l'utilisateur IAM développeur sans succès. Si je joins le AdministrativeAccess
à l'utilisateur IAM développeur alors seulement il est capable de générer le jeton avec succès.
Question :
Quelles sont les politiques obligatoires requises pour que les utilisateurs IAM non administrateurs puissent générer un jeton d'authentification avec succès ?