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.
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
,Organizations
SSOAdmin
, 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
yAWSSSODirectoryReadOnly
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
El usuario ejecuta el script en una línea de PowerShell comandos.
El script asume el perfil indicado para la CLI de AWS. Esto le da acceso al Centro de identidades de IAM.
El script recupera las configuraciones de identidad del SSO del IAM Identity Center.
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
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 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
Problema | Solución |
---|---|
Error de | 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:
|
Error de | En la sección Preparación del script, en la sección Epics, confirme que ha introducido correctamente las variables |
Error | Agregue el parámetro |
Error de | 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:
|
Recursos relacionados
¿Dónde se almacenan las opciones de configuración? (documentación de la CLI de AWS)
Configurar la CLI de AWS para usar AWS IAM Identity Center (documentación de la CLI de AWS)
Uso de perfiles con nombre (documentación de la CLI de AWS)
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