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.
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
defaulty perfiles adicionales con nombre. - Cambiar de perfil sin reescribir comandos (3 formas distintas).
- Estructurar tus archivos
~/.aws/credentialsy~/.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 eneu-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.
- Inicia sesión en la consola AWS con un user que tenga permisos
iam:CreateUser,iam:AttachUserPolicyyiam:CreateAccessKey. - Ve a IAM → Users → Create user.
- Nombre:
cli-user-luis(o el nombre que prefieras). - No marques “Provide user access to the AWS Management Console” — solo necesitas acceso programático.
- Permisos: para este lab, la policy gestionada
ReadOnlyAccesses segura para empezar. En producción, aplica least privilege (solo los servicios y acciones que necesites). - Crea el user.
- Entra al user creado → Security credentials → Create access key.
- Caso de uso: Command Line Interface (CLI).
- Copia el
Access Key IDySecret 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-identityes 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
.bashrco.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 |
|---|---|
json | Pipelines automáticos con jq, scripts, programas |
text | Pipelines simples con awk, cut, comparaciones |
table | Inspección manual rápida en terminal |
yaml | Lectura 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
credentialsdebe tener permisos600(-rw-------). Verifica conls -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
- Nunca commitees credenciales a git. Agrega
.aws/a tu.gitignoreglobal por seguridad extra. - Rota las access keys periódicamente. En IAM, regenera la key, configura la nueva con
aws configure, prueba consts get-caller-identity, luego elimina la vieja. - Usa permisos mínimos. Empieza con
ReadOnlyAccesspara experimentar; dale solo lo que necesites para producir. - Considera IAM Identity Center. Para uso real, las access keys de larga vida son anti-pattern. Identity Center genera credenciales temporales que expiran.
- 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:
- Revoca las access keys en IAM (consola → Users → Security credentials → Deactivate, luego Delete).
- Borra el perfil de tus archivos:
- Edita
~/.aws/credentialsy elimina la sección[<nombre-del-perfil>]. - Edita
~/.aws/configy elimina la sección[profile <nombre>].
- Edita
- 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_arnen~/.aws/configy AWS CLI hacests:AssumeRoleautomá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