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.
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ée
AWS.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.Installer
Organizations
,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 :
Utilisez le AWS CLI
aws configure
Pour plus d'informations, voir Configuration rapide (AWSCLIdocumentation).Configurez AWS CLI ou AWS Cloud Development Kit (AWSCDK) pour obtenir un accès temporaire via un rôle AWS Identity and Access Management (IAM). Pour plus d'informations, voir Obtenir des informations d'identification de IAM rôle pour CLI l'accès (documentation IAM Identity Center).
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 politiquesAWSSSODirectoryReadOnly
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
Pour tous les systèmes d'exploitation, il est recommandé d'utiliser PowerShell la version 7.0
ou ultérieure.
Architecture
Architecture cible
L'utilisateur exécute le script dans une ligne de PowerShell commande.
Le script utilise le profil nommé pour AWSCLI. Cela donne accès à IAM Identity Center.
Le script récupère les configurations SSO d'identité depuis IAM Identity Center.
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
PowerShell
est un programme d'automatisation et de gestion de configuration Microsoft qui s'exécute sous Windows, Linux et macOS.
Épopées
Tâche | Description | Compétences requises |
---|---|---|
Préparez le script. |
| 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.
Vous pouvez également exécuter le script depuis un autre shell en saisissant la commande suivante.
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ème | Solution |
---|---|
| 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 :
|
| Dans Préparer le script dans la section Epics, vérifiez que vous avez correctement saisi les |
| Ajoutez le |
| 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 :
|
Ressources connexes
Où sont stockés les paramètres de configuration ? (AWSCLIdocumentation)
Configuration du centre AWS CLI d'identité pour utiliser AWS IAM Identity Center (AWSCLIdocumentation)
Utilisation de profils nommés (AWSCLIdocumentation)
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