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.Installer
SSO
, 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:
Usa il comando AWS CLI
aws configure
. Per ulteriori informazioni, consulta Quick configuration (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 (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
o successiva.
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

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à | Descrizione | Competenze richieste |
---|---|---|
Personalizza lo script SSO. |
| Amministratore cloud |
Esegui lo script SSO. | Si consiglia di eseguire lo script personalizzato nella PowerShell shell con il seguente comando.
In alternativa, è possibile eseguire lo script da un'altra shell immettendo il seguente comando.
| Amministratore cloud |
Risoluzione dei problemi
Problema | Soluzione |
---|---|
Errore | Il ruolo IAM che stai utilizzando non dispone delle autorizzazioni per accedere al ruolo o al set di autorizzazioni definito in un |
Risorse correlate
Dove vengono archiviate le impostazioni di configurazione? (documentazione dell'interfaccia a riga di comando AWS)
Utilizzo di profili denominati (documentazione AWS CLI)
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"