

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Aggiorna le credenziali dell'interfaccia a riga di comando AWS da AWS IAM Identity Center utilizzando PowerShell
<a name="update-aws-cli-credentials-from-aws-iam-identity-center-by-using-powershell"></a>

*Chad Miles e Andy Bowen, Amazon Web Services*

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

Se desideri utilizzare le credenziali AWS IAM Identity Center (successore di AWS Single Sign-On) con AWS Command Line Interface (AWS CLI), AWS SDKs o AWS Cloud Development Kit (AWS CDK), in genere devi copiare e incollare le credenziali dalla console IAM Identity Center nell'interfaccia a riga di comando. Questo processo può richiedere molto tempo e deve essere ripetuto per ogni account che richiede l'accesso.

Una soluzione comune consiste nell'utilizzare il comando AWS CLI`aws sso configure`. Questo comando aggiunge un profilo abilitato per IAM Identity Center alla tua CLI AWS o all'SDK AWS. Tuttavia, lo svantaggio di questa soluzione è che devi eseguire il comando `aws sso login` per ogni profilo o account AWS CLI configurato in questo modo.

Come soluzione alternativa, questo modello descrive come utilizzare i [profili denominati](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles) dell'interfaccia a riga di comando AWS e gli strumenti AWS per PowerShell archiviare e aggiornare contemporaneamente le credenziali per più account da una singola istanza di IAM Identity Center. Lo script archivia inoltre i dati della sessione IAM Identity Center in memoria per aggiornare le credenziali senza accedere nuovamente a IAM Identity Center.

## Prerequisiti e limitazioni
<a name="update-aws-cli-credentials-from-aws-iam-identity-center-by-using-powershell-prereqs"></a>

**Prerequisiti**
+ PowerShell, installato e configurato. Per ulteriori informazioni, vedere [Installazione PowerShell](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell?view=powershell-7.3) (documentazione Microsoft).
+ Strumenti AWS per PowerShell, installati e configurati. Per motivi di prestazioni, consigliamo vivamente di installare la versione modulare di AWS Tools for PowerShell, chiamata. `AWS.Tools` Ogni servizio AWS è supportato da un piccolo modulo individuale. Nel PowerShell prompt, inserisci i seguenti comandi per installare i moduli necessari per questo modello: `AWS.Tools.Installer``SSO`, e`SSOIDC`.

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

  Per ulteriori informazioni, consulta [Installare AWS.Tools su Windows](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up-windows.html#ps-installing-awstools) o [Installare AWS.Tools su Linux](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up-linux-mac.html#install-aws.tools-on-linux-macos) o macOS.
+ L'AWS CLI o l'SDK AWS devono essere precedentemente configurati con credenziali di lavoro eseguendo una delle seguenti operazioni:
  + Usa il comando AWS CLI`aws configure`. Per ulteriori informazioni, consulta [Quick configuration](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config) (documentazione AWS CLI).
  + Configura AWS CLI o AWS CDK per ottenere l'accesso temporaneo tramite un ruolo IAM. Per ulteriori informazioni, consulta [Ottenere le credenziali del ruolo IAM per l'accesso alla CLI](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtogetcredentials.html) (documentazione IAM Identity Center).

**Limitazioni**
+ Questo script non può essere utilizzato in una pipeline o in una soluzione completamente automatizzata. Quando si distribuisce questo script, è necessario autorizzare manualmente l'accesso da IAM Identity Center. Lo script continua quindi automaticamente.

**Versioni del prodotto**
+ Per tutti i sistemi operativi, si consiglia di utilizzare la [PowerShell versione 7.0](https://github.com/powershell/powershell) o successiva.

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

Puoi utilizzare lo script in questo modello per aggiornare contemporaneamente più credenziali IAM Identity Center e creare un file di credenziali da utilizzare con AWS CLI, AWS o AWS CDK. SDKs

![\[Utilizzo di uno PowerShell script per aggiornare le credenziali in AWS CLI, AWS CDK o AWS. SKDs\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/6d54a6bb-01ac-4736-9b78-40921fcc9056/images/01e0fcb6-3b48-422c-8868-07a7de83b3e3.png)


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

**Servizi AWS**
+ [AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)) è uno strumento open source che ti aiuta a interagire con i servizi AWS tramite comandi nella tua shell a riga di comando.
+ [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html) ti aiuta a gestire centralmente l'accesso Single Sign-On (SSO) a tutti i tuoi account AWS e le tue applicazioni cloud.
+ [AWS Tools for PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-welcome.html) è un set di PowerShell moduli che ti aiutano a creare script di operazioni sulle tue risorse AWS dalla PowerShell riga di comando.

**Altri strumenti**
+ [PowerShell](https://learn.microsoft.com/en-us/powershell/)è un programma di gestione dell'automazione e della configurazione di Microsoft che funziona su Windows, Linux e macOS.

## Best practice
<a name="update-aws-cli-credentials-from-aws-iam-identity-center-by-using-powershell-best-practices"></a>

Conserva una copia di questo script per ogni istanza di IAM Identity Center. L'utilizzo di uno script per più istanze non è supportato.

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

### Esegui lo script SSO
<a name="run-the-sso-script"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Personalizza lo script SSO. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/update-aws-cli-credentials-from-aws-iam-identity-center-by-using-powershell.html) | Amministratore del cloud | 
| Esegui lo script SSO. | Si consiglia di eseguire lo script personalizzato nella PowerShell shell con il seguente comando.<pre>./Set-AwsCliSsoCredentials.ps1</pre>In alternativa, è possibile eseguire lo script da un'altra shell immettendo il seguente comando.<pre>pwsh Set-AwsCliSsoCredentials.ps1</pre> | Amministratore cloud | 

## risoluzione dei problemi
<a name="update-aws-cli-credentials-from-aws-iam-identity-center-by-using-powershell-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Errore `No Access` | Il ruolo IAM che stai utilizzando non dispone delle autorizzazioni per accedere al ruolo o al set di autorizzazioni definito in un `RoleName` parametro. Aggiorna le autorizzazioni per il ruolo che stai utilizzando o definisci un ruolo o un set di autorizzazioni diverso nello script. | 

## Risorse correlate
<a name="update-aws-cli-credentials-from-aws-iam-identity-center-by-using-powershell-resources"></a>
+ [Dove vengono archiviate le impostazioni di configurazione?](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-where) (documentazione dell'interfaccia a riga di comando di AWS)
+ [Configurazione dell'interfaccia a riga di comando di AWS per l'utilizzo di AWS IAM Identity Center (documentazione](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html) AWS CLI)
+ [Utilizzo di profili denominati (documentazione](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles) dell'interfaccia a riga di comando di AWS)

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

**script SSO**

Nello script seguente, sostituisci i segnaposto tra parentesi angolari (<>) con le tue informazioni e rimuovi le parentesi angolari.

```
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"
```