Autor: Edgar (Homz) Macias
Última actualización: Diciembre 2025
Nivel: Principiante
Tiempo estimado: 45-60 minutos
📋 Índice
- Introducción
- ¿Por qué este tutorial existe?
- Conceptos Fundamentales
- Paso 1: Asegurar Root User
- Paso 2: Crear Usuario IAM
- Paso 3: Configurar Alertas de Facturación
- Paso 4: Instalar AWS CLI
- Paso 5: Blindar tu Repositorio
- Verificación Final
- Recursos Adicionales
Introducción
Este tutorial te guía a través del proceso de configuración segura de una cuenta AWS desde cero, con énfasis especial en:
- 🔒 Seguridad: Proteger tu cuenta contra accesos no autorizados
- 💰 Control de costos: Evitar sorpresas en facturación
- 🎯 Mejores prácticas: Configuración profesional desde el día 1
⚠️ IMPORTANTE: Este tutorial asume que trabajarás con repositorios públicos. Toda la configuración está diseñada para NUNCA exponer secretos.
¿Por qué este tutorial existe?
El problema común
Muchos desarrolladores comienzan en AWS y cometen estos errores:
- Usan el Root User para trabajo diario → Riesgo de seguridad crítico
- No configuran alertas de facturación → Facturas de $1,000+ en 24 horas
- Suben credenciales a GitHub → Bots las encuentran en 5 minutos
Historias de terror reales
-
Desarrollador A: Subió
aws_credentials.txta GitHub público → Bots crearon 50 instancias GPU → Factura: $15,000 - Desarrollador B: Usó Root sin MFA → Phishing comprometió la cuenta → Perdió acceso completo
- Desarrollador C: No configuró alarmas → Dejó una Lambda en loop infinito → Factura: $3,200
Este tutorial previene estos escenarios.
Conceptos Fundamentales
Root User vs IAM User
| Característica | Root User | IAM User |
|---|---|---|
| Poder | Control absoluto sobre TODO | Permisos limitados que tú defines |
| Uso recomendado | Solo setup inicial | Trabajo diario |
| MFA | Obligatorio | Altamente recomendado |
| Riesgo si se compromete | Crítico (pérdida total) | Limitado al scope del usuario |
| Analogía | Usuario root en Linux |
Usuario con sudo limitado |
¿Qué es MFA?
Multi-Factor Authentication (Autenticación de Dos Factores)
- Sin MFA: Solo necesitas contraseña → Un keylogger te compromete
- Con MFA: Necesitas contraseña + código temporal (celular o USB) → Mucho más seguro
Apps recomendadas:
- Google Authenticator (iOS/Android)
- Authy (multi-dispositivo)
- Microsoft Authenticator
Paso 1: Asegurar Root User
1.1 - Acceder a la Consola
- Ve a https://console.aws.amazon.com
- Inicia sesión como Root user (usarás el email con el que creaste la cuenta)
1.2 - Activar MFA en Root
- Clic en tu nombre (arriba derecha) → Security credentials
- Sección "Multi-factor authentication (MFA)"
-
Assign MFA device → Selecciona:
- Authenticator app (recomendado para empezar)
- Security key (si tienes YubiKey o similar)
- Escanea el código QR con tu app (Google Authenticator/Authy)
- Introduce 2 códigos MFA consecutivos (espera 30 segundos entre cada uno)
- ¡IMPORTANTE! Guarda los códigos de recuperación en un lugar seguro físico
1.3 - Crear Alias de Cuenta (Opcional)
- Misma pantalla → Busca "Account Alias"
- Crea un alias memorable (ej:
mi-startup-prod,personal-aws) - Beneficio: URL de login más amigable
1.4 - Cerrar sesión de Root
A partir de ahora, NUNCA uses Root para trabajo diario.
Paso 2: Crear Usuario IAM
2.1 - Ir a IAM
- En la consola, busca "IAM" en la barra superior
- Menú izquierdo → Users → Create user
2.2 - Configurar Usuario
User name: Tu nombre (ej: juan-admin, maria-dev)
Access type:
- ✅ Marca: "Provide user access to the AWS Management Console"
Console password:
- Opción 1: Custom password (crea una contraseña fuerte)
- Opción 2: Auto-generated (AWS genera una aleatoria)
IMPORTANTE: Desmarca "Users must create a new password at next sign-in" (para simplificar)
2.3 - Asignar Permisos
Para aprendizaje:
- Selecciona "Attach policies directly"
- Busca y marca:
AdministratorAccess
Para producción (después):
- Usa permisos más granulares según el principio de "Least Privilege"
- Ejemplo:
AmazonS3FullAccess,AWSLambdaFullAccess, etc.
2.4 - Revisar y Crear
- Clic Next → Create user
- DESCARGA el archivo CSV con credenciales
- Guarda este CSV en un gestor de contraseñas (1Password, Bitwarden, etc.)
2.5 - Activar MFA para IAM User
- En la lista de usuarios → Clic en tu usuario
- Pestaña "Security credentials"
- Sección "Multi-factor authentication (MFA)"
- Assign MFA device → Mismo proceso que Root
2.6 - Iniciar sesión como IAM User
- Cierra sesión de Root
- Ve a:
https://TU-ALIAS.signin.aws.amazon.com(o usa el Account ID) -
IAM user name:
juan-admin - Password: La que configuraste
- MFA code: Código actual de tu app
Paso 3: Configurar Alertas de Facturación
3.1 - Habilitar Alertas (Requiere Root)
⚠️ Solo este paso requiere Root temporalmente
- Inicia sesión como Root User
- Clic en tu nombre → Account
- Baja hasta "Billing preferences" → Edit
- Activa:
- ✅ "Receive Free Tier Usage Alerts"
- ✅ "Receive Billing Alerts"
- Introduce tu email → Save preferences
- Cierra sesión de Root
3.2 - Crear Presupuesto ($0.01)
Ahora como IAM User:
- Busca "AWS Budgets" (o Billing → Budgets)
- Create budget
-
Template: Selecciona "Zero spend budget" (recomendado para empezar)
- O usa "Customize" para $0.01 exactos
Si usas Customize:
-
Budget name:
Alerta-Costo-Minimo - Period: Monthly
-
Budgeted amount:
0.01USD - Budget scope: All AWS services
3.3 - Configurar Alertas del Presupuesto
Alert 1 - Costo Real:
- Threshold: Actual costs - 100% (cuando alcances $0.01)
- Email: Tu email principal
Alert 2 - Pronóstico (Opcional):
- Threshold: Forecasted costs - 80%
- Email: Tu email
3.4 - Free Tier Alert (Adicional)
AWS enviará emails automáticamente cuando:
- Estés cerca de superar límites del Free Tier
- Hayas superado un servicio del Free Tier
Paso 4: Instalar AWS CLI
4.1 - Instalación según OS
macOS:
curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg AWSCLIV2.pkg -target /
Linux:
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
Windows:
- Descarga: https://awscli.amazonaws.com/AWSCLIV2.msi
- Ejecuta el instalador
Verificar:
aws --version
# Output esperado: aws-cli/2.x.x Python/3.x.x ...
4.2 - Crear Access Keys
⚠️ SOLO para tu usuario IAM, NUNCA para Root
- Consola AWS (como IAM User) → IAM → Users → Tu usuario
- Pestaña "Security credentials"
- Sección "Access keys" → Create access key
- Use case: Command Line Interface (CLI)
- Marca "I understand..." → Next
- (Opcional) Description:
CLI-Local-DevMachine - Create access key
- ¡DESCARGA EL CSV! (Solo se muestra UNA vez)
4.3 - Configurar Perfil Local
aws configure --profile mi-proyecto
Introduce:
-
AWS Access Key ID:
AKIA...(del CSV) -
AWS Secret Access Key:
wJalr...(del CSV) -
Default region:
us-east-1(recomendado para empezar) -
Output format:
json(o vacío)
¿Dónde se guarda?
- Linux/macOS:
~/.aws/credentialsy~/.aws/config - Windows:
C:\Users\TuUsuario\.aws\credentials
4.4 - Configurar Variable de Entorno
Bash/Zsh:
echo 'export AWS_PROFILE=mi-proyecto' >> ~/.zshrc
source ~/.zshrc
Fish:
echo 'set -gx AWS_PROFILE mi-proyecto' >> ~/.config/fish/config.fish
source ~/.config/fish/config.fish
Windows PowerShell:
[System.Environment]::SetEnvironmentVariable('AWS_PROFILE', 'mi-proyecto', 'User')
4.5 - Probar Configuración
aws sts get-caller-identity
Output esperado:
{
"UserId": "AIDAXXXXXXXXXX",
"Account": "123456789012",
"Arn": "arn:aws:iam::123456789012:user/juan-admin"
}
✅ Si el Arn contiene :user/TuNombre → Todo correcto
❌ Si contiene :root → Estás usando Root (MAL)
Paso 5: Blindar tu Repositorio
5.1 - Crear .gitignore (CRÍTICO)
En la raíz de tu proyecto:
touch .gitignore
Contenido mínimo obligatorio:
# === SECRETOS AWS Y TERRAFORM ===
*.tfvars
*.tfstate
*.tfstate.*
.terraform/
.terraform.lock.hcl
# === CREDENCIALES ===
.env
.env.*
*.pem
*.key
aws_credentials.txt
credentials.json
config.json
# === GOLANG ===
*.exe
*.dll
*.so
*.dylib
*.test
*.out
vendor/
go.work
# === SISTEMA ===
.DS_Store
Thumbs.db
# === EDITORES ===
.vscode/
.idea/
*.swp
*.swo
*~
5.2 - Verificar ANTES de commit
git status
NUNCA debes ver:
- Archivos
.tfstate - Archivos
.env - Archivos con extensión
.pemo.key - Directorios
.terraform/
5.3 - Agregar Pre-Commit Check (Opcional pero recomendado)
Instala pre-commit:
# macOS
brew install pre-commit
# Linux
pip install pre-commit
# Windows
pip install pre-commit
Crea .pre-commit-config.yaml:
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
hooks:
- id: check-added-large-files
- id: detect-aws-credentials
- id: detect-private-key
- repo: https://github.com/antonbabenko/pre-commit-terraform
rev: v1.83.5
hooks:
- id: terraform_fmt
- id: terraform_validate
Activar:
pre-commit install
Verificación Final
Checklist de Seguridad
- [ ] Root User tiene MFA activado
- [ ] Root User NO se usa para trabajo diario
- [ ] IAM User creado con permisos AdministratorAccess
- [ ] IAM User tiene MFA activado
- [ ] AWS Budgets configurado ($0.01 o Zero Spend)
- [ ] Free Tier alerts habilitadas
- [ ] AWS CLI instalado y verificado
- [ ] Perfil de AWS CLI configurado (NO usa Root)
- [ ]
.gitignorecreado y validado - [ ] Ningún archivo sensible en
git status
Test de Comando
# Debe mostrar tu usuario IAM
aws sts get-caller-identity
# Debe listar buckets (vacío si no tienes ninguno)
aws s3 ls
# Debe mostrar tu región configurada
aws configure get region
Recursos Adicionales
Documentación Oficial
Herramientas Recomendadas
- Gestores de contraseñas: 1Password, Bitwarden, LastPass
- MFA Apps: Google Authenticator, Authy, Microsoft Authenticator
- Git Security: git-secrets, pre-commit
Límites del Free Tier (Primeros 12 meses)
| Servicio | Límite Mensual |
|---|---|
| EC2 | 750 horas de t2.micro |
| S3 | 5GB de almacenamiento |
| Lambda | 1M de invocaciones |
| DynamoDB | 25GB de almacenamiento |
| RDS | 750 horas de db.t2.micro |
⚠️ Servicios SIN Free Tier:
- NAT Gateway (~$32/mes)
- Load Balancers (~$16/mes)
- Elastic IP no asignada ($3.6/mes)
Próximos Pasos
Una vez completado este módulo:
- Módulo 1: Terraform y Remote Backend (S3 + DynamoDB)
- Módulo 2: IAM Roles y Políticas avanzadas
- Módulo 3: Desplegar aplicación Go con Lambda
Preguntas Frecuentes
Q: ¿Puedo usar Root User ocasionalmente?
A: Solo para tareas que REQUIERAN Root (cambiar plan de soporte, cerrar cuenta). Día a día: NO.
Q: ¿Qué hago si pierdo acceso a MFA?
A: Usa los códigos de recuperación que guardaste. Si los perdiste, contacta a AWS Support (puede tomar días).
Q: ¿Puedo tener múltiples usuarios IAM?
A: Sí. Crea uno por persona/servicio con permisos específicos.
Q: ¿Qué hago si subí credenciales a GitHub por error?
A: 1) Borra el commit inmediatamente, 2) Rota las credenciales en IAM, 3) Revisa CloudTrail por actividad sospechosa.
Contribuciones
Si encuentras errores o mejoras, abre un Issue o Pull Request.
Licencia
MIT License - Úsalo, compártelo, mejóralo.
Creado por: Edgar (Homz) Macias
Repositorio:
Top comments (0)