Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Exporte un informe de las identidades de AWS IAM Identity Center y sus asignaciones mediante PowerShell
Creada por Jorge Pava (AWS), Chad Miles (AWS), Frank Allotta (AWS) y Manideep Reddy Gillela () AWS
Entorno: producción | Tecnologías: seguridad, identidad, conformidad; administración y gobierno | Carga de trabajo: Microsoft |
AWSIAMservicios: Centro de identidad; herramientas para AWS PowerShell |
Resumen
Cuando utiliza AWS IAM Identity Center (sucesor del inicio de sesión AWS único) para gestionar de forma centralizada el acceso mediante el inicio de sesión único (SSO) a todas sus cuentas y aplicaciones en la nube de Amazon Web Services (AWS), la elaboración de informes y la auditoría de esas tareas a través de la consola de AWS administración puede resultar tedioso y llevar mucho tiempo. Esto es especialmente cierto si está informando sobre los permisos de un usuario o grupo en docenas o cientos de cuentas. AWS
Para muchos, la herramienta ideal para ver esta información sería en una aplicación de hoja de cálculo, como Microsoft Excel. Esto puede ayudarle a filtrar, buscar y visualizar los datos de toda su organización, gestionados por AWS Organizations.
Este patrón describe cómo usar AWS las herramientas PowerShell para generar un informe de las configuraciones de SSO IAM identidad en Identity Center. El informe tiene el formato de un CSV archivo e incluye el nombre de la identidad (principal), el tipo de identidad (usuario o grupo), las cuentas a las que la identidad puede acceder y los conjuntos de permisos. Tras generar este informe, puede abrirlo en la aplicación que prefiera para buscar, filtrar y auditar los datos según sea necesario. En la siguiente imagen se muestran datos de muestra en una aplicación de hoja de cálculo.
Importante: dado que este informe contiene información confidencial, le recomendamos encarecidamente que la almacene de forma segura y que la comparta solo de forma need-to-know puntual. |
Requisitos previos y limitaciones
Requisitos previos
IAMIdentity Center and AWS Organizations, configurados y habilitados.
PowerShell, instalado y configurado. Para obtener más información, consulte Instalación PowerShell
(documentación de Microsoft). AWSHerramientas para PowerShell, instaladas y configuradas. Por motivos de rendimiento, le recomendamos encarecidamente que instale la versión modularizada de AWS Tools for PowerShell, llamada.
AWS.Tools
Cada AWS servicio es compatible con su propio módulo pequeño e individual. En el PowerShell shell, introduzca los siguientes comandos para instalar los módulos necesarios para este patrón:AWS.Tools.Installer
Organizations
,SSOAdmin
, yIdentityStore
.Install-Module AWS.Tools.Installer Install-AWSToolsModule -Name Organizations, SSOAdmin, IdentityStore
Para obtener más información, consulte Instalar AWS .Tools en Windows o Instalar AWS .Tools en Linux o macOS (AWSHerramientas para obtener PowerShell documentación). Si recibe un error al instalar los módulos, consulte la sección de Solución de problemas de este patrón.
AWSLa interfaz de línea de comandos (AWSCLI) o la AWS SDK debe configurarse previamente con credenciales que funcionen mediante una de las siguientes acciones:
Utilice la AWS CLI
aws configure
Para obtener más información, consulte Configuración rápida (AWSCLIdocumentación).Configure AWS CLI o AWS Cloud Development Kit (AWSCDK) para obtener acceso temporal a través de una función de AWS Identity and Access Management (IAM). Para obtener más información, consulte Obtener las credenciales de CLI acceso a IAM un rol (documentación de IAM Identity Center).
Un perfil con nombre para el AWS CLI que ha guardado las credenciales de un IAM director que:
Tiene acceso a la cuenta de administración de AWS Organizations o a la cuenta de administrador delegado de IAM Identity Center
¿Le han aplicado las políticas
AWSSSODirectoryReadOnly
AWS administradasAWSSSOReadOnly
y las políticas
Para obtener más información, consulte Uso de perfiles con nombre (AWSCLIdocumentación) y políticas AWS administradas (IAMdocumentación).
Limitaciones
Las AWS cuentas de destino deben administrarse como una organización en AWS Organizations.
Versiones de producto
Para todos los sistemas operativos, se recomienda utilizar la PowerShell versión 7.0
o posterior.
Arquitectura
Arquitectura de destino
El usuario ejecuta el script en una línea de PowerShell comandos.
El script asume el perfil indicado para AWSCLI. Esto permite el acceso al IAM Identity Center.
El script recupera las configuraciones de SSO identidad del IAM Identity Center.
El script genera un CSV archivo en el mismo directorio de la estación de trabajo local donde se guarda el script.
Herramientas
AWSservicios
AWSLa interfaz de línea de comandos (AWSCLI) es una herramienta de código abierto que te ayuda a interactuar con AWS los servicios mediante comandos en el shell de la línea de comandos.
AWSIAMIdentity Center le ayuda a gestionar de forma centralizada el acceso mediante el inicio de sesión único (SSO) a todas sus AWS cuentas y aplicaciones en la nube.
AWSLas herramientas PowerShell son un conjunto de PowerShell módulos que le ayudan a programar las operaciones de sus AWS recursos desde la PowerShell línea de comandos.
Otras herramientas
PowerShell
es un programa de administración de automatización y configuración de Microsoft que se ejecuta en Windows, Linux y macOS.
Epics
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Preparación del script. |
| Administrador de la nube |
Ejecute el script. | Se recomienda ejecutar el script personalizado en el PowerShell shell con el siguiente comando.
Si lo desea, también puede ejecutar el script desde otro intérprete de comandos introduciendo el siguiente comando.
El script genera un CSV archivo en el mismo directorio que el archivo de script. | Administrador de la nube |
Analice los datos de los informes. | El CSV archivo de salida tiene los encabezados AccountNamePermissionSet, Principal y Type. Abra este archivo en la aplicación de hojas de cálculo que prefiera. Puede crear una tabla de datos para filtrar y ordenar la salida. | Administrador de la nube |
Resolución de problemas
Problema | Solución |
---|---|
Error de | AWSLas herramientas PowerShell o sus módulos no están instalados. En el PowerShell shell, introduzca los siguientes comandos para instalar AWS las herramientas PowerShell y los módulos necesarios para este patrón:
|
Error de | En la sección Preparación del script, en la sección Epics, confirme que ha introducido correctamente las variables |
| Agregue el parámetro |
Error de | Este error puede producirse cuando se especifican AWS CLI perfiles con nombre, AWS CLI se configura para autenticar a los usuarios con IAM Identity Center y AWS CLI se configura para recuperar automáticamente los identificadores de autenticación actualizados. Para corregir este error, haga lo siguiente:
|
Recursos relacionados
¿Dónde se almacenan las opciones de configuración? (documentación) AWS CLI
Configuración del AWS IAM Identity Center AWS CLI para su uso (AWSCLIdocumentación)
Uso de perfiles con nombre (AWSCLIdocumentación)
Información adicional
En el siguiente script, determine si necesita actualizar los valores de los siguientes parámetros:
Si utiliza un perfil con nombre AWS CLI para acceder a la cuenta en la que está configurado IAM Identity Center, actualice el
$ProfileName
valor.Si IAM Identity Center está implementado en una AWS región diferente a la región predeterminada para su AWS SDK configuración AWS CLI o configuración, actualice el
$Region
valor para usar la región en la que está implementado IAM Identity Center.Si no se da ninguna de estas situaciones, no será necesario actualizar el script.
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