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.

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

Los perfiles de AWS CLI mantienen separadas tus cuentas, roles, regiones y configuraciones de salida. Si gestionas los entornos de desarrollo, staging y producción desde el mismo portátil, los perfiles te ayudan a evitar ejecutar un comando contra la cuenta de AWS equivocada.

El objetivo es simple: hacer explícita la cuenta deseada, reducir las credenciales de larga duración cuando sea posible y darte comprobaciones rápidas antes de comandos destructivos.

Configuración de tu archivo de configuración de AWS CLI

La AWS CLI almacena la configuración de los perfiles en dos archivos compartidos:

  • ~/.aws/credentials para claves de acceso y credenciales de sesión.
  • ~/.aws/config para región, formato de salida, configuración de roles y otras opciones de CLI.

En Windows, los mismos archivos se encuentran en %USERPROFILE%\.aws\.

Perfil predeterminado

Cuando ejecutas aws configure sin --profile, escribe la configuración para [default]. La CLI usa este perfil cuando no especificas otro y ninguna variable de entorno relevante lo anula.

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

Creación de perfiles con nombre

Puedes crear perfiles con nombre usando aws configure --profile:

aws configure --profile dev
aws configure --profile prod

También puedes editar los archivos directamente. Usa nombres de perfil simples en ~/.aws/credentials:

~/.aws/credentials:

[default]
aws_access_key_id = YOUR_DEFAULT_ACCESS_KEY
aws_secret_access_key = YOUR_DEFAULT_SECRET_KEY

[prod]
aws_access_key_id = YOUR_PROD_ACCESS_KEY
aws_secret_access_key = YOUR_PROD_SECRET_KEY

[dev]
aws_access_key_id = YOUR_DEV_ACCESS_KEY
aws_secret_access_key = YOUR_DEV_SECRET_KEY

En ~/.aws/config, los perfiles con nombre usan el prefijo profile :

~/.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

Detalles importantes:

  • Al definir perfiles en ~/.aws/config, debes anteponer el nombre del perfil con profile (por ejemplo, [profile prod]). Esto es diferente de ~/.aws/credentials, donde usas solo el nombre del perfil (por ejemplo, [prod]).
  • El perfil [default] no actúa automáticamente como padre de los perfiles con nombre. Si prod necesita una región, establece region bajo [profile prod] o proporciónala de otra manera.

Cambio entre perfiles

Una vez que tienes configurados tus perfiles con nombre, 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

Antes de ejecutar un comando arriesgado, verifica quién eres:

aws sts get-caller-identity --profile prod

Esto devuelve el ID de cuenta y ARN de las credenciales que la CLI está utilizando.

Configuración de un perfil predeterminado para el entorno

Escribir constantemente --profile puede ser tedioso. Puedes establecer AWS_PROFILE para tu sesión actual del shell.

Linux/macOS:

export AWS_PROFILE=prod

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

Para desactivarlo:

unset AWS_PROFILE

Símbolo del sistema de Windows:

set AWS_PROFILE=prod

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

Para desactivarlo:

set AWS_PROFILE=

Windows PowerShell:

$env:AWS_PROFILE = "prod"

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

Para desactivarlo:

Remove-Item Env:\AWS_PROFILE

Las opciones de línea de comandos tienen mayor prioridad que las variables de entorno. Si AWS_PROFILE=dev está establecido pero ejecutas aws s3 ls --profile prod, el comando usa prod.

Gestión de múltiples cuentas de AWS con perfiles

Los perfiles son útiles 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 administrador o desarrollador que necesita gestionar recursos en múltiples cuentas.

Mejor práctica: Uso de roles de IAM

Evita almacenar claves de acceso de larga duración para cada cuenta. Un patrón común es mantener un perfil de origen o perfil SSO, y luego asumir roles en las cuentas de destino.

Para la asunción de roles, configura un perfil como este:

# ~/.aws/config

[profile dev-role]
role_arn = arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME
source_profile = default
region = us-east-1
output = json

Cuando ejecutas un comando con --profile dev-role, la CLI usa el perfil default para llamar a AWS STS, asume el rol y usa credenciales temporales para el comando.

Si tu organización usa IAM Identity Center, tu perfil puede usar configuraciones de SSO en lugar de claves de acceso:

[profile sandbox]
sso_start_url = https://example.awsapps.com/start
sso_region = us-east-1
sso_account_id = 123456789012
sso_role_name = DeveloperAccess
region = us-east-1
output = json

Luego autentícate con:

aws sso login --profile sandbox

Opciones de configuración avanzadas

Además 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 multipartes de S3.
  • cli_binary_format: Cómo se interpretan los parámetros binarios en AWS CLI v2.

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

Usa aws configure set para evitar errores de sangría:

aws configure set s3.max_concurrent_requests 20 --profile s3-optimized
aws configure set s3.max_queue_size 10000 --profile s3-optimized

Esto escribe los ajustes de S3 bajo el perfil en ~/.aws/config:

# ~/.aws/config

[profile s3-optimized]
region = us-east-1
output = json
s3 =
    max_concurrent_requests = 20
    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 entorno que representan (por ejemplo, prod-admin, dev-web, sandbox-research).
  • Protege tus credenciales: Nunca subas tu archivo ~/.aws/credentials al control de versiones. Usa roles de 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, gíralas periódicamente y desactiva las antiguas.
  • Aprovecha las variables de entorno: Usa AWS_PROFILE para cambios temporales o para pipelines de CI/CD donde necesites apuntar a cuentas específicas.
  • Vigila las variables de entorno de credenciales: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY y AWS_SESSION_TOKEN pueden anular las credenciales de los perfiles. Límpialas si la CLI parece usar la identidad incorrecta.
  • Nombra los perfiles según el radio de explosión: Nombres como prod-readonly, prod-admin y sandbox-dev son más seguros que nombres vagos como main o test.

Conclusión práctica

Usa perfiles para cada cuenta y rol que toques con frecuencia, y verifica aws sts get-caller-identity antes de cambiar recursos de producción. Prefiere perfiles basados en SSO o roles sobre claves de acceso de larga duración, y ten en cuenta las variables de entorno cuando un comando parezca apuntar a la cuenta equivocada.