

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.

# Exportez un rapport sur les identités d'AWS IAM Identity Center et leurs attributions à l'aide de PowerShell
<a name="export-a-report-of-aws-iam-identity-center-identities-and-their-assignments-by-using-powershell"></a>

*Jorge Pava, Frank Allotta, Manideep Reddy Gillela et Tchad Miles, Amazon Web Services*

## Résumé
<a name="export-a-report-of-aws-iam-identity-center-identities-and-their-assignments-by-using-powershell-summary"></a>

Lorsque vous utilisez AWS IAM Identity Center (successeur d'AWS Single Sign-On) pour gérer de manière centralisée l'accès par authentification unique (SSO) à tous vos comptes Amazon Web Services (AWS) et à vos applications cloud, le reporting et l'audit de ces attributions via l'AWS Management Console peuvent s'avérer fastidieux et chronophages. Cela est particulièrement vrai si vous signalez les autorisations accordées à un utilisateur ou à un groupe sur des dizaines ou des centaines de comptes AWS.

Pour de nombreuses personnes, l'outil idéal pour consulter ces informations serait un tableur tel que Microsoft Excel. Cela peut vous aider à filtrer, rechercher et visualiser les données de l'ensemble de votre organisation, gérées par AWS Organizations.

Ce modèle décrit comment utiliser les outils AWS PowerShell pour générer un rapport sur les configurations d'identité SSO dans IAM Identity Center. Le rapport est formaté sous forme de fichier CSV et inclut le nom de l'identité (principal), le type d'identité (utilisateur ou groupe), les comptes auxquels l'identité peut accéder et les ensembles d'autorisations. Après avoir généré ce rapport, vous pouvez l'ouvrir dans votre application préférée pour rechercher, filtrer et auditer les données selon vos besoins. L'image suivante montre des exemples de données dans un tableur.

![\[PowerShell résultats de script affichés dans un tableur.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/46c7dc7f-c726-4754-b590-2f09d657b167/images/bbc21d8b-fc5d-4b5d-b159-81197a89823e.png)



| 
| 
| Important : ce rapport contenant des informations sensibles, nous vous recommandons vivement de le stocker en toute sécurité et de ne le partager que sur une need-to-know base limitée. | 
| --- |

## Conditions préalables et limitations
<a name="export-a-report-of-aws-iam-identity-center-identities-and-their-assignments-by-using-powershell-prereqs"></a>

**Conditions préalables**
+ IAM Identity Center et AWS Organizations, configurés et activés.
+ PowerShell, installé et configuré. Pour plus d'informations, consultez la section [Installation PowerShell](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell?view=powershell-7.2) (documentation Microsoft).
+ Outils AWS pour PowerShell, installés et configurés. Pour des raisons de performances, nous vous recommandons vivement d'installer la version modulaire d'AWS Tools for PowerShell, appelée`AWS.Tools`. Chaque service AWS est pris en charge par son propre petit module. Dans le PowerShell shell, entrez les commandes suivantes pour installer les modules nécessaires à ce modèle : `AWS.Tools.Installer``Organizations`,`SSOAdmin`, et`IdentityStore`.

  ```
  Install-Module AWS.Tools.Installer
  Install-AWSToolsModule -Name Organizations, SSOAdmin, IdentityStore
  ```

  Pour plus d'informations, consultez [Installer AWS.tools sous Windows](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up-windows.html#ps-installing-awstools) ou [Installer AWS.tools sous Linux ou macOS (outils](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up-linux-mac.html#install-aws.tools-on-linux-macos) AWS pour la documentation). PowerShell Si vous recevez un message d'erreur lors de l'installation des modules, consultez la section [Dépannage](#export-a-report-of-aws-iam-identity-center-identities-and-their-assignments-by-using-powershell-troubleshooting) de ce modèle.
+ L'interface de ligne de commande AWS (AWS CLI) ou le SDK AWS doivent être préalablement configurés avec des informations d'identification fonctionnelles en effectuant l'une des opérations suivantes :
  + Utilisez l'interface de ligne de commande AWS `aws configure` Pour plus d'informations, consultez la section [Configuration rapide](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config) (documentation de l'interface de ligne de commande AWS).
  + Configurez l'AWS CLI ou le AWS Cloud Development Kit (AWS CDK) pour obtenir un accès temporaire via un rôle AWS Identity and Access Management (IAM). Pour plus d'informations, voir [Obtenir les informations d'identification du rôle IAM pour l'accès à la CLI](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtogetcredentials.html) (documentation IAM Identity Center).
+ Un profil nommé pour la CLI AWS qui a enregistré les informations d'identification d'un principal IAM qui :
  + A accès au compte de gestion AWS Organizations ou au compte d'administrateur délégué pour IAM Identity Center
  + Les politiques gérées par `AWSSSODirectoryReadOnly` AWS `AWSSSOReadOnly` et celles gérées par AWS s'y sont-elles appliquées ?

  Pour plus d'informations, consultez les sections [Utilisation de profils nommés](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles) (documentation de l'interface de ligne de commande [AWS) et politiques gérées par AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) (documentation IAM).

**Limites**
+ Les comptes AWS cibles doivent être gérés en tant qu'organisation dans AWS Organizations.

**Versions du produit**
+ Pour tous les systèmes d'exploitation, il est recommandé d'utiliser [PowerShell la version 7.0](https://github.com/powershell/powershell) ou ultérieure.

## Architecture
<a name="export-a-report-of-aws-iam-identity-center-identities-and-their-assignments-by-using-powershell-architecture"></a>

**Architecture cible**

![\[Script utilisant le profil nommé de la CLI AWS pour créer un rapport sur les identités SSO dans IAM Identity Center.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/46c7dc7f-c726-4754-b590-2f09d657b167/images/ae5189aa-8197-4a05-88df-7c0294a679a1.png)


1. L'utilisateur exécute le script dans une ligne de PowerShell commande.

1. Le script utilise le profil nommé pour l'AWS CLI. Cela donne accès à IAM Identity Center.

1. Le script récupère les configurations d'identité SSO auprès d'IAM Identity Center.

1. Le script génère un fichier CSV dans le même répertoire du poste de travail local où le script est enregistré.

## Outils
<a name="export-a-report-of-aws-iam-identity-center-identities-and-their-assignments-by-using-powershell-tools"></a>

**Services AWS**
+ [L'interface de ligne de commande AWS (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) est un outil open source qui vous permet d'interagir avec les services AWS par le biais de commandes dans votre shell de ligne de commande.
+ [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html) vous aide à gérer de manière centralisée l'accès par authentification unique (SSO) à tous vos comptes AWS et applications cloud.
+ Les [outils AWS pour PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-welcome.html) sont un ensemble de PowerShell modules qui vous aident à créer des scripts pour des opérations sur vos ressources AWS à partir de la ligne de PowerShell commande.

**Autres outils**
+ [PowerShell](https://learn.microsoft.com/en-us/powershell/)est un programme d'automatisation et de gestion de configuration Microsoft qui s'exécute sous Windows, Linux et macOS.

## Épopées
<a name="export-a-report-of-aws-iam-identity-center-identities-and-their-assignments-by-using-powershell-epics"></a>

### Générer le rapport
<a name="generate-the-report"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Préparez le script. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/export-a-report-of-aws-iam-identity-center-identities-and-their-assignments-by-using-powershell.html) | Administrateur du cloud | 
| Exécutez le script. | Il est recommandé d'exécuter votre script personnalisé dans le PowerShell shell à l'aide de la commande suivante.<pre>.\SSO-Report.ps1</pre>Vous pouvez également exécuter le script depuis un autre shell en saisissant la commande suivante.<pre>pwsh .\SSO-Report.ps1</pre>Le script génère un fichier CSV dans le même répertoire que le fichier de script. | Administrateur du cloud | 
| Analysez les données du rapport. | Le fichier CSV de sortie comporte les en-têtes **AccountName**PermissionSet****, **Principal** et **Type**. Ouvrez ce fichier dans votre tableur préféré. Vous pouvez créer une table de données pour filtrer et trier la sortie. | Administrateur du cloud | 

## Résolution des problèmes
<a name="export-a-report-of-aws-iam-identity-center-identities-and-their-assignments-by-using-powershell-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| `The term ‘Get-<parameter>’ is not recognized as the name of a cmdlet, function, script file, or operable program.`Erreur  | Les outils AWS pour PowerShell ou ses modules ne sont pas installés. Dans le PowerShell shell, entrez les commandes suivantes pour installer les outils AWS PowerShell et les modules nécessaires pour ce modèle : `AWS.Tools.Installer``Organizations`,`SSOAdmin`, et`IdentityStore`.<pre>Install-Module AWS.Tools.Installer<br />Install-AWSToolsModule -Name Organizations, SSOAdmin, IdentityStore</pre> | 
| `No credentials specified or obtained from persisted/shell defaults`Erreur  | Dans *Préparer le script* dans la section [Epics](#export-a-report-of-aws-iam-identity-center-identities-and-their-assignments-by-using-powershell-epics), vérifiez que vous avez correctement saisi les `Region` variables `ProfileName` et. Assurez-vous que les paramètres et les informations d'identification du profil nommé disposent des autorisations suffisantes pour administrer IAM Identity Center. | 
| `Authenticode Issuer …`erreur lors de l'installation des modules AWS.tools | Ajoutez le `-SkipPublisherCheck` paramètre à la fin de la `Install-AWSToolsModule` commande. | 
| `Get-ORGAccountList : Assembly AWSSDK.SSO could not be found or loaded.`Erreur  | Cette erreur peut se produire lorsque des profils d'interface de ligne de commande AWS nommés sont spécifiés, que l'interface de ligne de commande AWS est configurée pour authentifier les utilisateurs auprès d'IAM Identity Center et que l'interface de ligne de commande AWS est configurée pour récupérer automatiquement des jetons d'authentification actualisés. Pour résoudre cette erreur, procédez comme suit :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/export-a-report-of-aws-iam-identity-center-identities-and-their-assignments-by-using-powershell.html) | 

## Ressources connexes
<a name="export-a-report-of-aws-iam-identity-center-identities-and-their-assignments-by-using-powershell-resources"></a>
+ [Où sont stockés les paramètres de configuration ?](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-where) (documentation de la CLI AWS)
+ [Configuration de l'interface de ligne de commande AWS pour utiliser AWS IAM Identity Center](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html) (documentation de l'interface de ligne de commande AWS)
+ [Utilisation de profils nommés](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles) (documentation de l'AWS CLI)

## Informations supplémentaires
<a name="export-a-report-of-aws-iam-identity-center-identities-and-their-assignments-by-using-powershell-additional"></a>

Dans le script suivant, déterminez si vous devez mettre à jour les valeurs des paramètres suivants :
+ Si vous utilisez un profil nommé dans l'AWS CLI pour accéder au compte dans lequel IAM Identity Center est configuré, mettez à jour la `$ProfileName` valeur. 
+ Si le centre d'identité IAM est déployé dans une région AWS différente de la région par défaut pour la configuration de votre interface de ligne de commande AWS ou de votre kit SDK AWS, mettez à jour la `$Region` valeur pour utiliser la région dans laquelle le centre d'identité IAM est déployé.
+ Si aucune de ces situations ne s'applique, aucune mise à jour du script n'est requise.

```
param (
    # The name of the output CSV file
    [String] $OutputFile  = "SSO-Assignments.csv",
    # The AWS CLI named profile
    [String] $ProfileName = "",
    # The AWS Region in which IAM Identity Center is configured
    [String] $Region      = ""
)
$Start = Get-Date; $OrgParams = @{}
If ($Region){ $OrgParams.Region = $Region}
if ($ProfileName){$OrgParams.ProfileName = $ProfileName}
$SSOParams   = $OrgParams.Clone(); $IdsParams = $OrgParams.Clone()
$AccountList = Get-ORGAccountList @OrgParams | Select-Object Id, Name
$SSOinstance = Get-SSOADMNInstanceList @OrgParams
$SSOParams['InstanceArn']       = $SSOinstance.InstanceArn
$IdsParams['IdentityStoreId']   = $SSOinstance.IdentityStoreId
$PSsets       = @{}; $Principals   = @{}
$Assignments  = @(); $AccountCount = 1; Write-Host ""
foreach ($Account in $AccountList) {
    $Duration = New-Timespan -Start $Start -End (Get-Date) | ForEach-Object {[Timespan]::New($_.Days, $_.Hours, $_.Minutes, $_.Seconds)}
    Write-Host "`r$Duration - Account $AccountCount of $($AccountList.Count) (Assignments:$($Assignments.Count))        " -NoNewline
    $AccountCount++
    foreach ($PS in Get-SSOADMNPermissionSetsProvisionedToAccountList -AccountId $Account.Id @SSOParams) {
        if (-not $PSsets[$PS]) {$PSsets[$PS] = (Get-SSOADMNPermissionSet @SSOParams -PermissionSetArn $PS).Name;$APICalls++}
        $AssignmentsResponse = Get-SSOADMNAccountAssignmentList @SSOParams -PermissionSetArn $PS -AccountId $Account.Id
        if ($AssignmentsResponse.NextToken) {$AccountAssignments = $AssignmentsResponse.AccountAssignments}
        else {$AccountAssignments = $AssignmentsResponse}
        While ($AssignmentsResponse.NextToken) {
            $AssignmentsResponse = Get-SSOADMNAccountAssignmentList @SSOParams -PermissionSetArn $PS -AccountId $Account.Id -NextToken $AssignmentsResponse.NextToken
            $AccountAssignments += $AssignmentsResponse.AccountAssignments}
        foreach ($Assignment in $AccountAssignments) {
            if (-not $Principals[$Assignment.PrincipalId]) {
                $AssignmentType = $Assignment.PrincipalType.Value
                $Expression     = "Get-IDS"+$AssignmentType+" @IdsParams -"+$AssignmentType+"Id "+$Assignment.PrincipalId
                $Principal      = Invoke-Expression $Expression
                if ($Assignment.PrincipalType.Value -eq "GROUP") { $Principals[$Assignment.PrincipalId] = $Principal.DisplayName } 
                else { $Principals[$Assignment.PrincipalId] = $Principal.UserName }
            }
            $Assignments += [PSCustomObject]@{
                AccountName     = $Account.Name
                PermissionSet   = $PSsets[$PS]
                Principal       = $Principals[$Assignment.PrincipalId]
                Type            = $Assignment.PrincipalType.Value}
        }
    }
}
$Duration = New-Timespan -Start $Start -End (Get-Date) | ForEach-Object {[Timespan]::New($_.Days, $_.Hours, $_.Minutes, $_.Seconds)}
Write-Host "`r$($AccountList.Count) accounts done in $Duration. Outputting result to $OutputFile"
$Assignments | Sort-Object Account | Export-CSV -Path $OutputFile -Force
```