

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

# Atualize as credenciais da AWS CLI do AWS IAM Identity Center usando PowerShell
<a name="update-aws-cli-credentials-from-aws-iam-identity-center-by-using-powershell"></a>

*Chad Miles e Andy Bowen, Amazon Web Services*

## Resumo
<a name="update-aws-cli-credentials-from-aws-iam-identity-center-by-using-powershell-summary"></a>

Se você quiser usar as credenciais do AWS IAM Identity Center (sucessor do AWS Single Sign-On) com a AWS Command Line Interface (AWS CLI), a AWS SDKs ou o AWS Cloud Development Kit (AWS CDK), você normalmente precisa copiar e colar as credenciais do console do IAM Identity Center na interface da linha de comando. Esse processo pode levar um tempo considerável e deve ser repetido para cada conta que requer acesso.

Uma solução comum é usar o comando `aws sso configure` da AWS CLI. Esse comando adiciona um perfil compatível com o IAM Identity Center para a AWS CLI ou AWS SDK. No entanto, a desvantagem dessa solução é que você deve executar o comando `aws sso login` para cada perfil ou conta ds AWS CLI que você configurou dessa forma.

Como uma solução alternativa, esse padrão descreve como usar [perfis nomeados](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles) da AWS CLI e ferramentas da AWS para PowerShell armazenar e atualizar credenciais para várias contas de uma única instância do IAM Identity Center simultaneamente. O script também armazena os dados da sessão do IAM Identity Center na memória para atualizar as credenciais sem fazer login novamente no IAM Identity Center.

## Pré-requisitos e limitações
<a name="update-aws-cli-credentials-from-aws-iam-identity-center-by-using-powershell-prereqs"></a>

