Exportez un rapport sur les identités d'AWSIAMIdentity Center et leurs attributions en utilisant PowerShell - Recommandations AWS

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'AWSIAMIdentity Center et leurs attributions en utilisant PowerShell

Créé par Jorge Pava (AWS), Chad Miles (AWS), Frank Allotta (AWS) et Manideep Reddy Gillela () AWS

Environnement : Production

Technologies : sécurité, identité, conformité ; gestion et gouvernance

Charge de travail : Microsoft

AWSservices : IAM Identity Center ; AWS Outils pour PowerShell

Récapitulatif

Lorsque vous utilisez AWS IAM Identity Center (successeur de 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 la console de AWS gestion peuvent s'avérer fastidieux et chronophages. AWS Cela est particulièrement vrai si vous signalez les autorisations accordées à un utilisateur ou à un groupe sur des dizaines ou des centaines de AWS comptes.

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 AWS outils PowerShell pour générer un rapport sur les configurations d'SSOIAMidentité dans Identity Center. Le rapport est formaté sous forme de CSV fichier 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.

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

Prérequis

  • IAMIdentity Center and AWS Organizations, configurés et activés.

  • PowerShell, installé et configuré. Pour plus d'informations, consultez la section Installation PowerShell (documentation Microsoft).

  • AWSOutils pour PowerShell, installés et configurés. Pour des raisons de performances, nous vous recommandons vivement d'installer la version modulaire de AWS Tools for PowerShell, appeléeAWS.Tools. Chaque AWS service est soutenu par son propre petit module. Dans le PowerShell shell, entrez les commandes suivantes pour installer les modules nécessaires à ce modèle : AWS.Tools.InstallerOrganizations,SSOAdmin, etIdentityStore.

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

    Pour plus d'informations, voir Installer AWS .Tools sous Windows ou Installer AWS .Tools sous Linux ou macOS (AWSOutils pour PowerShell la documentation). Si vous recevez un message d'erreur lors de l'installation des modules, consultez la section Dépannage de ce modèle.

  • AWSInterface de ligne de commande (AWSCLI) ou AWS SDK doit être préalablement configurée avec des informations d'identification fonctionnelles en effectuant l'une des opérations suivantes :

  • Un profil nommé pour le AWS CLI qui a enregistré les informations d'identification d'un IAM directeur qui :

    • A accès au compte de gestion des AWS Organizations ou au compte d'administrateur délégué pour IAM Identity Center

    • Les politiques AWSSSOReadOnly et les politiques AWSSSODirectoryReadOnly AWS gérées s'y sont-elles appliquées ?

    Pour plus d'informations, consultez les sections Utilisation de profils nommés (AWSCLIdocumentation) et de politiques AWS gérées (IAMdocumentation).

Limites

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

Versions du produit

Architecture

Architecture cible

Script utilisant un profil AWS CLI nommé pour créer un rapport sur les SSO identités dans IAM Identity Center.
  1. L'utilisateur exécute le script dans une ligne de PowerShell commande.

  2. Le script utilise le profil nommé pour AWSCLI. Cela donne accès à IAM Identity Center.

  3. Le script récupère les configurations SSO d'identité depuis IAM Identity Center.

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

Outils

AWSservices

  • AWSL'interface de ligne de commande (AWSCLI) est un outil open source qui vous permet d'interagir avec les AWS services par le biais de commandes dans votre interface de ligne de commande.

  • AWSIAMIdentity Center vous permet de gérer de manière centralisée l'accès par authentification unique (SSO) à tous vos AWS comptes et applications cloud.

  • AWSLes outils pour PowerShell sont un ensemble de PowerShell modules qui vous aident à scripter des opérations sur vos AWS ressources à partir de la ligne de PowerShell commande.

Autres outils

  • PowerShellest un programme d'automatisation et de gestion de configuration Microsoft qui s'exécute sous Windows, Linux et macOS.

Épopées

TâcheDescriptionCompétences requises

Préparez le script.

  1. Copiez le PowerShell script dans la section Informations supplémentaires de ce modèle.

  2. Dans la Param section, pour votre AWS environnement, définissez les valeurs des variables suivantes :

    • OutputFile— Le nom de fichier du rapport.

    • ProfileName— Le profil AWS CLI nommé que vous souhaitez utiliser pour générer le rapport.

    • Region— La AWS région dans laquelle IAM Identity Center est déployé. Pour une liste complète des régions et de leurs codes, consultez la section Points de terminaison régionaux.

  3. Enregistrez le script avec le nom du fichierSSO-Report.ps1.

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.

.\SSO-Report.ps1

Vous pouvez également exécuter le script depuis un autre shell en saisissant la commande suivante.

pwsh .\SSO-Report.ps1

Le script génère un CSV fichier dans le même répertoire que le fichier de script.

Administrateur du cloud

Analysez les données du rapport.

Le CSV fichier de sortie contient les en-têtes AccountNamePermissionSet, 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

ProblèmeSolution

The term ‘Get-<parameter>’ is not recognized as the name of a cmdlet, function, script file, or operable program.Erreur

AWSLes outils pour PowerShell ses modules ne sont pas installés. Dans le PowerShell shell, entrez les commandes suivantes pour installer les AWS outils PowerShell et les modules nécessaires pour ce modèle : AWS.Tools.InstallerOrganizations,SSOAdmin, etIdentityStore.

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

No credentials specified or obtained from persisted/shell defaultsErreur

Dans Préparer le script dans la section 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 AWS modules .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 AWS CLI des profils nommés sont spécifiés, AWS CLI sont configurés pour authentifier les utilisateurs auprès IAM d'Identity Center et AWS CLI sont configurés pour récupérer automatiquement les jetons d'authentification actualisés. Pour résoudre cette erreur, procédez comme suit :

  1. Entrez la commande suivante pour confirmer que les SSOOIDC modules SSO et sont installés.

    Install-AWSToolsModule SSO, SSOOIDC
  2. Insérez les lignes suivantes dans le script situé sous le param() bloc.

    Import-Module AWS.Tools.SSO
    Import-Module AWS.Tools.SSOOIDC

Ressources connexes

Informations supplémentaires

Dans le script suivant, déterminez si vous devez mettre à jour les valeurs des paramètres suivants :

  • Si vous utilisez un profil nommé AWS CLI pour accéder au compte dans lequel IAM Identity Center est configuré, mettez à jour la $ProfileName valeur.

  • Si IAM Identity Center est déployé dans une AWS région différente de la région par défaut pour votre AWS SDK configuration AWS CLI ou votre configuration, mettez à jour la $Region valeur pour utiliser la région dans laquelle IAM Identity Center 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