

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Actualice las credenciales de la CLI de AWS desde el centro de identidad de IAM de AWS mediante PowerShell
<a name="update-aws-cli-credentials-from-aws-iam-identity-center-by-using-powershell"></a>

*Chad Miles y Andy Bowen, Amazon Web Services*

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

Si desea utilizar las credenciales de AWS IAM Identity Center (sucesoras de AWS Single Sign-On) con la interfaz de línea de comandos de AWS (AWS CLI), AWS o el kit de desarrollo en la nube de SDKs AWS (AWS CDK), normalmente tiene que copiar y pegar las credenciales de la consola del IAM Identity Center en la interfaz de línea de comandos. Este proceso puede llevar un tiempo considerable, y debe repetirse en cada cuenta a la que se desea acceder.

Una solución habitual consiste en usar el comando `aws sso configure` de la CLI de AWS. Este comando añade un perfil habilitado para el IAM Identity Center a su CLI o SDK de AWS. Sin embargo, la desventaja de esta solución es que debe ejecutar el comando `aws sso login` para cada perfil o cuenta de CLI de AWS que haya configurado de esta manera.

Como solución alternativa, este patrón describe cómo utilizar los [perfiles con nombre](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles) de la CLI de AWS y las herramientas de AWS PowerShell para almacenar y actualizar las credenciales de varias cuentas desde una única instancia del IAM Identity Center de forma simultánea. El script también almacena los datos de sesión del IAM Identity Center en memoria para poder actualizar las credenciales sin tener que volver a iniciar sesión en el IAM Identity Center.

## Requisitos previos y limitaciones
<a name="update-aws-cli-credentials-from-aws-iam-identity-center-by-using-powershell-prereqs"></a>

