Seleziona le tue preferenze relative ai cookie

Utilizziamo cookie essenziali e strumenti simili necessari per fornire il nostro sito e i nostri servizi. Utilizziamo i cookie prestazionali per raccogliere statistiche anonime in modo da poter capire come i clienti utilizzano il nostro sito e apportare miglioramenti. I cookie essenziali non possono essere disattivati, ma puoi fare clic su \"Personalizza\" o \"Rifiuta\" per rifiutare i cookie prestazionali.

Se sei d'accordo, AWS e le terze parti approvate utilizzeranno i cookie anche per fornire utili funzionalità del sito, ricordare le tue preferenze e visualizzare contenuti pertinenti, inclusa la pubblicità pertinente. Per continuare senza accettare questi cookie, fai clic su \"Continua\" o \"Rifiuta\". Per effettuare scelte più dettagliate o saperne di più, fai clic su \"Personalizza\".

Aggiorna le credenziali dell'interfaccia a riga di comando AWS da AWS IAM Identity Center utilizzando PowerShell - Prontuario AWS

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

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

Creato da Chad Miles (AWS) e Andy Bowen (AWS)

Riepilogo

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 CLIaws 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 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

Prerequisiti

  • PowerShell, installato e configurato. Per ulteriori informazioni, vedere Installazione PowerShell (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.InstallerSSO, eSSOIDC.

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

    Per ulteriori informazioni, consulta Installare AWS.Tools su Windows o Installare AWS.Tools su Linux o macOS.

  • L'AWS CLI o l'SDK AWS devono essere precedentemente configurati con credenziali di lavoro eseguendo una delle seguenti operazioni:

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

Architettura

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

Strumenti

Servizi AWS

  • AWS Command Line Interface (AWS CLI) è 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 ti aiuta a gestire centralmente l'accesso Single Sign-On (SSO) a tutti i tuoi account AWS e applicazioni cloud.

  • AWS Tools for PowerShell è 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è un programma di gestione dell'automazione e della configurazione di Microsoft che funziona su Windows, Linux e macOS.

Best practice

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

Epiche

AttivitàDescrizioneCompetenze richieste

Personalizza lo script SSO.

  1. Copia lo script SSO nella sezione Informazioni aggiuntive.

  2. Nella Param sezione, per il tuo ambiente AWS, definisci i valori per le seguenti variabili:

    • DefaultRoleName— Il ruolo o il set di autorizzazioni IAM da utilizzare di default.

    • Region— La regione AWS in cui è distribuito IAM Identity Center. Per un elenco completo delle regioni e dei relativi codici, consulta Endpoint regionali.

    • StartUrl— L'URL utilizzato per accedere alla pagina di accesso di IAM Identity Center. Utilizza lo stesso formato del valore di esempio nello script.

    • EnvironmentName— Un nome breve per fare riferimento a questa copia dello script, da utilizzare quando si eseguono più copie di script nella stessa sessione.

  3. Alla riga 10, che recita# Add your Account Information, modificate i seguenti valori nelle tabelle hash in modo che rispecchino il vostro ambiente:

    • Profile— Il nome del profilo AWS CLI in cui archiviare le credenziali temporanee.

    • AccountId— L'ID dell'account AWS per il quale stai recuperando le credenziali.

    • RoleName— Il nome del ruolo o del set di autorizzazioni di IAM Identity Center che desideri utilizzare. Puoi lasciare questo valore come $DefaultRoleName se volessi utilizzare lo stesso ruolo definito nella Param sezione.

    Ogni riga nella tabella hash deve terminare con una virgola tranne l'ultima.

Amministratore cloud

Esegui lo script SSO.

Si consiglia di eseguire lo script personalizzato nella PowerShell shell con il seguente comando.

./Set-AwsCliSsoCredentials.ps1

In alternativa, è possibile eseguire lo script da un'altra shell immettendo il seguente comando.

pwsh Set-AwsCliSsoCredentials.ps1
Amministratore cloud

Esegui lo script SSO

AttivitàDescrizioneCompetenze richieste

Personalizza lo script SSO.

  1. Copia lo script SSO nella sezione Informazioni aggiuntive.

  2. Nella Param sezione, per il tuo ambiente AWS, definisci i valori per le seguenti variabili:

    • DefaultRoleName— Il ruolo o il set di autorizzazioni IAM da utilizzare di default.

    • Region— La regione AWS in cui è distribuito IAM Identity Center. Per un elenco completo delle regioni e dei relativi codici, consulta Endpoint regionali.

    • StartUrl— L'URL utilizzato per accedere alla pagina di accesso di IAM Identity Center. Utilizza lo stesso formato del valore di esempio nello script.

    • EnvironmentName— Un nome breve per fare riferimento a questa copia dello script, da utilizzare quando si eseguono più copie di script nella stessa sessione.

  3. Alla riga 10, che recita# Add your Account Information, modificate i seguenti valori nelle tabelle hash in modo che rispecchino il vostro ambiente:

    • Profile— Il nome del profilo AWS CLI in cui archiviare le credenziali temporanee.

    • AccountId— L'ID dell'account AWS per il quale stai recuperando le credenziali.

    • RoleName— Il nome del ruolo o del set di autorizzazioni di IAM Identity Center che desideri utilizzare. Puoi lasciare questo valore come $DefaultRoleName se volessi utilizzare lo stesso ruolo definito nella Param sezione.

    Ogni riga nella tabella hash deve terminare con una virgola tranne l'ultima.

Amministratore cloud

Esegui lo script SSO.

Si consiglia di eseguire lo script personalizzato nella PowerShell shell con il seguente comando.

./Set-AwsCliSsoCredentials.ps1

In alternativa, è possibile eseguire lo script da un'altra shell immettendo il seguente comando.

pwsh Set-AwsCliSsoCredentials.ps1
Amministratore cloud

Risoluzione dei problemi

ProblemaSoluzione

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

Informazioni aggiuntive

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"
PrivacyCondizioni del sitoPreferenze cookie
© 2025, Amazon Web Services, Inc. o società affiliate. Tutti i diritti riservati.