AWS SSO avec Auth0 sans frais
Depuis plusieurs années, j’utilise AWS avec mon compte personnel, notamment pour des projets présentés dans mes précédents articles de blog comme la création de mon blog ou encore le serverless redirector URL visant toujours à tirer les coûts vers 0.
Dans cet article de blog, nous verrons comment mettre AWS IAM Identity Center (anciennement AWS SSO) avec Auth0 sans frais en utilisant votre authentification fédérée au travers de Auth0 (dans mon cas, via Google).
TLTR: Le repository GitHub avec le readme
Prérequis
Pour comprendre ce post, vous devez:
- Connaître Terraform et notamment déployer sur AWS via Terraform
Pour reproduire l’exemple de ce blog, vous devez :
- Avoir un compte AWS et des credentials
- Avoir un tenant Auth0 et des credentials
- Déployer l’infrastructure sur AWS via Terraform
Information
La solution utilise Terraform et automatise un maximum les étapes. Ce blog post ne vise pas à décrire les actions manuelles à faire sur AWS ou Auth0 en détail.
Les premières difficultés
Comme la plupart des personnes utilisant un compte AWS personnel, on se retrouve vite avec un IAM user sachant qu’il n’y qu’un seul compte sur lequel se connecter. Cependant, je me retrouvais avec plusieurs problématiques au fil du temps:
- Un IAM user avec username et password en plus de mes autres credentials
- L’usage de l’Access et Private Keys entre plusieurs postes de travail doivent être partagées de façon sécurisée cependant ce n’est pas toujours le cas. Je ne parle même pas des défis qu’entraîne la rotation des keys.
- Je souhaitais créer plusieurs comptes AWS pour séparer mes projets. Une configuration SSO simplifie la gestion des accès en automatisant l’« assume role » entre plusieurs comptes AWS.
J’ai donc voulu mettre en place AWS IAM Identity Center (anciennement AWS SSO) au travers de mon adresse email Google afin de centraliser et simplifier l’authentification de mon côté. Après quelques recherches, on remarque vite que l’intégration est faite pour Google Workspace. Mauvaise nouvelle car Google Workspace est une offre payante orientée entreprise, ce qui est un peu dommage pour “Monsieur Tout-le-Monde”, qui ne dispose que d’une adresse email personnelle.
Comment mettre en place AWS IAM Identity Center (anciennement AWS SSO) tout en utilisant l’authentification fédérée de Google ?
La solution Auth0
Après quelques recherches, Auth0 semblait être le candidat parfait car celui-ci permettait d’un côté de s’authentifier via les Social Connections incluant Google (Gmail dans mon cas) mais aussi bien d’autres comme Microsoft, GitHub, etc. Et de l’autre côté de mettre en place AWS IAM Identity Center (anciennement AWS SSO) avec Auth0 et de façon gratuite !
Le workflow est donc le suivant pour se connecter au compte AWS:
graph LR; A[Google/Gmail authentication] -->|Oauth 2.0| B(Auth0) B --> |SAML 2.0| C(AWS account)
Côté Auth0 et le pricing ?
De ce côté, nous avons de la marge puisque le Free plan inclut 25 000 utilisateurs actifs mensuels ce qui est largement suffisant pour un usage personnel ou encore de l’ordre d’une startup.
Au delà de cela, le pricing Auth0 sur le Free plan offre pas mal de feature intéressante:
Déployer la solution
J’ai mis en place la solution au travers de Terraform afin d’automatiser le déploiement au maximum et vous pouvez vous plonger dans le repository GitHub pour les plus curieux d’entre vous.
Les Prérequis de la solution
Pour utiliser la solution, il vous faudra:
- Un compte AWS avec un utilisateur ayant toutes les permissions sur
identitystore
a minima et les credentials de l’utilisateur utilisable par Terraform. Vous pouvez vous appuyer sur la documentation du provider AWS - Un tenant Auth0 avec un utilisateur ayant assez de permission pour manager les applications et utilisateurs du tenant. Vous devez aussi générer un token pour cet utilisateur, en vous appuyant sur la documentation du provider Auth0 (baser sur la documentation du provider Auth0).
Enfin, avant de démarrer les prochaines étapes, faites un GIT clone du repository GitHub
ClickOps
L’API AWS de AWS IAM Identity Center (anciennement AWS SSO) est (très) limité et ne permet pas de créer ou de récupérer certains éléments. Nous devons donc effectuer certaines actions manuelles qui sont:
- Aller sur votre account management AWS et sélectionner la region primaire que vous utilisez.
- Aller dans AWS IAM Identity Center (anciennement AWS SSO) et activer celui-ci.
- Configurer le external identity provider source
- Récupérer le AWS IAM Identity Center Assertion Consumer (ACS) Service URL et placer la valeur dans votre
terraform.tfvars
via la variableaws_acs_callback_url
. - Ne fermez pas la page AWS précédante quand il vous manquera les informations de la partie partie
Identity provider metadata
: - Dans votre fichier
terraform.tfvars
, ajouter les valeurs pour les variablesregion
(la région AWS primaire choisie) etauth0_domain
qui represente votre tenant Auth0 (ex: doge.eu.auth0.com).
La page AWS doit rester ouverte et sera finalisée dans les prochaines étapes après le terraform apply
.
Information
A ce stade, votre fichier terraform.tfvars
doit contenir les variables suivantes:
aws_acs_callback_url
region
auth0_domain
Création des groupes, users et policies
Pour créer un groupe, il faudra utiliser la variable Terraform sso_groups
dans votre fichier terraform.tfvars
.
Voici un exemple du contenu de la variable (garder a l’esprit que la variable représente une liste de groupe):
sso_groups = [
{
name = "DevOps"
description = "The DevOps team",
policy_arns = [
"arn:aws:iam::aws:policy/CloudWatchLogsFullAccess" # Policy must exist in the target account
],
account_ids = [
"123456789012", # AWS account ID
]
members = [
"contact@mehdilaruelle.com",
],
},
]
Dans l’exemple précédant, nous avons:
- name: qui est le nom du groupe.
- description: la description du groupe (toujours bon d’en avoir une).
- account_ids: la liste des account IDs.
- policy_arns: la liste des AWS managed policies. Il y a une limite de 10 policies par groupes. Vous pouvez ‘bypass’ cette limite via une inline policy.
- members: une liste des identifiants de vos users. Vous devez utiliser les adresses email des utilisateurs pour autoriser leurs connexions.
Avertissement
Les AWS managed policies doivent exister sur les AWS account IDs au risque d’avoir une erreur que la policy n’existe pas. Utiliser de préférence une AWS managed policy présente sur l’ensemble des AWS Account au lieu des Customer managed policies.
Étape finale de configuration et résultat
Une fois les étapes précédentes, vous pouvez lancer un terraform apply
. Celui-ci vous donnera des outputs que nous utiliserons
par la suite.
Il est temps pour nous de finaliser la configuration:
- Utiliser la commande suivante
terraform output -raw aws_sso_idp_metadata > /tmp/auth0_metadata.xml
pour sauvegarder le fichier dans/tmp/auth0_metadata.xml
- Retourner sur la page AWS ouverte précédemment sur la partie external identity provider source
et uploader le fichier dans la section de la page
Identity provider metadata
: - Retourner sur la page principale AWS IAM Identity Center (anciennement AWS SSO)
et récupérer l’
AWS access portal URL
sur la section à droite de la page (à enregistrer dans vos favoris).
La configuration est finalisée. L’AWS access portal URL
servira de lien de connexion à vos comptes AWS.
Vérification de la configuration
Si je prend la configuration exemple suivante:
sso_groups = [
{
name = "Admin",
description = "The admin group.",
policy_arns = [
"arn:aws:iam::aws:policy/AdministratorAccess"
],
members = [
"contact@mehdilaruelle.com"
],
account_ids = [
"123456789012"
],
},
]
Je devrais pouvoir, avec mon adresse email, me connecter a un seul compte: 123456789012
via la permission Admin
.
Pour vérifier cela (avec votre compte AWS), utiliser l’AWS access portal URL
qui devrait vous rediriger sur une page Auth0:
Dans mon cas je me connecte via Google. Une seconde page apparait avec la liste des comptes (dans mon cas, un seul compte):
Il suffit de cliquer sur
Admin
, ce qui vous redirigera vers votre compte avec les bons droits.
Vous pouvez configurer votre AWS CLI avec le sso pour les lignes de commandes.
Et la suite ?
Le repository GitHub prend en compte la variable auth0_connection_name
qui prend le nom d’une connection Auth0. Si cet input est fourni, les users créer dans AWS IAM Identity Center (anciennement AWS SSO) le seront aussi dans Auth0 dans la connexion Auth0 fournie.
Parmi les prochaines étapes possibles, l’implémentation du SCIM (System for Cross-domain Identity Management) peut être une idée d’amélioration même si souvent la feature est payante car vue comme une fonctionnalité entreprise.
Le repository est en cours de construction, si vous avez des idées ou suggestions d’amélioration, elles sont les bienvenues.
Conclusion
Nous avons vu comment implémenter le SSO dans AWS au travers de Auth0 et AWS IAM Identity Center (anciennement AWS SSO) tout en utilisant nos Social Connections telles que Google/Gmail et gratuitement.
Enfin, la solution est déployable au travers du repository GitHub même si certaines actions restent manuelles malheureusement par le manque d’API côté AWS.
AWS Terraform HashiCorp Auth0 SSO Security Automation Identity Center IAM Google
1412 Mots
2025-04-24 06:00