Configuration d'identités fédérées avec AWS Tools for PowerShell - AWS Tools for PowerShell

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Configuration d'identités fédérées avec AWS Tools for PowerShell

Pour permettre aux utilisateurs de votre organisation d'accéder aux ressources AWS, vous devez configurer une méthode d'authentification standard et reproductible à des fins de sécurité, d'audit et de conformité, et à même de prendre en charge la séparation des rôles et des comptes. Bien qu'il soit fréquent de fournir aux utilisateurs la possibilité d'accéder aux API AWS, sans accès aux API fédérées, vous devrez aussi créer des utilisateurs AWS Identity and Access Management (IAM), ce qui est contraire à l'objectif d'utilisation de la fédération. Cette rubrique décrit la prise en charge du langage SAML (Security Assertion Markup Language) dans les AWS Tools for PowerShell, qui simplifie votre solution de fédération des accès.

La prise en charge de SAML dans les AWS Tools for PowerShell permet de fournir à vos utilisateurs un accès fédéré aux services AWS. SAML est un format XML ouvert standard destiné à la transmission des données d'authentification et d'autorisation des utilisateurs entre services, en particulier entre un fournisseur d'identité (par exemple, Active Directory Federation Services) et un fournisseur de services (comme AWS). Pour plus d'informations sur SAML et son fonctionnement, consultez SAML sur Wikipédia ou SAML Technical Specifications sur le site web OASIS (Organization for the Advancement of Structured Information Standards). La prise en charge de SAML dans les AWS Tools for PowerShell est compatible avec SAML 2.0.

Prérequis

Les éléments suivants doivent être en place avant que vous n'utilisiez la prise en charge SAML pour la première fois.

  • Une solution de fédération d'identités correctement intégrée à votre compte AWS pour l'accès à la console en utilisant uniquement les informations d'identification de votre entreprise. Pour de plus amples informations sur la manière spécifique de procéder pour Active Directory Federation Services, veuillez consulter À propos de la fédération SAML 2.0 dans le guide de l'utilisateur IAM et l'article de blog Enabling Federation to AWS Using Windows Active Directory, AD FS, and SAML 2.0. Même si l'article du blog couvre AD FS 2.0, les étapes sont similaires si vous exécutez AD FS 3.0.

  • Version 3.1.31.0 ou ultérieure des AWS Tools for PowerShell installée sur votre poste de travail local.

Comment un utilisateur à l'identité fédérée obtient un accès fédéré aux API de service AWS

Le processus suivant décrit comment, à un haut niveau, un utilisateur Active Directory (AD) est fédéré par AD FS pour accéder aux ressources AWS.

  1. Le client sur l'ordinateur de l'utilisateur fédéré s'authentifie par rapport aux services AD FS.

  2. Si l'authentification réussit, AD FS envoie à l'utilisateur une assertion SAML.

  3. Le client de l'utilisateur envoie l'assertion SAML à l'AWS Security Token Service (STS) dans le cadre d'une demande de fédération SAML.

  4. STS renvoie une réponse SAML contenant des informations d'identification temporaires AWS pour un rôle que l'utilisateur peut assumer.

  5. L'utilisateur accède aux API de service AWS en incluant ces informations d'identification temporaires dans la demande faite par les AWS Tools for PowerShell.

Fonctionnement de la prise en charge SAML dans les AWS Tools for PowerShell

