Uso de credenciales de AWS - AWS Tools for PowerShell

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.

Uso de credenciales de AWS

Cada comando de las AWS Tools for PowerShell debe incluir un conjunto de credenciales de AWS, que se utilizan para firmar criptográficamente la solicitud del servicio web correspondiente. Puede especificar las credenciales por comando, por sesión o para todas las sesiones.

aviso

Para evitar riesgos de seguridad, no utilice a los usuarios de IAM para la autenticación cuando desarrolle software especialmente diseñado o trabaje con datos reales. En cambio, utilice la federación con un proveedor de identidades como AWS IAM Identity Center.

nota

La información de este tema se refiere a las circunstancias en las que necesita obtener y administrar credenciales a corto o largo plazo de forma manual. Para obtener información adicional sobre las credenciales a corto y largo plazo, consulte Otras formas de autenticarse en la Guía de referencia de herramientas y AWS SDK.

Para conocer las prácticas recomendadas de seguridad, use AWS IAM Identity Center, como se describe en Configurar la autenticación de herramientas.

Es recomendable que procure no exponer sus credenciales: no incluya credenciales literales en un comando. En lugar de ello, cree un perfil para cada conjunto de credenciales que desee utilizar y almacene el perfil en alguno de los dos almacenes de credenciales. Especifique el nombre de perfil correcto en el comando y las AWS Tools for PowerShell recuperarán las credenciales asociadas. Para obtener una descripción general de cómo administrar de forma segura las credenciales de AWS, consulte Prácticas recomendadas para administrar las claves de acceso de AWS en la Referencia general de Amazon Web Services.

nota

Necesita una cuenta de AWS para obtener credenciales y usar las AWS Tools for PowerShell. Para crear una cuenta de AWS, consulte Introducción: ¿es la primera vez que usa AWS? en la Guía de referencia de AWS Account Management.

Ubicaciones de almacén de credenciales

Las AWS Tools for PowerShell pueden utilizar uno de los dos almacenes de credenciales:

  • El almacén de AWS SDK, que cifra las credenciales y las almacena en su carpeta principal. En Windows, este almacén se encuentra en: C:\Users\username\AppData\Local\AWSToolkit\RegisteredAccounts.json.

    AWS SDK for .NET y Toolkit for Visual Studio también pueden utilizar el almacén de AWS SDK.

  • El archivo de credenciales compartidas, que también se encuentra en su carpeta principal, pero que almacena las credenciales como texto sin formato.

    De forma predeterminada, el archivo de credenciales se almacena aquí:

    • En Windows: C:\Users\username\.aws\credentials

    • En Mac/Linux: ~/.aws/credentials

    Los AWS SDK y la AWS Command Line Interface también pueden utilizar el archivo de credenciales. Si ejecuta un script fuera del contexto de usuario de AWS, asegúrese de que el archivo que contiene sus credenciales se copia en una ubicación en la que todas las cuentas de usuario (sistema local y usuario) pueden tener acceso a sus credenciales.

Administración de perfiles

Los perfiles le permiten hacer referencia a diferentes conjuntos de credenciales con las AWS Tools for PowerShell. Puede usar cmdlets de AWS Tools for PowerShell para administrar sus perfiles en el almacén de AWS SDK. También puede administrar los perfiles en el almacén de AWS SDK mediante Toolkit for Visual Studio o mediante programación a través de AWS SDK for .NET. Para obtener instrucciones sobre cómo administrar los perfiles en el archivo de credenciales, consulte Prácticas recomendadas para administrar las claves de acceso de AWS.

Añadir un nuevo perfil

Para agregar un nuevo perfil al almacén de AWS SDK, ejecute el comando Set-AWSCredential. Almacena la clave de acceso y la clave secreta en el archivo de credenciales predeterminado bajo el nombre de perfil que especifique.

