Cómo configurar y gestionar múltiples perfiles de AWS CLI de manera eficiente

Aprenda a gestionar eficientemente múltiples cuentas y entornos de AWS utilizando perfiles con nombre de AWS CLI. Esta guía proporciona instrucciones paso a paso sobre cómo configurar, cambiar entre y proteger diferentes conjuntos de credenciales y configuraciones de AWS. Optimice su flujo de trabajo en la nube dominando la gestión de perfiles para mejorar la productividad y la seguridad.

41 vistas

Comprendiendo los Perfiles de AWS CLI

La Interfaz de Línea de Comandos de AWS (AWS CLI) es una herramienta poderosa para interactuar con Amazon Web Services. Para usuarios que gestionan múltiples cuentas de AWS o diferentes roles dentro de una cuenta, configurar y cambiar entre perfiles es crucial para una gestión eficiente del flujo de trabajo. Los perfiles con nombre permiten almacenar diferentes conjuntos de credenciales, regiones predeterminadas y formatos de salida, lo que permite transiciones fluidas entre varios entornos de AWS sin especificar manualmente las credenciales cada vez.

Esta guía te guiará a través del proceso de configuración, gestión y utilización de múltiples perfiles de AWS CLI. Al final, podrás optimizar tus interacciones de línea de comandos en diferentes cuentas de AWS, mejorando la seguridad y la productividad.

Configuración de tu Archivo de Configuración de AWS CLI

La AWS CLI almacena información de configuración en un archivo llamado config y credenciales en un archivo llamado credentials. Por defecto, estos archivos se encuentran en el directorio .aws dentro del directorio de inicio de tu usuario (~/.aws/ en Linux/macOS, %USERPROFILE%\.aws\ en Windows).

Perfil Predeterminado

Cuando configuras la AWS CLI por primera vez usando aws configure, crea un perfil predeterminado llamado [default]. Este perfil se usa si no se especifica ningún otro perfil.

# Ejemplo de un perfil predeterminado en ~/.aws/credentials
[default]
aws_access_key_id = TU_CLAVE_DE_ACCESO_PREDETERMINADA
aws_secret_access_key = TU_CLAVE_SECRETA_DE_ACCESO_PREDETERMINADA
# Ejemplo de un perfil predeterminado en ~/.aws/config
[default]
region = us-east-1
output = json

Creación de Perfiles con Nombre

Para crear un perfil con nombre, simplemente agrega una nueva sección a tus archivos credentials y config, usando un nombre descriptivo para el perfil. Por ejemplo, para crear un perfil para una cuenta de producción y otro para una cuenta de desarrollo:

1. Edición de ~/.aws/credentials:

Agrega una nueva sección con un nombre de perfil (por ejemplo, [prod], [dev]).

# ~/.aws/credentials

[default]
aws_access_key_id = TU_CLAVE_DE_ACCESO_PREDETERMINADA
aws_secret_access_key = TU_CLAVE_SECRETA_DE_ACCESO_PREDETERMINADA

[prod]
aws_access_key_id = TU_CLAVE_DE_ACCESO_PROD
aws_secret_access_key = TU_CLAVE_SECRETA_DE_ACCESO_PROD

[dev]
aws_access_key_id = TU_CLAVE_DE_ACCESO_DEV
aws_secret_access_key = TU_CLAVE_SECRETA_DE_ACCESO_DEV

2. Edición de ~/.aws/config:

De manera similar, agrega secciones correspondientes al archivo config. Puedes especificar la región y el formato de salida por perfil.

# ~/.aws/config

[default]
region = us-east-1
output = json

[profile prod]
region = us-west-2
output = text

[profile dev]
region = eu-central-1
output = json

Notas Importantes:
* Al definir perfiles en ~/.aws/config, debes anteponer profile al nombre del perfil (por ejemplo, [profile prod]). Esto es diferente de ~/.aws/credentials, donde usas solo el nombre del perfil (por ejemplo, [prod]).
* Si una configuración se define tanto en el perfil [default] como en un perfil con nombre, la configuración del perfil con nombre tiene precedencia.

Cambio entre Perfiles

Una vez que tus perfiles con nombre estén configurados, puedes usarlos especificando la opción --profile con tus comandos de AWS CLI.

Ejemplo: Para listar los buckets de S3 en tu cuenta de producción:

aws s3 ls --profile prod

Ejemplo: Para describir instancias EC2 en tu cuenta de desarrollo:

aws ec2 describe-instances --profile dev

Si omites la opción --profile, la CLI usará el perfil [default].

Establecimiento de un Perfil Predeterminado para el Entorno

