Exporte un informe de las identidades de AWS IAM Identity Center y sus asignaciones mediante PowerShell - Recomendaciones de AWS

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.

PowerShell los resultados del script se ven 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.InstallerOrganizations,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 administradas AWSSSOReadOnly 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

Arquitectura

Arquitectura de destino

Utilice un script con un perfil AWS CLI designado para crear un informe de SSO identidades en IAM Identity Center.
  1. El usuario ejecuta el script en una línea de PowerShell comandos.

  2. El script asume el perfil indicado para AWSCLI. Esto permite el acceso al IAM Identity Center.

  3. El script recupera las configuraciones de SSO identidad del IAM Identity Center.

  4. 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

  • PowerShelles un programa de administración de automatización y configuración de Microsoft que se ejecuta en Windows, Linux y macOS.

Epics

TareaDescripciónHabilidades requeridas

Preparación del script.

  1. Copie el PowerShell script en la sección de información adicional de este patrón.

  2. En la Param sección, para su AWS entorno, defina los valores de las siguientes variables:

    • OutputFile: el nombre de archivo del informe.

    • ProfileName— El perfil con AWS CLI nombre que desea utilizar para generar el informe.

    • Region— La AWS región en la que está desplegado IAM Identity Center. Para obtener una lista completa de las regiones y sus códigos, consulte Puntos de conexión regionales.

  3. Guarde el script con el nombre de archivo SSO-Report.ps1.

Administrador de la nube

Ejecute el script.

Se recomienda ejecutar el script personalizado en el PowerShell shell con el siguiente comando.

.\SSO-Report.ps1

Si lo desea, también puede ejecutar el script desde otro intérprete de comandos introduciendo el siguiente comando.

pwsh .\SSO-Report.ps1

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

ProblemaSolución

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

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: AWS.Tools.InstallerOrganizations,SSOAdmin, yIdentityStore.

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

Error de No credentials specified or obtained from persisted/shell defaults

En la sección Preparación del script, en la sección Epics, confirme que ha introducido correctamente las variables ProfileName y Region. Asegúrese de que la configuración y las credenciales del perfil indicado tengan permisos suficientes para administrar IAM Identity Center.

Authenticode Issuer …error al instalar los módulos AWS .Tools

Agregue el parámetro -SkipPublisherCheck al final del comando Install-AWSToolsModule.

Error de Get-ORGAccountList : Assembly AWSSDK.SSO could not be found or loaded.

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:

  1. Introduzca el siguiente comando para confirmar que los módulos SSO y SSOOIDC están instalados.

    Install-AWSToolsModule SSO, SSOOIDC
  2. Inserte las siguientes líneas en el script situado debajo del bloque param().

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

Recursos relacionados

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