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

Lecture de 5 minute(s)
0

J'ai configuré l'accès à la console de gestion AWS 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 à la console de gestion AWS, les utilisateurs ayant besoin d'un accès programmatique 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 d'un utilisateur AWS Identity and Access Management (IAM), vous pouvez :

Configurer AWS CLI

-ou-

Obtenir des informations d'identification temporaires pour permettre aux utilisateurs fédérés d'accéder à AWS CLI.

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

Remarque : cette solution n'est pas compatible si l'authentification multifactorielle (MFA) est activée pour les utilisateurs de votre annuaire.

Solution

Si votre fournisseur d'identité (IdP) est configuré pour fonctionner avec Integrated Windows Authentication (IWA), NTLM ou Kerberos (les protocoles par défaut pour AD FS 2.0), consultez la solution 1. Si votre fournisseur IdP est configuré pour utiliser l'authentification par formulaire (par défaut pour ADFS 3.0 et 4.0), consultez la solution 2.

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 que vous souhaitez 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 à AWS CLI à 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 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 ce billet de blog.

3.    Ouvrez le script et définissez votre région et votre format de sortie préférés. Remplacez adfs.example.com par votre URL, puis saisissez le nom de domaine complet (FQDN) de votre serveur AD FS.

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

Remarque : si vous disposez d'un chemin d'accès différent pour le fichier d'informations d'identification AWS, spécifiez-le.

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.

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"
    }
  ]
}

Informations connexes

Configuration d'une identité fédérée avec les outils AWS pour PowerShell

Authentification unique

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an