Dans cet article, nous allons voir comment fédérer ADFS (Active Directory Federation Services) et AWS pour un environnement de type SSO (Single Sign-On).
Dans la suite de l'article nous considérons les pré-requis suivants :
Schéma de la relation entre ADFS et AWS
Dans la suite de ce tutoriel, nous allons rendre ce flow possible en connectant ADFS à AWS et inversement.
Configurer la fédération en local avec ADFS
Notre environnement SSO passe d’abord par la configuration de l’Active Directory et de l’ADFS.
Groupes AD
Notre prochaine étape est la configuration du rôle ADFS. Partons du principe que nous n’avons pas d’ADFS de configuré :
Adfs configuration
Adfs configuration
Adfs configuration
setspn -a host/localhost adfsaws
en administrateur PowerShell, adfsaws étant le compte de service créé au début.
Adfs configuration
Pour que AWS reconnaisse notre fournisseur d’identité local (ADFS) il sera configuré de la manière suivante :
Fournisseur d’identité dans IAM
Fournisseur d’identité IAM
Le résultat final ressemble à ceci :
Les Rôles
Dans cette partie nous avons donné l'autorisation à notre (ADFS) fournisseur d'identité de communiquer et d'être utilisé dans AWS. Nous avons créé deux rôles à partir desquels nos futurs utilisateurs obtiendront leurs permissions, qui sont liés aux groupes AD.
Nous allons maintenant faire en sorte que ADFS fasse confiance à AWS.
Cliquons sur suivant en choisissant les options qui nous conviennent.
Modification des claims
On va créer plusieurs règles qui sont les suivantes :
Règle NameID
Pour E-mail-Adresses c’est https://aws.amazon.com/SAML/Attributes/RoleSessionName
Règle RoleSessionName
Les deux prochaines règles sont un peu différentes des autres, car elles sont faites sur mesure.
La première règle récupère tous les groupes de l'utilisateur authentifié (lors de l'authentification sur la page ADFS). La seconde effectue la transformation des rôles en faisant correspondre les noms des rôles sur AWS et dans l’AD.
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] => add(store = "Active Directory", types = ("http://temp/variable"), query = ";tokenGroups;{0}", param = c.Value);
Règle Get AD Groups
c:[Type == "http://temp/variable", Value =~ "(?i)^AWS-"] => issue(Type = "https://aws.amazon.com/SAML/Attributes/Role", Value = RegExReplace(c.Value, "AWS-", "arn:aws:iam::123456789012:saml-provider/wescale,arn:aws:iam::123456789012:role/AWS-"));
Le premier ARN (en jaune) est celui de l’identity provider dans IAM.
Le second est le début du ARN d’un des rôles créé dans IAM (voir capture d’écran ci-dessous)
Règle Roles
Explications : Ce script récupère tous les groupes dans lesquels l’utilisateur est authentifié, ensuite il compare les groupes (rôles) créés sur AWS commençant par AWS, donc si vous aviez choisi une règle de nommage différente, il faut également la modifier.
Aller à l’adresse https://<nomseveurcomplet>/adfs/ls/IdpInitiatedSignOn.aspx ou https://localhost/adfs/ls/IdpInitiatedSignOn.aspx
Si vous obtenez une erreur en accédant à cette page, il y a de fortes chances que cela soit dû à la désactivation de l’option EnableIdpInitiatedSignOnPage.
On lance en administrateur la commande PowerShell suivante :
Set-Adfsproperties -enableIdPInitiatedSignonPage $true
Ensuite on redémarre le service ADFS avec la commande Restart-Service adfssrv
Voici à quoi ressemble la page de connexion après des modifications sur le design.
On clique sur notre site configuré, ensuite sur connexion avec les informations de connexion d’un des utilisateurs dans les groupes AD précédemment . Par exemple Laurent Kurosaki.
On arrive sur cette page qui nous permet de choisir le rôle avec les droits et autorisations qu’on va attribuer à cet utilisateur sur AWS.
Ici, cet utilisateur est dans les groupes ADMIN et DEV de notre AD, on n'aura pas cette page si l’authentifié appartenait à un seul groupe parce qu’il aurait pris par défaut.
On arrive finalement sur AWS avec un utilisateur de notre AD avec des droits spécifiques :
Solution → On vérifie les informations du provider sur AWS et ADFS.
Solution → Un problème de l’utilisateur dans l’AD manquant des attributs essentiels comme :
On vérifie pour chacun de ses attributs.
PS : Il faut activer les advanced features pour avoir l’option Attribute Editor
Solution → On vérifie le nom des groupes dans l’AD, le nom des rôles sur AWS qui doivent être identique et surtout le préfix dans le dernier script (si vous avez suivi à la lettre ma règle de nommage) comme ci-dessous :
Ce préfix nous indique que les noms des rôles commencent par AWS.
Dans cet article, nous avons vu comment proposer la fédération dans votre entreprise.
ADFS et AWS vont fonctionner en tandem pour proposer un moyen efficace et sécurisé pour donner des autorisations temporaires, avec des permissions contrôlées à vos utilisateurs.
On a d’abord créé une relation de confiance entre les deux entités, ensuite configurer les règles et claims pour permettre à AWS de récupérer les informations nécessaires dans notre AD.
L’intérêt c’est la création d’un environnement SSO (Single Sign-On), un seul compte qui fonctionne en toute transparence sur les deux entités qui sont notre infrastructure locale et AWS.