

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
Mettez à jour les informations d'identification depuis IAM Identity Center à l'aide de PowerShell

*Tchad Miles et Andy Bowen, Amazon Web Services*

## Résumé


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](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles) 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


**Conditions préalables**
+ PowerShell, installé et configuré. Pour plus d'informations, consultez la section [Installation PowerShell](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell?view=powershell-7.3) (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`, et`SSOIDC`.

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

  Pour plus d'informations, voir [Installer AWS.tools sous Windows](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up-windows.html#ps-installing-awstools) ou [Installer AWS.tools sous Linux](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up-linux-mac.html#install-aws.tools-on-linux-macos) 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](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config) (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](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtogetcredentials.html) (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](https://github.com/powershell/powershell) 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.

![\[Utilisation d'un PowerShell script pour mettre à jour les informations d'identification dans l'AWS CLI, AWS CDK ou AWS SKDs.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/6d54a6bb-01ac-4736-9b78-40921fcc9056/images/01e0fcb6-3b48-422c-8868-07a7de83b3e3.png)


## Outils


**Services AWS**
+ [L'interface de ligne de commande AWS (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) 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](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html) 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](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-welcome.html) 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](https://learn.microsoft.com/en-us/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


### Exécutez le script SSO



| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Personnalisez le script SSO. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/update-aws-cli-credentials-from-aws-iam-identity-center-by-using-powershell.html) | 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.<pre>./Set-AwsCliSsoCredentials.ps1</pre>Vous pouvez également exécuter le script depuis un autre shell en saisissant la commande suivante.<pre>pwsh Set-AwsCliSsoCredentials.ps1</pre> | Administrateur du cloud | 

## Résolution des problèmes



| Problème | Solution | 
| --- | --- | 
| `No Access`Erreur  | 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 `RoleName` paramètre. Mettez à jour les autorisations pour le rôle que vous utilisez ou définissez un rôle ou un ensemble d'autorisations différent dans le script. | 

## Ressources connexes

+ [Où sont stockés les paramètres de configuration ?](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-where) (documentation de la CLI AWS)
+ [Configuration de l'interface de ligne de commande AWS pour utiliser AWS IAM Identity Center](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html) (documentation de l'interface de ligne de commande AWS)
+ [Utilisation de profils nommés](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles) (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"
```