PS > Set-AWSCredential ` -AccessKey AKIA0123456787EXAMPLE ` -SecretKey wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY ` -StoreAs MyNewProfile
  • -AccessKey: el ID de clave de acceso.

  • -SecretKey: la clave secreta.

  • -StoreAs: el nombre de perfil, que debe ser único. Para especificar el perfil predeterminado, utilice el nombre default.

Actualizar un perfil

El almacén de AWS SDK debe mantenerse de forma manual. Si posteriormente cambia las credenciales en el servicio (por ejemplo, mediante la consola de IAM), la ejecución de un comando con las credenciales almacenadas localmente producirá el siguiente mensaje de error:

The Access Key Id you provided does not exist in our records.

Puede actualizar un perfil volviendo a ejecutar el comando Set-AWSCredential para el perfil y pasándole las nuevas claves de acceso y clave secreta.

Mostrar perfiles

Puede comprobar la lista actual de nombres con el siguiente comando. En este ejemplo, un usuario llamado Shirley tiene acceso a tres perfiles que están todos almacenados en el archivo de credenciales compartidas (~/.aws/credentials).

PS > Get-AWSCredential -ListProfileDetail ProfileName StoreTypeName ProfileLocation ----------- ------------- --------------- default SharedCredentialsFile /Users/shirley/.aws/credentials production SharedCredentialsFile /Users/shirley/.aws/credentials test SharedCredentialsFile /Users/shirley/.aws/credentials

Eliminar un perfil

Para eliminar un perfil que ya no necesite, utilice el siguiente comando.

PS > Remove-AWSCredentialProfile -ProfileName an-old-profile-I-do-not-need

El parámetro -ProfileName especifica el perfil que desea eliminar.

El comando obsoleto Clear-AWScredential todavía está disponible por motivos de compatibilidad con versiones anteriores, pero es preferible Remove-AWSCredentialProfile.

Especificación de credenciales

Hay varias formas de especificar credenciales. La forma preferida es identificar un perfil en lugar de incorporar credenciales literales en la línea de comandos. AWS Tools for PowerShell localiza el perfil utilizando un orden de búsqueda que se describe en Orden de búsqueda de credenciales.

En Windows, las credenciales de AWS almacenadas en el almacén de AWS SDK se cifran con la identidad de usuario de Windows que ha iniciado sesión. No se pueden descifrar usando otra cuenta, ni usar en un dispositivo que sea diferente del dispositivo en el que se crearon originalmente. Para realizar tareas que requieren credenciales de otro usuario, como una cuenta de usuario en la que se va a ejecutar una tarea programada, configure un perfil de credenciales, tal y como se ha descrito en la sección anterior, que pueda utilizar cuando inicie sesión en el equipo como ese usuario. Inicie sesión como el usuario que realiza tareas para completar los pasos de configuración de credenciales y crear un perfil que funcione para ese usuario. A continuación, cierre la sesión y vuelva a iniciar sesión con sus propias credenciales para configurar la tarea programada.

nota

Utilice el parámetro -ProfileName común para especificar un perfil. Este parámetro es similar al parámetro -StoredCredentials de versiones anteriores de AWS Tools for PowerShell. Aún se admite -StoredCredentials para la compatibilidad con versiones anteriores.

Todos los AWS SDK y las herramientas de administración permiten buscar las credenciales automáticamente en el equipo local si las credenciales están almacenadas en un perfil denominado default. Por ejemplo, si tiene un perfil denominado default en el equipo local, no es necesario que ejecute el cmdlet Initialize-AWSDefaultConfiguration ni el cmdlet Set-AWSCredential. Las herramientas utilizan automáticamente los datos de acceso y la clave secreta almacenados en ese perfil. Para utilizar una región de AWS que no sea su región predeterminada (los resultados de Get-DefaultAWSRegion), puede ejecutar Set-DefaultAWSRegion y especificar una región.

Si su perfil no se llama default, pero desea utilizarlo como perfil predeterminado para la sesión actual, ejecute Set-AWSCredential para definirlo como perfil predeterminado.

Aunque la ejecución de Initialize-AWSDefaultConfiguration le permite especificar un perfil predeterminado para cada sesión de PowerShell, el cmdlet carga credenciales de su perfil con nombre personalizado, pero sobrescribe el perfil default con el perfil con nombre.

Le recomendamos que no ejecute Initialize-AWSDefaultConfiguration a menos que esté ejecutando una sesión de PowerShell en una instancia de Amazon EC2 que no se ha lanzado con un perfil de instancias y desee configurar el perfil de credenciales de forma manual. Tenga en cuenta que el perfil de credenciales en este caso no contendría credenciales. El perfil de credenciales que resulta de la ejecución de Initialize-AWSDefaultConfiguration en una instancia EC2 no almacena directamente las credenciales, sino que apunta a metadatos de instancia (que proporcionan credenciales temporales que cambian automáticamente). Sin embargo, almacena la región de la instancia. Otra situación que podría requerir la ejecución de Initialize-AWSDefaultConfiguration se da si desea ejecutar una llamada en una región que no sea la región en la que se está ejecutando la instancia. Al ejecutar este comando se invalida de forma permanente la región almacenada en los metadatos de la instancia.

PS > Initialize-AWSDefaultConfiguration -ProfileName MyProfileName -Region us-west-2
nota

Las credenciales predeterminadas se incluyen en el almacén de AWS SDK con el nombre de perfil default. El comando sobrescribe cualquier perfil existente con ese nombre.

Si la instancia EC2 se lanzó con un perfil de instancia, PowerShell obtiene automáticamente la información de las credenciales y de la región de AWS a partir del perfil de instancia. No hay necesidad de ejecutar Initialize-AWSDefaultConfiguration. La ejecución del cmdlet Initialize-AWSDefaultConfiguration en una instancia EC2 lanzada con un perfil de instancia no es necesaria, porque utiliza los mismos datos de perfil de instancia que ya utiliza PowerShell de forma predeterminada.

Perfil de sesión

Utilice Set-AWSCredential para especificar un perfil predeterminado para una determinada sesión. Este perfil invalida cualquier perfil predeterminado durante la sesión. Se recomienda su uso si desea usar un perfil con nombre personalizado en la sesión en lugar del perfil default actual.

PS > Set-AWSCredential -ProfileName MyProfileName
nota

En las versiones de Tools for Windows PowerShell anteriores a la 1.1, el cmdlet Set-AWSCredential no funcionaba de forma adecuada y sobrescribía el perfil especificado por “MyProfileName”. Le recomendamos que utilice una versión más reciente de Tools for Windows PowerShell.

Perfil de comando

En comandos individuales, puede agregar el parámetro -ProfileName para especificar un perfil que se aplique solo a ese comando. Este perfil invalida todos los perfiles predeterminados o de sesión, como se muestra en el ejemplo.

PS > Get-EC2Instance -ProfileName MyProfileName
nota

Cuando especifica un perfil de sesión o predeterminado, también puede añadir un parámetro -Region para invalidar una región de sesión o predeterminada. Para obtener más información, consulte Especificar AWS regiones. En el siguiente ejemplo se especifica un perfil y una región predeterminados.

PS > Initialize-AWSDefaultConfiguration -ProfileName MyProfileName -Region us-west-2

De forma predeterminada, se presupone que el archivo de credenciales compartidas de AWS está en la carpeta principal del usuario (C:\Users\username\.aws en Windows o ~/.aws en Linux). Para especificar un archivo de credenciales en otra ubicación, incluya el parámetro -ProfileLocation y especifique la ruta del archivo de credenciales. En el siguiente ejemplo se especifica un archivo de credenciales no predeterminado para un comando específico.

PS > Get-EC2Instance -ProfileName MyProfileName -ProfileLocation C:\aws_service_credentials\credentials
nota

Si ejecuta un script de PowerShell en un momento en el que no suele iniciar sesión en AWS (por ejemplo, ejecuta un script de PowerShell como una tarea programada fuera del horario laboral normal), agregue el parámetro -ProfileLocation cuando especifique el perfil que desea utilizar y establezca el valor en la ruta del archivo que contiene sus credenciales. Para cerciorarse de que su script de AWS Tools for PowerShell se ejecuta con las credenciales de la cuenta correctas, debe añadir el parámetro -ProfileLocation siempre que el script se ejecute en un contexto o proceso que no utilice una cuenta de AWS. También puede copiar su archivo de credenciales en una ubicación que esté accesible al sistema local o en otra cuenta que usen sus scripts para realizar tareas.

Orden de búsqueda de credenciales

Cuando ejecuta un comando, AWS Tools for PowerShell busca las credenciales en el orden siguiente. Se detiene cuando encuentra credenciales utilizables.

  1. Credenciales literales que están incrustadas como parámetros en la línea de comandos.

    Es absolutamente recomendable que utilice perfiles en lugar de incluir credenciales literales en las líneas de comandos.

  2. Un nombre de perfil o una ubicación de perfil especificados.

    • Si solo especifica un nombre de perfil, el comando busca el perfil especificado en el almacén de AWS SDK y, en caso de que no exista, el perfil especificado del archivo de credenciales compartidas de AWS en la ubicación predeterminada.

    • Si especifica solo una ubicación de perfil, el comando busca el perfil default desde ese archivo de credenciales.

    • Si especifica un nombre y una ubicación, el comando busca el perfil especificado en ese archivo de credenciales.

    Si no se encuentra el perfil o la ubicación especificados, el comando genera una excepción. La búsqueda continúa con los pasos siguientes únicamente si no ha especificado un perfil o una ubicación.

  3. Credenciales especificadas por el comando -Credential.

  4. El perfil de sesión, si existe alguno.

  5. El perfil predeterminado, en el orden que se indica a continuación:

    1. El perfil default en el almacén de AWS SDK.

    2. El perfil default en el archivo de credenciales compartidas de AWS.

    3. El perfil AWS PS Default en el almacén de AWS SDK.

  6. Si el comando se ejecuta en una instancia de Amazon EC2 configurada para utilizar un rol de IAM, se accede a las credenciales temporales de la instancia EC2 desde el perfil de instancias.

    Para obtener más información acerca del uso de roles de IAM para instancias de Amazon EC2, consulte AWS SDK for .NET.

Si la búsqueda no puede encontrar las credenciales especificadas, el comando produce una excepción.

Gestión de credenciales en AWS Tools for PowerShell Core

Los cmdlets de AWS Tools for PowerShell Core aceptan claves de acceso y secretas de AWS o los nombres de perfiles de credenciales cuando se ejecutan, al igual que AWS Tools for Windows PowerShell. Cuando se ejecutan en Windows, ambos módulos tienen acceso al archivo del almacén de credenciales de AWS SDK for .NET (almacenado en el archivo AppData\Local\AWSToolkit\RegisteredAccounts.json de cada usuario).

Este archivo almacena las claves en formato cifrado y no se puede usar en otro equipo. Es el primer archivo en el que AWS Tools for PowerShell busca un perfil de credenciales y también es el archivo en el que AWS Tools for PowerShell almacena los perfiles de credenciales. Para obtener más información acerca del archivo de almacén de credenciales de AWS SDK for .NET, consulte Configuración de credenciales de AWS. En la actualidad, el módulo de Tools for Windows PowerShell no permite que se escriban credenciales en otros archivos o ubicaciones.

Ambos módulos pueden leer perfiles del archivo de credenciales compartidas de AWS usado por otros AWS SDK y por la AWS CLI. En Windows, la ubicación predeterminada de este archivo es C:\Users\<userid>\.aws\credentials. En plataformas distintas de Windows, este archivo se almacena en ~/.aws/credentials. Se puede usar el parámetro -ProfileLocation para apuntar a un nombre de archivo o ubicación de archivo distintos de los predeterminados.

El almacén de credenciales del SDK almacena las credenciales en formato cifrado usando las API criptográficas de Windows. Estas API no están disponibles en otras plataformas, por lo que el módulo AWS Tools for PowerShell Core usa exclusivamente el archivo de credenciales compartidas de AWS y permite escribir nuevos perfiles de credenciales en este archivo.

Los siguientes script de ejemplo que utilizan el cmdlet Set-AWSCredential muestran las opciones para gestionar los perfiles de credenciales en Windows con los módulos AWSPowerShell o AWSPowerShell.NetCore.

# Writes a new (or updates existing) profile with name "myProfileName" # in the encrypted SDK store file Set-AWSCredential -AccessKey akey -SecretKey skey -StoreAs myProfileName # Checks the encrypted SDK credential store for the profile and then # falls back to the shared credentials file in the default location Set-AWSCredential -ProfileName myProfileName # Bypasses the encrypted SDK credential store and attempts to load the # profile from the ini-format credentials file "mycredentials" in the # folder C:\MyCustomPath Set-AWSCredential -ProfileName myProfileName -ProfileLocation C:\MyCustomPath\mycredentials

Los siguientes ejemplos muestran el comportamiento del módulo AWSPowerShell.NetCore en los sistemas operativos Linux o macOS.

# Writes a new (or updates existing) profile with name "myProfileName" # in the default shared credentials file ~/.aws/credentials Set-AWSCredential -AccessKey akey -SecretKey skey -StoreAs myProfileName # Writes a new (or updates existing) profile with name "myProfileName" # into an ini-format credentials file "~/mycustompath/mycredentials" Set-AWSCredential -AccessKey akey -SecretKey skey -StoreAs myProfileName -ProfileLocation ~/mycustompath/mycredentials # Reads the default shared credential file looking for the profile "myProfileName" Set-AWSCredential -ProfileName myProfileName # Reads the specified credential file looking for the profile "myProfileName" Set-AWSCredential -ProfileName myProfileName -ProfileLocation ~/mycustompath/mycredentials