Exporte un informe de las identidades del centro de identidad de IAM de AWS 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 del centro de identidad de IAM de AWS y sus asignaciones mediante PowerShell

Creado 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

Servicios de AWS: IAM Identity Center; herramientas de AWS para PowerShell

Resumen

Cuando utiliza AWS IAM Identity Center (sucesor de AWS Single Sign-On) para gestionar de forma centralizada el acceso de inicio de sesión único (SSO) a todas sus cuentas y aplicaciones en la nube de Amazon Web Services (AWS), informar y auditar esas asignaciones a través de la consola de administración de AWS 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 de 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 utilizar las herramientas de AWS PowerShell para generar un informe de las configuraciones de identidad de SSO en el Centro de identidades de IAM. El informe tiene el formato de un archivo CSV e incluye el nombre de la identidad (entidad 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 

  • IAM Identity Center y AWS Organizations, configurados y habilitados.

  • PowerShell, instalado y configurado. Para obtener más información, consulte Instalación PowerShell (documentación de Microsoft).

  • Herramientas de AWS para PowerShell, instaladas y configuradas. Por motivos de rendimiento, le recomendamos encarecidamente que instale la versión modularizada de las herramientas de AWS para PowerShell, llamada. AWS.Tools Cada servicio de AWS es compatible con su pequeño módulo propio. En el PowerShell shell, introduzca los siguientes comandos para instalar los módulos necesarios para este patrón:AWS.Tools.Installer, OrganizationsSSOAdmin, y. IdentityStore

    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 (AWS Tools para obtener documentación). PowerShell Si recibe un error al instalar los módulos, consulte la sección de Solución de problemas de este patrón.

  • Interfaz de la línea de comandos de AWS (AWS CLI) o AWS SDK se deben configurar previamente con credenciales de trabajo mediante una de las siguientes acciones:

    • Utilice aws configure de CLI de AWS. Para obtener más información, consulte Configuración rápida (documentación de la CLI de AWS).

    • Configure la CLI de AWS o el AWS Cloud Development Kit (AWS CDK) para obtener acceso temporal a través de un rol de AWS Identity and Access Management (IAM). Para obtener más información, consulte Obtener credenciales de rol de IAM para acceder a la CLI (documentación del IAM Identity Center).

  • Un perfil con nombre para la AWS CLI que ha guardado las credenciales de una entidad principal de IAM que:

    • Tiene acceso a la cuenta de administración de AWS Organizations o a la cuenta de administrador delegado para IAM Identity Center

    • Tiene aplicadas las políticas administradas de AWS AWSSSOReadOnly y AWSSSODirectoryReadOnly

    Para obtener más información, consulte Uso de perfiles con nombre (documentación de CLI de AWS) y políticas administradas de AWS (documentación de IAM).

Limitaciones

  • Las cuentas de AWS 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

Cree un script con el nombre de perfil de la CLI de AWS para crear un informe de las identidades de SSO en el Centro de identidades de IAM.
  1. El usuario ejecuta el script en una línea de PowerShell comandos.

  2. El script asume el perfil indicado para la CLI de AWS. Esto le da acceso al Centro de identidades de IAM.

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

  4. El script genera un archivo CSV en el mismo directorio de la estación de trabajo en las instalaciones donde se guarda el script.

Herramientas

Servicios de AWS

  • La interfaz de la línea de comandos de AWS (AWS CLI) es una herramienta de código abierto que le permite interactuar con los servicios de AWS mediante comandos en su intérprete de comandos de línea de comandos.

  • AWS IAM Identity Center le ayuda a gestionar de forma centralizada el acceso de inicio de sesión único (SSO) a todas sus cuentas y aplicaciones en la nube de AWS.

  • Las herramientas de AWS PowerShell son un conjunto de PowerShell módulos que le ayudan a programar operaciones en sus recursos de AWS desde la línea de PowerShell 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 sección Param, en su entorno de AWS, defina los valores de las siguientes variables:

    • OutputFile: el nombre de archivo del informe.

    • ProfileName: el perfil con nombre de la AWS CLI que desea utilizar para generar el informe.

    • Region: la Región de AWS en la que se implementa 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 archivo CSV en el mismo directorio que el archivo de script.

Administrador de la nube

Analice los datos de los informes.

El archivo CSV de salida tiene los encabezados AccountNamePermissionSet, Principal y Tipo. 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.

Las herramientas de AWS PowerShell o sus módulos no están instalados. En el PowerShell shell, introduzca los siguientes comandos para instalar las herramientas de AWS 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 el IAM Identity Center.

Error Authenticode Issuer … al instalar los módulos de 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 perfiles de CLI de AWS con nombre, la CLI de AWS se configura para autenticar a los usuarios con el Centro de identidad de IAM y la CLI de AWS se configura para recuperar automáticamente los tokens 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 en la AWS CLI para acceder a la cuenta en la que está configurado el Centro de identidades de IAM, actualice el valor $ProfileName.

  • Si el Centro de identidades de IAM se implementa en una región de AWS diferente a la región predeterminada para la configuración de AWS CLI o SDK de AWS, actualice el valor $Region para usar la región en la que está implementado el Centro de identidades de IAM.

  • 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