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

Dernière mise à jour : 05/01/2021

J'ai configuré l'accès à AWS Management Console pour mes utilisateurs Active Directory à l'aide des services de fédération. Comment accorder aux utilisateurs le même accès à l'interface de ligne de commande AWS (AWS CLI) avec Active Directory Federation Services (AD FS) ?

Brève description

Lorsque vous accordez aux utilisateurs fédérés SAML 2.0 l'accès à AWS Management Console, les utilisateurs ayant besoin d'un accès programmatique ont doivent disposer d'une clé d'accès et d'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 :

Remarque : cette solution n'est pas compatible si Multi-Factor Authentication (MFA) est activée pour les utilisateurs de votre annuaire.

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.

Remarque : si vous recevez des erreurs lors de l'exécution de commandes AWS CLI, vérifiez que vous utilisez la version la plus récente d'AWS CLI.

Solution 1 : PowerShell pour AD FS à l'aide d'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 AD FS en exécutant une commande similaire à ce qui suit :

> $Endpoint = 'https://adfs.example.com/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices'
Remarque : cette variable inclut l'URL complète de votre page de connexion AD FS et l'URN (nom de ressource uniforme) de connexion pour AWS.

3.    Définissez un point de terminaison SAML en exécutant une commande similaire à ce qui suit :

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

Remarque : par défaut, le type d'authentification AD FS 2.0 AuthenticationType est défini sur NTLM. Si vous ne spécifiez pas de valeur pour l'AuthenticationType dans l'exemple d'applet de commande des outils AWS précédent, alors 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.    Confirmez que les utilisateurs peuvent accéder à la CLI AWS à l'aide des informations d'identification fédérées et du profil spécifié en exécutant une commande similaire à ce qui suit :

Get-IAMSAMLProviderList -ProfileName SAMLUser

Solution 2 : Python pour AD FS à l'aide d'IWA (par défaut pour AD FS 2.0)

1.    Installez les modules suivants sur 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 AD FS.

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 AD FS.

Remarque : si vous disposez d'un chemin différent 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 vos modifications, exécutez le fichier, puis remplissez les champs suivants lorsqu'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 AD FS à l'aide de l'authentification par formulaire (par défaut pour AD FS 3.0 et 4.0)

1.    Installez les modules suivants sur Python :

pip install --upgrade boto beautifulsoup4 requests

2.    Mettez en œuvre une solution générale pour l'accès à la CLI/API fédérée à l'aide de SAML 2.0, puis téléchargez le script mentionné à l'étape 4 de la publication du blog.

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


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


Besoin d'aide pour une question technique ou de facturation ?