Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Mettez à jour les informations d'identification de l'AWS CLI depuis AWS IAM Identity Center en utilisant PowerShell
Créée par Chad Miles (AWS) et Andy Bowen (AWS)
Récapitulatif
Si vous souhaitez utiliser les informations d'identification AWS IAM Identity Center (successeur d'AWS Single Sign-On) avec AWS Command Line Interface (AWS CLI) SDKs, AWS ou AWS Cloud Development Kit (AWS CDK), vous devez généralement copier-coller les informations d'identification de la console IAM Identity Center dans l'interface de ligne de commande. Ce processus peut prendre un temps considérable et doit être répété pour chaque compte nécessitant un accès.
L'une des solutions les plus courantes consiste à utiliser la aws sso configure
commande AWS CLI. Cette commande ajoute un profil activé par IAM Identity Center à votre CLI AWS ou à votre kit SDK AWS. Toutefois, l'inconvénient de cette solution est que vous devez exécuter la commande aws sso login
pour chaque profil ou compte de l'interface de ligne de commande AWS que vous avez configuré de cette manière.
Comme solution alternative, ce modèle décrit comment utiliser les profils nommés de l'interface de ligne de commande AWS et les outils AWS PowerShell pour stocker et actualiser simultanément les informations d'identification de plusieurs comptes à partir d'une seule instance IAM Identity Center. Le script stocke également les données de session IAM Identity Center en mémoire pour actualiser les informations d'identification sans vous reconnecter à IAM Identity Center.
Conditions préalables et limitations
Prérequis
PowerShell, installé et configuré. Pour plus d'informations, consultez la section Installation PowerShell
(documentation Microsoft). Outils AWS pour PowerShell, installés et configurés. Pour des raisons de performances, nous vous recommandons vivement d'installer la version modulaire d'AWS Tools for PowerShell, appelée
AWS.Tools
. Chaque service AWS est pris en charge par son propre petit module. À l' PowerShell invite, entrez les commandes suivantes pour installer les modules nécessaires à ce modèle :AWS.Tools.Installer
SSO
, etSSOIDC
.Install-Module AWS.Tools.Installer Install-AWSToolsModule SSO, SSOOIDC
Pour plus d'informations, voir Installer AWS.tools sous Windows ou Installer AWS.tools sous Linux ou macOS.
L'AWS CLI ou le SDK AWS doivent être préalablement configurés avec des informations d'identification fonctionnelles en effectuant l'une des opérations suivantes :
Utilisez la
aws configure
commande AWS CLI. Pour plus d'informations, consultez la section Configuration rapide (documentation de l'AWS CLI).Configurez l'AWS CLI ou le AWS CDK pour obtenir un accès temporaire via un rôle IAM. Pour plus d'informations, voir Obtenir les informations d'identification du rôle IAM pour l'accès à la CLI (documentation IAM Identity Center).
Limites
Ce script ne peut pas être utilisé dans un pipeline ou dans une solution entièrement automatisée. Lorsque vous déployez ce script, vous devez autoriser manuellement l'accès depuis IAM Identity Center. Le script continue ensuite automatiquement.
Versions du produit
Pour tous les systèmes d'exploitation, il est recommandé d'utiliser PowerShell la version 7.0
ou ultérieure.
Architecture
Vous pouvez utiliser le script de ce modèle pour actualiser simultanément plusieurs informations d'identification IAM Identity Center, et vous pouvez créer un fichier d'informations d'identification à utiliser avec l'AWS CLI SDKs, AWS ou AWS CDK.

Outils
Services AWS
L'interface de ligne de commande AWS (AWS CLI) est un outil open source qui vous permet d'interagir avec les services AWS par le biais de commandes dans votre shell de ligne de commande.
AWS IAM Identity Center vous aide à gérer de manière centralisée l'accès par authentification unique (SSO) à tous vos comptes AWS et applications cloud.
Les outils AWS pour PowerShell sont un ensemble de PowerShell modules qui vous aident à créer des scripts pour des opérations sur vos ressources AWS à partir de la ligne de PowerShell commande.
Autres outils
PowerShell
est un programme d'automatisation et de gestion de configuration Microsoft qui s'exécute sous Windows, Linux et macOS.
Bonnes pratiques
Conservez une copie de ce script pour chaque instance d'IAM Identity Center. L'utilisation d'un script pour plusieurs instances n'est pas prise en charge.
Épopées
Tâche | Description | Compétences requises |
---|---|---|
Personnalisez le script SSO. |
| Administrateur du cloud |
Exécutez le script SSO. | Il est recommandé d'exécuter votre script personnalisé dans le PowerShell shell à l'aide de la commande suivante.
Vous pouvez également exécuter le script depuis un autre shell en saisissant la commande suivante.
| Administrateur du cloud |
Résolution des problèmes
Problème | Solution |
---|---|
| Le rôle IAM que vous utilisez n'est pas autorisé à accéder au rôle ou à l'ensemble d'autorisations que vous avez défini dans un |
Ressources connexes
Où sont stockés les paramètres de configuration ? (documentation de la CLI AWS)
Configuration de l'interface de ligne de commande AWS pour utiliser AWS IAM Identity Center (documentation de l'interface de ligne de commande AWS)
Utilisation de profils nommés (documentation de l'AWS CLI)
Informations supplémentaires
Script SSO
Dans le script suivant, remplacez les espaces réservés entre crochets (<>) par vos propres informations et supprimez les crochets.
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"