> labs.luisguisado.cloud
beginner ~30 min · por Luis Guisado · actualizado 4 de mayo de 2026

AWS CLI: setup, perfiles y comandos básicos

Instala AWS CLI, configura uno o más perfiles con credenciales seguras y aprende los comandos básicos para verificar identidad, listar recursos y cambiar de cuenta sin reescribir flags.

IAM STS

Costo estimado: free under AWS free tier

Qué vas a aprender

  • Instalar y verificar AWS CLI v2.
  • Generar credenciales programáticas en IAM.
  • Configurar el perfil default y perfiles adicionales con nombre.
  • Cambiar de perfil sin reescribir comandos (3 formas distintas).
  • Estructurar tus archivos ~/.aws/credentials y ~/.aws/config.
  • Aplicar buenas prácticas de seguridad para credenciales.

Por qué los perfiles importan

Si trabajas con AWS más de una vez al mes, eventualmente vas a tener:

  • Más de una cuenta AWS: una personal, una del trabajo, una para experimentos.
  • Más de un rol: developer, admin, read-only.
  • Más de una región default: algunos proyectos en us-east-1, otros en eu-west-1.

Sin perfiles, cada comando exige --region, --access-key-id, --secret-access-key repetidos manualmente. Con perfiles, configuras una vez y usas N veces.

# Sin perfiles — frágil y propenso a errores
AWS_ACCESS_KEY_ID=... AWS_SECRET_ACCESS_KEY=... aws s3 ls --region us-east-1

# Con perfiles
AWS_PROFILE=dev aws s3 ls

Los perfiles también desacoplan identidad (quién eres) de comando (qué quieres hacer), que es la base de todo flujo serio en AWS.


Prerrequisitos

  • Una cuenta AWS activa donde tengas permiso para crear un IAM user (o donde alguien te haya dado acceso vía IAM Identity Center).
  • Una terminal: bash, zsh, fish o PowerShell. Los ejemplos asumen bash/zsh.
  • 30 minutos.

Si tu organización usa IAM Identity Center (el reemplazo moderno de IAM users con access keys), la sección de credenciales cambia. Verás esa alternativa en “Próximos pasos”.


Paso 1 — Instalar AWS CLI v2

AWS CLI v1 ya no recibe features nuevos; usa v2.

macOS (con Homebrew):

brew install awscli

Linux:

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

Windows: descarga el instalador MSI desde docs.aws.amazon.com/cli.

Verifica:

aws --version
# → aws-cli/2.17.x Python/3.x.x ...

Si la salida empieza con aws-cli/1.x, tienes la versión legacy y debes actualizar. CLI v1 no soporta features modernas como IAM Identity Center.


Paso 2 — Generar credenciales en IAM

Esta es la opción de “primer contacto” — funciona pero no es lo más seguro. En la sección final verás la alternativa moderna (IAM Identity Center). Para aprender los fundamentos, las access keys son el camino más directo.

  1. Inicia sesión en la consola AWS con un user que tenga permisos iam:CreateUser, iam:AttachUserPolicy y iam:CreateAccessKey.
  2. Ve a IAM → Users → Create user.
  3. Nombre: cli-user-luis (o el nombre que prefieras).
  4. No marques “Provide user access to the AWS Management Console” — solo necesitas acceso programático.
  5. Permisos: para este lab, la policy gestionada ReadOnlyAccess es segura para empezar. En producción, aplica least privilege (solo los servicios y acciones que necesites).
  6. Crea el user.
  7. Entra al user creado → Security credentials → Create access key.
  8. Caso de uso: Command Line Interface (CLI).
  9. Copia el Access Key ID y Secret Access Key. El secret solo se muestra una vez — guárdalo en un gestor de contraseñas.

Vas a tener dos strings:

Access Key ID:     AKIAIOSFODNN7EXAMPLE
Secret Access Key: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

Estos son los que usarás en el siguiente paso.


Paso 3 — Configurar el perfil default

Ejecuta:

aws configure

Te pregunta cuatro cosas:

AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: us-east-1
Default output format [None]: json

Esto crea (o actualiza) dos archivos en tu home:

~/.aws/credentials   ← claves
~/.aws/config        ← región, output format

Más adelante verás cómo se ven por dentro.


Paso 4 — Verificar la configuración

El comando definitivo para confirmar quién soy según AWS:

aws sts get-caller-identity

Respuesta esperada:

{
    "UserId": "AIDAIOSFODNN7EXAMPLE",
    "Account": "123456789012",
    "Arn": "arn:aws:iam::123456789012:user/cli-user-luis"
}

Si te devuelve Unable to locate credentials, los archivos no se crearon o hay un typo. Re-ejecuta aws configure y verifica.

sts get-caller-identity es el “ping” de AWS CLI: no requiere permisos especiales y siempre te dice qué identidad estás usando. Memorízalo — lo vas a usar muchísimo.


Paso 5 — Configurar perfiles adicionales

Imagina que tienes una cuenta personal y otra de trabajo. Para configurar un segundo perfil llamado work:

aws configure --profile work

Mismos cuatro prompts, valores distintos:

AWS Access Key ID [None]: <keys de la cuenta de trabajo>
AWS Secret Access Key [None]: <secret de la cuenta de trabajo>
Default region name [None]: eu-west-1
Default output format [None]: json

Repite para cuantos perfiles necesites: personal, dev, staging, prod, etc.

Listar todos los perfiles configurados:

aws configure list-profiles
default
work

Paso 6 — Cambiar entre perfiles

Hay tres formas, ordenadas de menos a más permanentes:

6.1 Flag --profile (per-comando)

aws sts get-caller-identity --profile work