Escribir constantemente --profile puede ser tedioso. Puedes establecer una variable de entorno para especificar qué perfil debe usar la AWS CLI por defecto para la sesión actual.

Uso de la variable de entorno AWS_PROFILE:

En Linux/macOS:

export AWS_PROFILE=prod

# Ahora, los comandos usarán el perfil 'prod' por defecto
aws s3 ls
aws ec2 describe-instances

Para eliminarla:

unset AWS_PROFILE

En Windows (Símbolo del sistema):

set AWS_PROFILE=prod

# Ahora, los comandos usarán el perfil 'prod' por defecto
aws s3 ls

Para eliminarla:

set AWS_PROFILE=

En Windows (PowerShell):

$env:AWS_PROFILE = "prod"

# Ahora, los comandos usarán el perfil 'prod' por defecto
aws s3 ls

Para eliminarla:

Remove-Item Env:\AWS_PROFILE

Gestión de Múltiples Cuentas de AWS con Perfiles

Este es un caso de uso común para los perfiles con nombre. Cada perfil se puede configurar con las claves de acceso del usuario IAM para una cuenta de AWS diferente. Esto es particularmente útil para:

  • Desarrollo vs. Producción: Mantener separados tus entornos de desarrollo y producción por seguridad.
  • Diferentes Equipos/Proyectos: Aislar recursos y permisos para equipos o proyectos distintos.
  • Acceso entre Cuentas: Si eres un administrador o desarrollador que necesita gestionar recursos en múltiples cuentas.

Mejor Práctica: Uso de Roles IAM

En lugar de almacenar claves de acceso de larga duración para cada cuenta directamente en tu archivo de credenciales, es una práctica más segura y recomendada usar roles IAM. Esto implica:

  1. Crear un rol IAM en la cuenta de destino que tu usuario IAM (en tu cuenta principal) pueda asumir.
  2. Configurar tu AWS CLI local para asumir este rol al usar un perfil específico.

Para configurar la asunción de roles en ~/.aws/config:

# ~/.aws/config

[profile dev-role]
role_arn = arn:aws:iam::ID_DE_CUENTA:role/NOMBRE_DEL_ROL
source_profile = default  # O algún otro perfil que tenga permisos para asumir el rol
region = us-east-1
output = json

Cuando usas aws ec2 describe-instances --profile dev-role, la CLI intentará automáticamente asumir el rol IAM especificado y usará las credenciales temporales obtenidas.

Opciones de Configuración Avanzada

Más allá de las credenciales y la región, los perfiles pueden especificar otras configuraciones de AWS CLI:

  • output: json, text, table
  • region: por ejemplo, us-east-1
  • s3.max_concurrent_requests: Número de solicitudes paralelas para operaciones de S3.
  • s3.max_queue_size: Tamaño de la cola para cargas multipart de S3.
  • cli_binary_url: Especifica una URL personalizada para descargar binarios de la CLI (menos común).

Ejemplo: Configuración de ajustes de S3 para un perfil específico

# ~/.aws/config

[profile s3-optimized]
region = us-east-1
output = json
s3.max_concurrent_requests = 50
s3.max_queue_size = 10000

Consejos y Mejores Prácticas

  • Usa Nombres de Perfil Descriptivos: Haz que los nombres de tus perfiles sean claros e indicativos de la cuenta o el entorno que representan (por ejemplo, prod-admin, dev-web, sandbox-research).
  • Asegura tus Credenciales: Nunca incluyas tu archivo ~/.aws/credentials en el control de versiones. Usa roles IAM para acceso entre cuentas siempre que sea posible para evitar almacenar claves de acceso de larga duración.
  • Revisa Regularmente las Claves de Acceso: Si debes usar claves de acceso, rótalas periódicamente y deshabilita las antiguas.
  • Aprovecha las Variables de Entorno: Usa AWS_PROFILE para cambios temporales o para pipelines de CI/CD donde necesites dirigirte a cuentas específicas.
  • Combina Perfiles y Variables de Entorno: Si se establece una variable de entorno AWS_PROFILE, anulará cualquier perfil especificado con --profile.

Conclusión

Dominar los perfiles de AWS CLI es una habilidad fundamental para cualquiera que trabaje extensamente con Amazon Web Services. Al configurar y utilizar correctamente los perfiles con nombre, puedes mejorar significativamente tu productividad, mantener mejores prácticas de seguridad y gestionar múltiples entornos de AWS con facilidad. Ya sea que cambies entre cuentas de desarrollo, staging y producción, o gestiones recursos para diferentes clientes, los perfiles proporcionan la flexibilidad y el control necesarios para operaciones en la nube eficientes.