**Pré-requisitos **
+ O PowerShell instalado e configurado. Para obter mais informações, consulte [Instalando PowerShell](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell?view=powershell-7.3) (documentação da Microsoft).
+ AWS Tools 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 serviço da AWS é compatível com seu próprio módulo individual pequeno. No PowerShell prompt, insira os seguintes comandos para instalar os módulos necessários para esse padrão: `AWS.Tools.Installer``SSO`,, `SSOIDC` e.

  ```
  Install-Module AWS.Tools.Installer
  Install-AWSToolsModule SSO, SSOOIDC
  ```

  Para obter mais informações, consulte [Instalar o AWS.Tools no Windows](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up-windows.html#ps-installing-awstools) ou [Instalar o AWS.Tools no Linux ou no macOS](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up-linux-mac.html#install-aws.tools-on-linux-macos).
+ A AWS CLI ou o AWS SDK devem ser previamente configurados com credenciais de trabalho, fazendo o seguinte:
  + Use o comando `aws configure` da AWS CLI. Para obter mais informações, consulte [Configuração rápida](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config) (documentação da AWS CLI).
  + Configure a AWS CLI ou o AWS CDK para obter acesso temporário por meio de um perfil do IAM. Para obter mais informações, consulte [Obter credenciais de perfil do IAM para acesso à CLI](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtogetcredentials.html) (documentação do Centro de Identidade IAM).

**Limitações**
+ Esse script não pode ser usado em um pipeline ou em uma solução totalmente automatizada. Ao implantar esse script, você deve autorizar manualmente o acesso do IAM Identity Center. Em seguida, o script continua automaticamente.

**Versões do produto**
+ Para todos os sistemas operacionais, é recomendável usar a [PowerShell versão 7.0](https://github.com/powershell/powershell) ou posterior.

## Arquitetura
<a name="update-aws-cli-credentials-from-aws-iam-identity-center-by-using-powershell-architecture"></a>

Você pode usar o script nesse padrão para atualizar simultaneamente várias credenciais do IAM Identity Center e criar um arquivo de credencial para uso com a AWS CLI, a AWS ou o AWS CDK. SDKs

![\[Usando um PowerShell script para atualizar as credenciais na AWS CLI, no AWS CDK ou na AWS. SKDs\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/6d54a6bb-01ac-4736-9b78-40921fcc9056/images/01e0fcb6-3b48-422c-8868-07a7de83b3e3.png)


## Ferramentas
<a name="update-aws-cli-credentials-from-aws-iam-identity-center-by-using-powershell-tools"></a>

**Serviços da AWS**
+ A ‭[AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)‭ é uma ferramenta de código aberto que permite que você interaja com serviços da AWS usando comandos no shell da linha de comando.
+ O [Centro de Identidade do AWS IAM](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html) ajuda você a gerenciar centralmente o acesso à autenticação única (SSO) a todas as suas contas e aplicativos na nuvem da AWS.
+ As [ferramentas da AWS para PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-welcome.html) são um conjunto de PowerShell módulos que ajudam você a criar scripts de operações em seus recursos da AWS a partir da linha de PowerShell comando.

**Outras ferramentas**
+ [PowerShell](https://learn.microsoft.com/en-us/powershell/)é um programa de gerenciamento de automação e configuração da Microsoft executado em Windows, Linux e macOS.

## Práticas recomendadas
<a name="update-aws-cli-credentials-from-aws-iam-identity-center-by-using-powershell-best-practices"></a>

Mantenha uma cópia desse script para cada instância do IAM Identity Center. Não há suporte para o uso de um script para várias instâncias.

## Épicos
<a name="update-aws-cli-credentials-from-aws-iam-identity-center-by-using-powershell-epics"></a>

### Executar o script de SSO
<a name="run-the-sso-script"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Personalize o script de SSO. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/update-aws-cli-credentials-from-aws-iam-identity-center-by-using-powershell.html) | Administrador de nuvem | 
| Executar o script de SSO. | É recomendável que você execute seu script personalizado no PowerShell shell com o comando a seguir.<pre>./Set-AwsCliSsoCredentials.ps1</pre>Como alternativa, você pode executar o script de outro shell digitando o comando a seguir.<pre>pwsh Set-AwsCliSsoCredentials.ps1</pre> | Administrador de nuvem | 

## Solução de problemas
<a name="update-aws-cli-credentials-from-aws-iam-identity-center-by-using-powershell-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Erro `No Access` | O perfil do IAM que você está usando não tem permissões para acessar a função ou o conjunto de permissões que você definiu em um parâmetro `RoleName`. Atualize as permissões da função que você está usando ou defina uma função ou conjunto de permissões diferente no script. | 

## Recursos relacionados
<a name="update-aws-cli-credentials-from-aws-iam-identity-center-by-using-powershell-resources"></a>
+ [Onde as definições de configuração ficam armazenadas?](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-where) (Documentação da AWS CLI)
+ [Configurar a AWS CLI para usar o Centro de Identidade do AWS IAM](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html) (documentação da AWS CLI)
+ [Usar perfis nomeados](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles) (documentação da AWS CLI)

## Mais informações
<a name="update-aws-cli-credentials-from-aws-iam-identity-center-by-using-powershell-additional"></a>

**Script de SSO**

No script a seguir, substitua os espaços reservados entre colchetes angulares (<>) por suas próprias informações e remova os colchetes angulares.

```
Set-AwsCliSsoCredentials.ps1
Param(
    $DefaultRoleName = '<AWSAdministratorAccess>',
    $Region          = '<us-west-2>',
    $StartUrl        = "<https://d-12345abcde.awsapps.com/start/>",
    $EnvironmentName = "<CompanyName>"
) 
Try {$SsoAwsAccounts = (Get-Variable -name "$($EnvironmentName)SsoAwsAccounts" -Scope Global -ErrorAction 'SilentlyContinue').Value.Clone()} 
Catch {$SsoAwsAccounts = $False}
if (-not $SsoAwsAccounts) { $SsoAwsAccounts = @(    
# Add your account information in the list of hash tables below, expand as necessary, and do not forget the commas 
    @{Profile = "<Account1>"      ; AccountId = "<012345678901 >"; RoleName = $DefaultRoleName },
    @{Profile = "<Account2>"      ; AccountId = "<123456789012>"; RoleName = "<AWSReadOnlyAccess>" }
)}
$ErrorActionPreference = "Stop"
if (-not (Test-Path ~\.aws))      { New-Item ~\.aws -type Directory }
if (-not (Test-Path ~\.aws\credentials)) { New-Item ~\.aws\credentials -type File }
$CredentialFile = Resolve-Path ~\.aws\credentials 
$PsuedoCreds    = @{AccessKey = 'AKAEXAMPLE123ACCESS';SecretKey='PsuedoS3cret4cceSSKey123PsuedoS3cretKey'} # Pseudo Creds, do not edit.
Try {$SSOTokenExpire = (Get-Variable -Scope Global -Name "$($EnvironmentName)SSOTokenExpire" -ErrorAction 'SilentlyContinue').Value} Catch {$SSOTokenExpire = $False}
Try {$SSOToken       = (Get-Variable -Scope Global -Name "$($EnvironmentName)SSOToken" -ErrorAction 'SilentlyContinue').Value }      Catch {$SSOToken       = $False}
if ( $SSOTokenExpire -lt (Get-Date) ) {
    $SSOToken = $Null
    $Client   = Register-SSOOIDCClient -ClientName cli-sso-client -ClientType public -Region $Region @PsuedoCreds
    $Device   = $Client | Start-SSOOIDCDeviceAuthorization -StartUrl $StartUrl -Region $Region @PsuedoCreds
    Write-Host "A Browser window should open. Please login there and click ALLOW." -NoNewline
    Start-Process $Device.VerificationUriComplete
    While (-Not $SSOToken){
        Try {$SSOToken = $Client | New-SSOOIDCToken -DeviceCode $Device.DeviceCode -GrantType "urn:ietf:params:oauth:grant-type:device_code" -Region $Region @PsuedoCreds}
        Catch {If ($_.Exception.Message -notlike "*AuthorizationPendingException*"){Write-Error $_.Exception} ; Start-Sleep 1}
    }
    $SSOTokenExpire = (Get-Date).AddSeconds($SSOToken.ExpiresIn)
    Set-Variable -Name "$($EnvironmentName)SSOToken" -Value $SSOToken -Scope Global
    Set-Variable -Name "$($EnvironmentName)SSOTokenExpire" -Value $SSOTokenExpire -Scope Global
}
$CredsTime     = $SSOTokenExpire - (Get-Date)
$CredsTimeText = ('{0:D2}:{1:D2}:{2:D2} left on SSO Token' -f $CredsTime.Hours, $CredsTime.Minutes, $CredsTime.Seconds).TrimStart("0 :")
for ($i = 0; $i -lt $SsoAwsAccounts.Count; $i++) {
    if (([DateTimeOffset]::FromUnixTimeSeconds($SsoAwsAccounts[$i].CredsExpiration / 1000)).DateTime -lt (Get-Date).ToUniversalTime()) {
        Write-host "`r                                                                     `rRegistering Profile $($SsoAwsAccounts[$i].Profile)" -NoNewline
        $TempCreds = $SSOToken | Get-SSORoleCredential -AccountId $SsoAwsAccounts[$i].AccountId -RoleName $SsoAwsAccounts[$i].RoleName -Region $Region @PsuedoCreds
        [PSCustomObject]@{AccessKey = $TempCreds.AccessKeyId; SecretKey = $TempCreds.SecretAccessKey; SessionToken = $TempCreds.SessionToken
        } | Set-AWSCredential -StoreAs $SsoAwsAccounts[$i].Profile -ProfileLocation $CredentialFile 
        $SsoAwsAccounts[$i].CredsExpiration = $TempCreds.Expiration
    }
} 
Set-Variable -name "$($EnvironmentName)SsoAwsAccounts" -Value $SsoAwsAccounts.Clone() -Scope Global
Write-Host "`r$($SsoAwsAccounts.Profile) Profiles registered, $CredsTimeText"
```