Exporte um relatório das identidades do AWS IAM Identity Center e suas atribuições usando PowerShell - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Exporte um relatório das identidades do AWS IAM Identity Center e suas atribuições usando PowerShell

Criado por Jorge Pava (AWS), Chad Miles (), Frank Allotta (AWS) e Manideep Reddy Gillela (AWS) AWS

Ambiente: produção

Tecnologias: segurança, identidade, conformidade; gerenciamento e governança

Workload: Microsoft

AWSserviços: IAM Identity Center; AWS Ferramentas para PowerShell

Resumo

Quando você usa o AWS IAM Identity Center (sucessor do AWS Single Sign-On) para gerenciar centralmente o acesso de single sign-on (SSO) a todas as suas contas e aplicativos na nuvem da Amazon Web Services (AWS), relatar e auditar essas atribuições por meio do AWS Management Console pode ser entediante e demorado. Isso é especialmente verdadeiro se você estiver relatando as permissões de um usuário ou grupo em dezenas ou centenas de AWS contas.

Para muitos, a ferramenta ideal para visualizar essas informações seria em um aplicativo de planilhas, como o Microsoft Excel. Isso pode ajudá-lo a filtrar, pesquisar e visualizar os dados de toda a sua organização, gerenciados por AWS Organizations.

Esse padrão descreve como usar AWS as Ferramentas PowerShell para gerar um relatório de configurações de SSO IAM identidade no Identity Center. O relatório é formatado como um CSV arquivo e inclui o nome da identidade (principal), o tipo de identidade (usuário ou grupo), as contas que a identidade pode acessar e os conjuntos de permissões. Depois de gerar esse relatório, você pode abri-lo em seu aplicativo preferido para pesquisar, filtrar e auditar os dados conforme necessário. A imagem a seguir mostra dados de amostra em um aplicativo de planilha.

PowerShell resultados do script visualizados no aplicativo de planilhas.

Importante: como esse relatório contém informações confidenciais, é altamente recomendável que você as armazene com segurança e as compartilhe somente de forma específica. need-to-know

Pré-requisitos e limitações

Pré-requisitos

  • IAMIdentity Center and AWS Organizations, configurados e habilitados.

  • PowerShell, instalado e configurado. Para obter mais informações, consulte Instalando PowerShell (documentação da Microsoft).

  • AWSFerramentas para PowerShell, instaladas e configuradas. Por motivos de desempenho, é altamente recomendável que você instale a versão modularizada do AWS Tools for PowerShell, chamada. AWS.Tools Cada AWS serviço é suportado por seu próprio módulo pequeno e individual. No PowerShell shell, insira os seguintes comandos para instalar os módulos necessários para esse padrão: AWS.Tools.Installer OrganizationsSSOAdmin,, IdentityStore e.

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

    Para obter mais informações, consulte Instalar AWS .Tools no Windows ou Instalar AWS .Tools no Linux ou macOS (AWSFerramentas para documentação). PowerShell Se você receber um erro ao instalar os módulos, consulte a seção Solução de problemas desse padrão.

  • AWSA interface de linha de comando (AWSCLI) ou a AWS SDK deve ser configurada anteriormente com credenciais de trabalho, fazendo o seguinte:

    • Use o AWS CLI aws configure Para obter mais informações, consulte Configuração rápida (AWSCLIdocumentação).

    • Configure AWS CLI nosso AWS Cloud Development Kit (AWSCDK) para obter acesso temporário por meio de uma função de AWS Identity and Access Management (IAM). Para obter mais informações, consulte Obter credenciais de IAM função para CLI acesso (documentação do IAM Identity Center).

  • Um perfil nomeado para o AWS CLI que salvou as credenciais de um IAM diretor que:

    • Tem acesso à conta de gerenciamento do AWS Organizations ou à conta de administrador delegado do IAM Identity Center

    • As políticas AWSSSODirectoryReadOnly AWS gerenciadas AWSSSOReadOnly e as aplicadas a ele

    Para obter mais informações, consulte Usando perfis nomeados (AWSCLIdocumentação) e políticas AWS gerenciadas (IAMdocumentação).

Limitações

  • As AWS contas de destino devem ser gerenciadas como uma organização em AWS Organizations.

Versões do produto

Arquitetura

Arquitetura de destino

