J'ai configuré l'accès à la console de gestion AWS pour mes utilisateurs Active Directory à l'aide de la fédération. Je souhaite accorder aux utilisateurs le même accès à l'interface de ligne de commande AWS (AWS CLI) à l'aide d’Active Directory Federation Services (AD FS).
Brève description
Si vous autorisez les utilisateurs fédérés SAML 2.0 à accéder à la console de gestion AWS, les utilisateurs qui nécessitent un accès par programmation doivent tout de même 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), effectuez l'une des opérations suivantes :
- Configurez l'AWS CLI.
- Obtenez des informations d'identification temporaires afin que les utilisateurs fédérés puissent accéder à l'AWS CLI.
Avant d’accorder l’accès à un utilisateur fédéré, procédez comme suit :
Remarque : Cette solution n'est pas compatible si l'authentification multifactorielle (MFA) est activée pour les utilisateurs de votre répertoire.
Résolution
Si votre fournisseur d'identité (IdP) est configuré pour fonctionner avec l'authentification Windows intégrée (IWA), NTLM ou Kerberos (paramètre par défaut pour AD FS 2.0), reportez-vous à la solution 1. Si votre IdP est configuré pour fonctionner avec l'authentification par formulaire (paramètre par défaut pour AD FS 3.0 et 4.0), reportez-vous à la solution 2.
Remarque : Si des erreurs surviennent lors de l'exécution de commandes de l'interface de ligne de commande AWS, vérifiez que vous utilisez la version la plus récente de l'AWS CLI.
PowerShell pour AD FS 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 AD FS en exécutant une commande similaire à la commande suivante :
> $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 AD FS et le nom de ressource uniforme de connexion (URN) pour AWS.
3. Définissez le point de terminaison SAML en exécutant une commande similaire à la commande suivante :
> $EndpointName = Set-AWSSamlEndpoint -Endpoint "$Endpoint" -StoreAs 'ADFS-Login' -AuthenticationType NTLM
Remarque : Par défaut, le type d'authentification AD FS 2.0 est défini sur NTLM. Si vous ne spécifiez aucune valeur pour AuthenticationType dans l'exemple d'applet de commande AWS Tools précédent, AWS Tools utilise Kerberos par défaut.
4. Utilisez les paramètres de point de terminaison enregistrés pour vous authentifier auprès de l'IdP AD FS afin d'obtenir une liste des rôles que l'utilisateur peut ensuite endosser à l'aide de l'une des méthodes suivantes :
Utilisez les informations d'identification de l'utilisateur 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 endosser. Saisissez le caractère alphabétique dans votre session de terminal, comme suit :
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'AWS CLI à l'aide des informations d'identification fédérées et du profil spécifié en exécutant une commande similaire à la commande suivante :
Get-IAMSAMLProviderList -ProfileName SAMLUser
Python pour AD FS utilisant l'authentification par formulaire (paramètre 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. Implémentez une solution générale pour l'accès fédéré aux API/CLI à l'aide de SAML 2.0, puis téléchargez le script à partir de l'étape 4 de cet article de blog lié.
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 utilisez un chemin de fichier différent pour votre fichier d'informations d'identification AWS, spécifiez-le.
4. Enregistrez vos modifications, exécutez le fichier, puis renseignez les champs suivants au fur et à mesure qu'ils apparaissent :
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 réussie, exécutez des commandes à l'aide du profil SAML nouvellement configuré en utilisant le paramètre --profile de vos 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"
}
]
}
Informations connexes
Configurer l'identité fédérée à l'aide des outils AWS pour PowerShell
Activation de l'authentification unique pour AWS Managed Microsoft AD