Útil cuando solo un comando va a una cuenta distinta.

6.2 Variable de entorno AWS_PROFILE (per-shell)

export AWS_PROFILE=work
aws sts get-caller-identity   # ya usa "work" sin flag

Útil cuando vas a ejecutar muchos comandos en la misma cuenta. La variable solo afecta a ese shell.

Para volver al default:

unset AWS_PROFILE

6.3 Cambiar el perfil “default”

No recomendado. Edita ~/.aws/credentials y mueve los valores manualmente. Es propenso a error y no es trazable. Mejor usa flag o variable.

Tip: agrega un alias en tu .bashrc o .zshrc:

alias awsp='export AWS_PROFILE='

Y úsalo así: awsp work (notar el espacio — el alias hace el =, tú das el valor).


Paso 7 — Formatos de output

json es el default. Hay otros tres:

aws ec2 describe-regions --output json    # default — bueno para scripts y jq
aws ec2 describe-regions --output text    # tab-separated, fácil con awk/cut
aws ec2 describe-regions --output table   # ASCII art, legible para humanos
aws ec2 describe-regions --output yaml    # YAML

Cuándo usar cada uno:

OutputÚtil para
jsonPipelines automáticos con jq, scripts, programas
textPipelines simples con awk, cut, comparaciones
tableInspección manual rápida en terminal
yamlLectura humana de outputs grandes y estructurados

Para fijarlo permanentemente en un perfil, edita ~/.aws/config o vuelve a correr aws configure.


Paso 8 — Comandos del día a día

# ¿Quién soy?
aws sts get-caller-identity

# Listar buckets S3
aws s3 ls

# Listar objetos de un bucket recursivamente
aws s3 ls s3://mi-bucket/ --recursive

# Listar Lambdas (solo nombres)
aws lambda list-functions --query "Functions[].FunctionName" --output text

# Listar regiones disponibles
aws ec2 describe-regions --query "Regions[].RegionName" --output text

# Tail al log de un Lambda
aws logs tail /aws/lambda/mi-funcion --follow

# Ver lo que está configurado actualmente
aws configure list

# Listar perfiles existentes
aws configure list-profiles

El parámetro --query usa JMESPath y te ahorra un jq después. Vale la pena aprenderlo: jmespath.org.


Anatomía: cómo se guardan las credenciales

AWS CLI usa dos archivos en tu home (~/.aws/):

~/.aws/credentials:

[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

[work]
aws_access_key_id = AKIAI44QH8DHBEXAMPLE
aws_secret_access_key = je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY

~/.aws/config:

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

[profile work]
region = eu-west-1
output = json

Notas importantes:

  • En credentials, el perfil default se llama [default] sin prefijo.
  • En config, los perfiles non-default usan el prefijo [profile <nombre>]. Es una particularidad histórica de AWS CLI — confunde la primera vez.
  • El archivo credentials debe tener permisos 600 (-rw-------). Verifica con ls -la ~/.aws/credentials.

Puedes editar estos archivos a mano si prefieres, en lugar de aws configure. Es solo formato INI.


Buenas prácticas de seguridad

  1. Nunca commitees credenciales a git. Agrega .aws/ a tu .gitignore global por seguridad extra.
  2. Rota las access keys periódicamente. En IAM, regenera la key, configura la nueva con aws configure, prueba con sts get-caller-identity, luego elimina la vieja.
  3. Usa permisos mínimos. Empieza con ReadOnlyAccess para experimentar; dale solo lo que necesites para producir.
  4. Considera IAM Identity Center. Para uso real, las access keys de larga vida son anti-pattern. Identity Center genera credenciales temporales que expiran.
  5. MFA en el user IAM. Activa Multi-Factor Authentication en cualquier IAM user con acceso programático sensible.

Limpieza

Cuando ya no necesites un perfil:

  1. Revoca las access keys en IAM (consola → Users → Security credentials → Deactivate, luego Delete).
  2. Borra el perfil de tus archivos:
    • Edita ~/.aws/credentials y elimina la sección [<nombre-del-perfil>].
    • Edita ~/.aws/config y elimina la sección [profile <nombre>].
  3. Verifica: aws configure list-profiles.

Revocar las keys en AWS es lo más importante. Borrar el perfil local solo limpia tu disco.


Próximos pasos

  • IAM Identity Center. El reemplazo moderno de IAM users con access keys de larga vida. Genera credenciales temporales que expiran (típicamente 8h) y soporta login con SSO empresarial. Comando relevante: aws configure sso. Es la dirección a la que está yendo AWS.
  • Roles asumidos. Para acceder a recursos de otra cuenta sin crear un user nuevo, configura role_arn en ~/.aws/config y AWS CLI hace sts:AssumeRole automáticamente.
  • aws-vault. Tool externa que cifra tus credenciales en el keychain del OS en vez de dejarlas en plain text en ~/.aws/credentials. Recomendado para máquinas compartidas o portátiles.

Referencia rápida

# Setup
aws configure                          # configura perfil default
aws configure --profile work           # configura perfil "work"
aws configure list                     # ver configuración del perfil activo
aws configure list-profiles            # listar todos los perfiles

# Verificar identidad
aws sts get-caller-identity            # quién soy ahora
aws sts get-caller-identity --profile work

# Cambiar de perfil
export AWS_PROFILE=work                # para la sesión actual
aws ... --profile work                 # solo este comando
unset AWS_PROFILE                      # volver al default

# Output formats
--output json | text | table | yaml

# Comandos comunes
aws s3 ls
aws lambda list-functions --query "Functions[].FunctionName" --output text
aws logs tail /aws/lambda/mi-funcion --follow