Script usando perfil AWS CLI nomeado para criar um relatório de SSO identidades no IAM Identity Center.
  1. O usuário executa o script em uma linha de PowerShell comando.

  2. O script assume o perfil nomeado para AWSCLI. Isso concede acesso ao IAM Identity Center.

  3. O script recupera as configurações de SSO identidade do IAM Identity Center.

  4. O script gera um CSV arquivo no mesmo diretório na estação de trabalho local em que o script é salvo.

Ferramentas

AWSserviços

  • AWSA interface de linha de comando (AWSCLI) é uma ferramenta de código aberto que ajuda você a interagir com AWS serviços por meio de comandos em seu shell de linha de comando.

  • AWSIAMO Identity Center ajuda você a gerenciar centralmente o acesso de login único (SSO) a todas as suas AWS contas e aplicativos na nuvem.

  • AWSAs ferramentas para PowerShell são um conjunto de PowerShell módulos que ajudam você a criar scripts de operações em seus AWS recursos a partir da linha de PowerShell comando.

Outras ferramentas

  • PowerShellé um programa de gerenciamento de automação e configuração da Microsoft executado em Windows, Linux e macOS.

Épicos

TarefaDescriçãoHabilidades necessárias

Preparar o script.

  1. Copie o PowerShell script na seção Informações adicionais desse padrão.

  2. Na Param seção, para seu AWS ambiente, defina os valores para as seguintes variáveis:

    • OutputFile: nome do relatório.

    • ProfileName— O perfil AWS CLI nomeado que você deseja usar para gerar o relatório.

    • Region— A AWS região na qual o IAM Identity Center está implantado. Para obter uma lista completa de regiões e seus códigos, consulte Endpoints regionais.

  3. Salve o script com o nome de arquivo SSO-Report.ps1.

Administrador de nuvem

Executar o script.

É recomendável que você execute seu script personalizado no PowerShell shell com o comando a seguir.

.\SSO-Report.ps1

Como alternativa, você pode executar o script de outro shell digitando o comando a seguir.

pwsh .\SSO-Report.ps1

O script gera um CSV arquivo no mesmo diretório do arquivo de script.

Administrador de nuvem

Analisar os dados do relatório.

O CSV arquivo de saída tem os cabeçalhos AccountNamePermissionSet, Principal e Type. Abra esse arquivo no aplicativo de planilhas de sua preferência. Você pode criar uma tabela de dados para filtrar e classificar a saída.

Administrador de nuvem

Solução de problemas

ProblemaSolução

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

AWSAs ferramentas PowerShell ou seus módulos não estão instalados. No PowerShell shell, insira os seguintes comandos para instalar o AWS Tools for PowerShell e os módulos necessários para esse padrão: AWS.Tools.Installer OrganizationsSSOAdmin,, IdentityStore e.

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

Erro do No credentials specified or obtained from persisted/shell defaults

Em Preparar o script na seção Épicos, confirme se você inseriu corretamente as variáveis ProfileName e Region. Certifique-se de que as configurações e credenciais no perfil nomeado tenham permissões suficientes para administrar o IAM Identity Center.

Authenticode Issuer …erro ao instalar os AWS módulos.Tools

Adicione o parâmetro -SkipPublisherCheck no fim do comando Install-AWSToolsModule.

Erro do Get-ORGAccountList : Assembly AWSSDK.SSO could not be found or loaded.

Esse erro pode ocorrer quando AWS CLI perfis nomeados são especificados, AWS CLI configurados para autenticar usuários com o IAM Identity Center e AWS CLI para recuperar automaticamente tokens de autenticação atualizados. Para corrigir esse erro, faça o seguinte:

  1. Digite o comando a seguir para confirmar se os módulos SSO e SSOOIDC estão instalados.

    Install-AWSToolsModule SSO, SSOOIDC
  2. Insira as linhas a seguir no script abaixo do bloco param().

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

Recursos relacionados

Mais informações

No script a seguir, determine se você precisa atualizar os valores dos seguintes parâmetros:

  • Se você estiver usando um perfil nomeado AWS CLI para acessar a conta na qual o IAM Identity Center está configurado, atualize o $ProfileName valor.

  • Se o IAM Identity Center for implantado em uma AWS região diferente da região padrão para sua AWS SDK configuração AWS CLI ou configuração, atualize o $Region valor para usar a região em que o IAM Identity Center está implantado.

  • Se nenhuma dessas situações se aplicar, nenhuma atualização de script será necessária.

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