**Requisitos previos **
+ PowerShell instalado y configurado Para obtener más información, consulte [Instalación PowerShell](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell?view=powershell-7.3) (documentación de Microsoft).
+ Herramientas de AWS para PowerShell, instaladas y configuradas. Por motivos de rendimiento, le recomendamos encarecidamente que instale la versión modularizada de las herramientas de AWS para PowerShell, llamada. `AWS.Tools` Cada servicio de AWS es compatible con su pequeño módulo propio. En el PowerShell indicador, introduzca los siguientes comandos para instalar los módulos necesarios para este patrón: `AWS.Tools.Installer``SSO`, y. `SSOIDC`

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

  Para obtener más información, consulte [Instalar AWS.Tools en Windows](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up-windows.html#ps-installing-awstools) o [Instalar AWS.Tools en Linux o macOS](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-getting-set-up-linux-mac.html#install-aws.tools-on-linux-macos).
+ La CLI de AWS o el SDK de AWS deben configurarse previamente con credenciales de trabajo mediante una de las siguientes acciones:
  + Utilice el comando `aws configure` de la CLI de AWS. Para más información, consulte [Configuración rápida](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config) (documentación de AWS CLI).
  + Configure la CLI de AWS o el CDK de AWS para obtener acceso temporal a través de un rol de IAM. Para obtener más información, consulte [Obtener credenciales de rol de IAM para acceder a la CLI](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtogetcredentials.html) (documentación del IAM Identity Center).

**Limitaciones**
+ Este script no se puede usar en un proceso ni en una solución totalmente automatizada. Al implementar este script, deberá autorizar manualmente el acceso desde el IAM Identity Center. El script continuará automáticamente.

**Versiones de producto**
+ Para todos los sistemas operativos, se recomienda utilizar la [PowerShell versión 7.0](https://github.com/powershell/powershell) o posterior.

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

Puede usar el script de este patrón para actualizar simultáneamente varias credenciales del centro de identidad de IAM y puede crear un archivo de credenciales para usarlo con AWS CLI SDKs, AWS o AWS CDK.

![Uso de un PowerShell script para actualizar las credenciales en AWS CLI, AWS CDK o AWS SKDs.](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/6d54a6bb-01ac-4736-9b78-40921fcc9056/images/01e0fcb6-3b48-422c-8868-07a7de83b3e3.png)


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

**Servicios de AWS**
+ La [interfaz de la línea de comandos de AWS (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) es una herramienta de código abierto que le permite interactuar con los servicios de AWS mediante comandos en su intérprete de comandos de línea de comandos.
+ [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html) le ayuda a gestionar de forma centralizada el acceso de inicio de sesión único (SSO) a todas sus cuentas y aplicaciones en la nube de AWS.
+ [Las herramientas de AWS PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/pstools-welcome.html) son un conjunto de PowerShell módulos que le ayudan a programar operaciones en sus recursos de AWS desde la línea de PowerShell comandos.

**Otras herramientas**
+ [PowerShell](https://learn.microsoft.com/en-us/powershell/)es un programa de administración de automatización y configuración de Microsoft que se ejecuta en Windows, Linux y macOS.

## Prácticas recomendadas
<a name="update-aws-cli-credentials-from-aws-iam-identity-center-by-using-powershell-best-practices"></a>

Conserve una copia de este script para cada instancia de IAM Identity Center. No es posible usar un script en múltiples instancias.

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

### Ejecutar el script SSO
<a name="run-the-sso-script"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Personalice el script de SSO. | 1. Copie el script de SSO en la sección de [Información adicional](#update-aws-cli-credentials-from-aws-iam-identity-center-by-using-powershell-additional).<br />2. En la sección `Param`, en su entorno de AWS, defina los valores de las siguientes variables:`DefaultRoleName` – El rol de IAM o conjunto de permisos que se va a usar de forma predeterminada.`Region`: la Región de AWS en la que se implementa IAM Identity Center. Para obtener una lista completa de las regiones y sus códigos, consulte [Puntos de conexión regionales](https://docs.aws.amazon.com/general/latest/gr/rande.html#regional-endpoints).`StartUrl` – La URL utilizada para acceder a la página de inicio de sesión de IAM Identity Center. Use el mismo formato que el valor de ejemplo del script.`EnvironmentName` – Un nombre abreviado para hacer referencia a esta copia del script. Se usará cuando se ejecuten varias copias del script en la misma sesión.<br />3. En la línea 10, en `# Add your Account Information`, edite los siguientes valores de las tablas hash para que reflejen su entorno:`Profile` – El nombre del perfil de CLI de AWS en el que se van a almacenar las credenciales temporales.`AccountId` – La ID de la cuenta de AWS de la que está recuperando las credenciales.`RoleName` – El nombre del rol o conjunto de permisos de IAM Identity Center que desea usar. Puede dejarlo como `$DefaultRoleName` si desea usar el mismo rol que definió en la sección `Param`.<br />Cada línea de la tabla de hash debe terminar con una coma, excepto la última. | Administrador de la nube | 
| Ejecutar el script SSO. | Se recomienda ejecutar el script personalizado en el PowerShell shell con el siguiente comando.<pre>./Set-AwsCliSsoCredentials.ps1</pre><br />Si lo desea, también puede ejecutar el script desde otro intérprete de comandos introduciendo el siguiente comando.<pre>pwsh Set-AwsCliSsoCredentials.ps1</pre> | Administrador de la nube | 

## Resolución de problemas
<a name="update-aws-cli-credentials-from-aws-iam-identity-center-by-using-powershell-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| Error `No Access` | El rol de IAM que está usando no tiene permisos para acceder a la función o al conjunto de permisos que ha definido en el parámetro `RoleName`. Actualice los permisos del rol que está usando o defina un rol o conjunto de permisos diferente en el script. | 

## Recursos relacionados
<a name="update-aws-cli-credentials-from-aws-iam-identity-center-by-using-powershell-resources"></a>
+ [¿Dónde se almacenan las opciones de configuración?](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-where) (documentación de la CLI de AWS)
+ [Configurar la CLI de AWS para usar AWS IAM Identity Center](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html) (documentación de la CLI de AWS)
+ [Uso de perfiles con nombre](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles) (documentación de la CLI de AWS)

## Información adicional
<a name="update-aws-cli-credentials-from-aws-iam-identity-center-by-using-powershell-additional"></a>

**Script de SSO**

En el siguiente script, sustituya los marcadores de posición de los corchetes angulares (<>) por su propia información y elimine los corchetes angulares.

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