Comment accorder à mes utilisateurs Active Directory l'accès à l'API ou l'interface CLI AWS avec ADFS ?

Date de la dernière mise à jour : 14/05/2019

J'ai configuré l'accès à AWS Management Console pour mes utilisateurs Active Directory en utilisant la fédération. Comment puis-je accorder aux utilisateurs le même accès pour l'interface de ligne de commande (CLI) AWS en utilisant Active Directory Federation Services (ADFS) ?  

Brève description

Si vous autorisez des utilisateurs fédérés SAML 2.0 à accéder à AWS Management Console, les utilisateurs qui ont besoin d'un accès par programme nécessitent toujours une clé d'accès et une clé secrète. Pour obtenir l'ID de clé d'accès et la clé d'accès secrète pour un utilisateur IAM (Identity and Access Management) AWS, vous pouvez configurer l'interface CLI AWS ou obtenir des informations d'identification temporaires pour que les utilisateurs fédérés accèdent à l'interface CLI AWS.

Pour pouvoir accorder l'accès à un utilisateur fédéré, vous devez :

Solution

Si votre fournisseur d'identité (IdP) est configuré pour fonctionner avec l'authentification Windows intégrée (IWA), NTLM ou Kerberos (qui sont la valeur par défaut pour ADFS 2.0), consultez la solution 1 ou la solution 2. Si votre fournisseur IdP est configuré pour utiliser l'authentification par formulaire (qui est la valeur par défaut pour ADFS 3.0 et 4.0), consultez la solution 3.

Solution 1 : PowerShell pour ADFS en utilisant IWA (PowerShell 2.0)

1.    Importez le module Windows PowerShell en exécutant la commande suivante :  

> Import-Module "C:\Program Files (x86)\AWS Tools\PowerShell\AWSPowerShell\AWSPowerShell.psd1"

2.    Définissez une variable pour votre point de terminaison ADFS en exécutant une commande similaire à celle ci-dessous :

> $Endpoint = 'https://adfs.example.com/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices'

Remarque : cela inclut l'URL complète de votre page de connexion ADFS et le nom URN (Uniform Resource Name) de connexion pour AWS.

3.    Définissez le point de terminaison SAML en exécutant une commande similaire à celle ci-dessous :  

> $EndpointName = Set-AWSSamlEndpoint -Endpoint "$Endpoint" -StoreAs 'ADFS-Login' -AuthenticationType NTLM

Remarque : par défaut, AuthenticationType ADFS 2.0 est défini sur NTLM. Si vous ne spécifiez pas de valeur pour AuthenticationType dans l'applet de commande des outils AWS ci-dessus, les outils AWS utilisent Kerberos par défaut.

4.    Utilisez les paramètres de point de terminaison stockés pour vous authentifier auprès du fournisseur IdP ADFS afin d'obtenir la liste des rôles que l'utilisateur peut ensuite assumer, en procédant de l'une des manières suivantes :

Utilisez les informations d'identification de l'utilisateur qui est actuellement connecté au poste de travail.

> Set-AWSSamlRoleProfile -StoreAs 'SAMLUser' -EndpointName $EndpointName

Ou :

Spécifiez les informations d'identification d'un utilisateur Active Directory.

> $Credential = Get-Credential -Message "Enter the domain credentials for the endpoint"
> Set-AWSSamlRoleProfile -EndpointName $EndpointName -NetworkCredential $credential -StoreAs 'SAMLUser'

5.    Si plusieurs rôles sont disponibles, vous êtes invité à sélectionner le rôle à assumer. Saisissez le caractère alphabétique dans votre session de terminal comme ci-dessous :  

SAMLUser[A] A - 123456789012:role/ADFS-DevAdmin [B] B - 123456789012:role/ADFS-DevReadOnly [?] Help (default is "A"): A

6.    Vérifiez que les utilisateurs peuvent accéder à l'interface CLI AWS en utilisant les informations d'identification fédérées et le profil spécifié, en exécutant une commande similaire à celle ci-dessous :  

Get-IAMSAMLProviderList -ProfileName SAMLUser

Solution 2 : Python pour ADFS en utilisant IWA (par défaut pour ADF 2.0)

1.    Installez les modules suivants pour Python :  

pip install --upgrade boto beautifulsoup4 requests

2.    Copiez le script à partir du billet de blog Comment mettre en place un accès fédéré à l'API et à l'interface CLI en utilisant SAML 2.0 et ADFS.

3.    Ouvrez le script, définissez la région de votre choix et le format de sortie, remplacez adfs.example.com par votre URL, puis saisissez le nom de domaine complet (FQDN) de votre serveur ADFS.

Remarque : si vous disposez d'un autre chemin pour le fichier d'informations d'identification AWS, spécifiez-le.  

region = 'eu-west-1'
    outputformat = 'json'
    awsconfigfile = '/.aws/credentials'
    idpentryurl = 'https://adfs.example.com/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices'

4.    Enregistrez les modifications, exécutez le fichier, puis remplissez les champs suivants au fur et à mesure qu'ils s'affichent :  

bob@Ubuntu64:~$ ./working_samlapi.py
   Username: bob@example.com
   Password: ***********

   Please choose the role you would like to assume:
   [ 0 ]:  arn:aws:iam::123456789012:role/ADFS-DevAdmin
   [ 1 ]:  arn:aws:iam::123456789012:role/ADFS-DevReadOnly

   Selection:  0

   ----------------------------------------------------------------
   Your new access key pair has been stored in the AWS configuration file /home/ec2-user/.aws/credentials under the saml profile.
   Note that it will expire at 2018-03-14T14:57:45Z.
   After this time, you may safely rerun this script to refresh your access key pair.
   To use this credential, call the AWS CLI with the --profile option (e.g. aws --profile saml ec2 describe-instances).
   ----------------------------------------------------------------

5.    Une fois la fédération effectuée, exécutez les commandes avec le profil SAML nouvellement configuré en utilisant le paramètre --profile dans les commandes.  

 bob@Ubuntu64:~$ aws iam list-saml-providers --profile saml
   {
       "SAMLProviderList": [
           {
               "CreateDate": "2018-03-14T13:28:24Z",
               "ValidUntil": "2118-03-14T13:28:23Z",
               "Arn": "arn:aws:iam::123456789012:saml-provider/adfs"
           }
      ]
   }

Solution 3 : Python pour ADFS en utilisant l'authentification par formulaire (par défaut pour ADFS 3.0 et 4.0)

1.    Installez les modules suivants pour Python :  

pip install --upgrade boto beautifulsoup4 requests

2.    Mettez en place une solution générale pour l'accès API/CLI fédéré en utilisant SAML 2.0, puis téléchargez le script à partir de l'étape 4 du billet de blog.

3.    Suivez les étapes 3 à 5 de la Solution 2 : Python pour ADFS en utilisant IWA (par défaut pour ADFS 2.0).


Cet article vous a-t-il été utile ?

Cette page peut-elle être améliorée ?


Vous avez besoin d'aide ?