Cette section décrit comment les applets de commande des AWS Tools for PowerShell permettent la configuration d'une fédération d'identités basée sur SAML pour les utilisateurs.

  1. Les AWS Tools for PowerShell sont authentifiés par rapport à AD FS en utilisant les informations d'identification en cours de l'utilisateur Windows ou de façon interactive, quand l'utilisateur tente d'exécuter une applet de commande nécessitant des informations d'identification pour effectuer un appel dans AWS.

  2. AD FS authentifie l'utilisateur.

  3. AD FS génère une réponse d'authentification SAML 2.0 qui inclut une assertion ; le but de l'assertion est d'identifier et de fournir des informations sur l'utilisateur. Les AWS Tools for PowerShell extraient la liste des rôles autorisés de l'utilisateur à partir de l'assertion SAML.

  4. Les AWS Tools for PowerShell transmettent la demande SAML (y compris l'ARN (Amazon Resource Names) du rôle demandé) à STS en effectuant l'appel d'API AssumeRoleWithSAMLRequest.

  5. Si la demande SAML est valide, STS renvoie une réponse qui contient les AWS AccessKeyId, SecretAccessKey, et SessionToken. Ces informations d'identification durent 3 600 secondes (1 heure).

  6. L'utilisateur dispose alors d'informations d'identification valides pour travailler avec toutes les API de service AWS auxquelles le rôle de l'utilisateur est autorisé à accéder. Les AWS Tools for PowerShell appliquent automatiquement ces informations d'identification à tous les appels d'API AWS ultérieurs et les renouvellent automatiquement lorsqu'elles arrivent à expiration.

    Note

    Lorsque les informations d'identification arrivent à expiration, et que de nouvelles informations d'identification sont nécessaires, les AWS Tools for PowerShell sont automatiquement ré-authentifiés auprès d'AD FS et obtiennent de nouvelles informations d'identification pour une nouvelle heure. Pour les utilisateurs de comptes joints à un domaine, ce processus se produit silencieusement. Pour les comptes qui ne sont pas joints à un domaine, les AWS Tools for PowerShell invitent les utilisateurs à saisir leurs informations d'identification pour pouvoir s'authentifier à nouveau.

Comment utiliser les applets de commande de configuration SAML PowerShell

AWS Tools for PowerShell inclue deux nouvelles applets de commande qui fournissent la prise en charge de SAML.

  • Set-AWSSamlEndpoint configure votre point de terminaison AD FS, attribue un nom convivial au point de terminaison et, en option, décrit le type d'authentification du point de terminaison.

  • Set-AWSSamlRoleProfile crée ou modifie un profil de compte utilisateur que vous souhaitez associer à un point de terminaison AD FS, identifié en spécifiant le nom convivial que vous avez fourni à l'applet de commande Set-AWSSamlEndpoint. Chaque profil de rôle correspond à un seul rôle qu'un utilisateur est autorisé à effectuer.

    Tout comme avec les profils d'informations d'identification AWS, vous attribuez un nom convivial au profil du rôle. Vous pouvez utiliser le même nom convivial avec l'applet de commande Set-AWSCredential ou comme valeur du paramètre -ProfileName pour n'importe quelle applet de commande qui appelle les API de services AWS.

Ouvrez une nouvelle session AWS Tools for PowerShell. Si vous exécutez PowerShell 3.0 ou une version plus récente, le module des AWS Tools for PowerShell est automatiquement importé lorsque vous exécutez l'une de ses applets de commande. Si vous exécutez PowerShell 2.0, vous devez importer le module manuellement en exécutant l'applet de commande Import-Module, comme illustré dans l'exemple suivant.

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

Comment exécuter les applets de commande Set-AWSSamlEndpoint et Set-AWSSamlRoleProfile

  1. Tout d'abord, configurez les paramètres de point de terminaison du système AD FS. Le moyen le plus simple de procéder consiste à stocker le point de terminaison dans une variable, comme indiqué dans cette étape. N'oubliez pas de remplacer les espaces réservés à l'ID de compte et au nom d'hôte AD FS par vos propres ID de compte et nom d'hôte AD FS. Spécifiez le nom d'hôte AD FS dans le paramètre Endpoint.

    PS > $endpoint = "https://adfs.example.com/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices"
  2. Pour créer les paramètres de point de terminaison, exécutez l'applet de commande Set-AWSSamlEndpoint, en spécifiant la valeur correcte du paramètre AuthenticationType. Les valeurs valides incluent Basic, Digest, Kerberos, Negotiate et NTLM. Si vous ne spécifiez pas ce paramètre, la valeur par défaut est Kerberos.

    PS > $epName = Set-AWSSamlEndpoint -Endpoint $endpoint -StoreAs ADFS-Demo -AuthenticationType NTLM

    L'applet de commande renvoie le nom amical que vous avez assigné en utilisant le paramètre -StoreAs. Ainsi, vous pouvez l'utiliser lorsque vous exécutez Set-AWSSamlRoleProfile à la ligne suivante.

  3. Maintenant, exécutez l'applet de commande Set-AWSSamlRoleProfile pour vous authentifier auprès du fournisseur d'identité AD FS et obtenir l'ensemble des rôles (dans l'assertion SAML) que l'utilisateur est autorisé à effectuer.

    L'applet de commande Set-AWSSamlRoleProfile utilise l'ensemble de rôles retourné pour demander à l'utilisateur de sélectionner un rôle à associer au profil spécifié ou de valider que les données de rôle fournies dans les paramètres sont présentes (si ce n'est pas le cas, l'utilisateur est invité à choisir). Si l'utilisateur est autorisé pour un seul rôle, l'applet de commande associe automatiquement le rôle au profil, sans intervention de l'utilisateur. Il n'est pas nécessaire de fournir les informations d'identification pour configurer un profil en vue d'une utilisation jointe à un domaine.

    PS > Set-AWSSamlRoleProfile -StoreAs SAMLDemoProfile -EndpointName $epName

    Sinon, pour les comptes non joints à un domaine, vous pouvez fournir les informations d'identification Active Directory, puis sélectionner un rôle AWS auquel l'utilisateur a accès, comme indiqué dans la ligne suivante. Cette solution est utile si vous avez différents comptes utilisateur Active Directory pour différencier les rôles au sein de votre entreprise (par exemple, les fonctions d'administration).

    PS > $credential = Get-Credential -Message "Enter the domain credentials for the endpoint" PS > Set-AWSSamlRoleProfile -EndpointName $epName -NetworkCredential $credential -StoreAs SAMLDemoProfile
  4. Dans tous les cas, l'applet de commande Set-AWSSamlRoleProfile vous invite à choisir le rôle qui doit être stocké dans le profil. L'exemple suivant montre deux rôles disponibles : ADFS-Dev et ADFS-Production. Les rôles IAM sont associés à vos informations d'identification de connexion AD par l'administrateur AD FS.

    Select Role Select the role to be assumed when this profile is active [1] 1 - ADFS-Dev [2] 2 - ADFS-Production [?] Help (default is "1"):

    Vous pouvez également spécifier un rôle sans invite, en entrant les paramètres RoleARN, PrincipalARN et NetworkCredential (ce dernier paramètre est facultatif). Si le rôle spécifié n'est pas répertorié dans l'assertion renvoyée par l'authentification, l'utilisateur est invité à choisir parmi les rôles disponibles.

    PS > $params = @{ "NetworkCredential"=$credential, "PrincipalARN"="{arn:aws:iam::012345678912:saml-provider/ADFS}", "RoleARN"="{arn:aws:iam::012345678912:role/ADFS-Dev}" } PS > $epName | Set-AWSSamlRoleProfile @params -StoreAs SAMLDemoProfile1 -Verbose
  5. Vous pouvez créer des profils pour tous les rôles en une seule commande en ajoutant le paramètre StoreAllRoles, comme indiqué dans le code suivant. Notez que le nom du rôle est utilisé comme nom de profil.

    PS > Set-AWSSamlRoleProfile -EndpointName $epName -StoreAllRoles ADFS-Dev ADFS-Production

Comment utiliser les profils de rôle pour exécuter les applets de commande qui nécessitent des informations d'identification AWS

Pour exécuter des applets de commande nécessitant des informations d'identification AWS, vous pouvez utiliser des profils de rôle définis dans le fichier d'informations d'identification partagées AWS. Fournissez le nom d'un profil de rôle à Set-AWSCredential (ou en tant que valeur d'un paramètre ProfileName dans les AWS Tools for PowerShell) afin d'obtenir automatiquement des informations d'identification AWS temporaires pour le rôle décrit dans le profil.

Même si vous n'utilisez qu'un seul profil de rôle à la fois, vous pouvez basculer entre les profils au sein d'une session shell. L'applet de commande Set-AWSCredential n'authentifie pas et n'obtient pas les informations d'identification lorsque vous l'exécutez seule ; l'applet de commande enregistre que vous souhaitez utiliser un profil de rôle spécifié. Tant que vous n'exécutez pas une applet de commande nécessitant des informations d'identification AWS, aucune authentification ou demande d'informations d'identification ne se produit.

Vous pouvez désormais employer les informations d'identification AWS temporaires que vous avez obtenues avec le profil SAMLDemoProfile pour utiliser les API de services AWS. Les sections suivantes fournissent des exemples sur l'utilisation des profils de rôle.

Exemple 1 : Définir un rôle par défaut avec Set-AWSCredential

Cet exemple définit un rôle par défaut pour une session des AWS Tools for PowerShell en utilisant Set-AWSCredential. Ensuite, vous pouvez exécuter des applets de commande qui nécessitent des informations d'identification et sont autorisées par le rôle spécifié. Cet exemple répertorie toutes les instances Amazon Elastic Compute Cloud de la région USA Ouest (Oregon) associées au profil que vous avez spécifié avec l'applet de commande Set-AWSCredential.

PS > Set-AWSCredential -ProfileName SAMLDemoProfile PS > Get-EC2Instance -Region us-west-2 | Format-Table -Property Instances,GroupNames Instances GroupNames --------- ---------- {TestInstance1} {default} {TestInstance2} {} {TestInstance3} {launch-wizard-6} {TestInstance4} {default} {TestInstance5} {} {TestInstance6} {AWS-OpsWorks-Default-Server}

Exemple 2 : Modifier les profils de rôle pendant une session PowerShell

Cet exemple répertorie tous les compartiments Amazon S3 disponibles dans le compte AWS du rôle associé au profil SAMLDemoProfile. L'exemple montre que, même si vous avez utilisé un autre profil précédemment dans votre session des AWS Tools for PowerShell, vous pouvez modifier les profils en spécifiant une autre valeur pour le paramètre -ProfileName avec les applets de commande qui le prennent en charge. Il s'agit d'une tâche courante pour les administrateurs qui gèrent Amazon S3 à partir de la ligne de commande PowerShell.

PS > Get-S3Bucket -ProfileName SAMLDemoProfile CreationDate BucketName ------------ ---------- 7/25/2013 3:16:56 AM mybucket1 4/15/2015 12:46:50 AM mybucket2 4/15/2015 6:15:53 AM mybucket3 1/12/2015 11:20:16 PM mybucket4

Notez que l'applet de commande Get-S3Bucket spécifie le nom du profil créé en exécutant l'applet de commande Set-AWSSamlRoleProfile. Cette commande peut être utile si vous avez défini un profil de rôle précédemment dans votre session (par exemple, en exécutant l'applet de commande Set-AWSCredential) et que vous voulez utiliser un autre rôle pour l'applet de commande Get-S3Bucket. Le gestionnaire de profils rend les informations d'identification temporaires accessibles à l'applet de commande Get-S3Bucket.

Bien que les informations d'identification expirent après 1 heure (limite imposée par STS), les AWS Tools for PowerShell actualisent automatiquement les informations d'identification en demandant une nouvelle assertion SAML lorsque les outils détectent que les informations d'identification ont expiré.

Pour les utilisateurs joints à un domaine, ce processus a lieu sans interruption, car l'identité Windows de l'utilisateur actif est utilisée lors de l'authentification. Pour les comptes utilisateur non joints à un domaine, les AWS Tools for PowerShell affichent une invite d'information d'identification PowerShell demandant le mot de passe de l'utilisateur. L'utilisateur fournit les informations d'identification qui sont utilisées pour l'authentifier à nouveau et obtenir une nouvelle assertion.

Exemple 3 : Obtenir les instances d'une région

L'exemple suivant répertorie toutes les instances Amazon EC2 de la région Asie-Pacifique (Sydney) associées au compte utilisé par le profil ADFS-Production. Il s'agit d'une commande utile pour renvoyer toutes les instances Amazon EC2 d'une région.

PS > (Get-Ec2Instance -ProfileName ADFS-Production -Region ap-southeast-2).Instances | Select InstanceType, @{Name="Servername";Expression={$_.tags | where key -eq "Name" | Select Value -Expand Value}} InstanceType Servername ------------ ---------- t2.small DC2 t1.micro NAT1 t1.micro RDGW1 t1.micro RDGW2 t1.micro NAT2 t2.small DC1 t2.micro BUILD

Lectures complémentaires

Pour obtenir des informations générales sur la façon de mettre en œuvre un accès fédéré aux API, consultez l'article de blog relatif à la mise en œuvre d'une solution générale pour l'accès fédéré aux API et aux interfaces CLI à l'aide de SAML 2.0.

Si vous avez des questions ou des commentaires, veuillez consulter les forums dédiés aux développeurs AWS pour les scripts PowerShell ou le développement .NET.