AWS Módulo 0: Setup Seguro de Cuenta (Zero to Architect)
Source: Dev.to
Introducción
Este tutorial te guía paso a paso para configurar una cuenta AWS de forma segura desde cero, con énfasis en:
- Seguridad: proteger la cuenta contra accesos no autorizados.
- Control de costos: evitar sorpresas en la facturación.
- Mejores prácticas: configuración profesional desde el día 1.
IMPORTANTE: El tutorial asume que trabajarás con repositorios públicos. Toda la configuración está diseñada para NUNCA exponer secretos.
Conceptos Fundamentales
| Elemento | Uso recomendado | Comentario |
|---|---|---|
| Root User | Solo para el setup inicial | Acceso absoluto; riesgo crítico si se compromete. |
| IAM User | Trabajo diario | Permisos limitados según el principio de Least Privilege. |
| MFA | Obligatorio para Root, altamente recomendado para IAM | Añade una capa extra de seguridad (contraseña + código temporal). |
Paso 1 – Asegurar el Root User
- Accede a la consola e inicia sesión con el usuario Root.
- En la esquina superior derecha haz clic en tu nombre → Security credentials.
- En la sección Multi-factor authentication (MFA), elige Assign MFA device y selecciona:
-
Authenticator app (recomendado para empezar)
-
Security key (YubiKey u otro)
-
Escanea el código QR con Google Authenticator, Authy o Microsoft Authenticator.
-
Introduce dos códigos MFA consecutivos (espera 30 s entre cada uno).
-
- Guarda los códigos de recuperación en un lugar físico seguro.
Crear un Alias de Cuenta
- En la misma pantalla, busca Account Alias.
- Crea un alias memorable (p. ej.,
mi-startup-prodopersonal-aws). - El alias permite una URL de login más amigable:
https://<alias>.signin.aws.amazon.com.
A partir de ahora, NUNCA uses el Root User para trabajo diario.
Paso 2 – Crear un Usuario IAM
- En la consola, busca IAM → Users → Create user.
- Configura:
- User name:
juan-admin(o el nombre que prefieras). - Access type: marca Provide user access to the AWS Management Console.
- Console password: elige Custom password (fuerte) o Auto‑generated.
- Desmarca “Users must create a new password at next sign‑in” (para simplificar el tutorial).
- User name:
- Asignar permisos:
- En Attach policies directly, busca y marca AdministratorAccess (para aprendizaje).
- Para producción, asigna permisos más granulares (p. ej.,
AmazonS3FullAccess,AWSLambdaFullAccess, etc.).
- Haz clic en Next → Create user.
- Descarga el archivo CSV con las credenciales y guárdalo en un gestor de contraseñas (1Password, Bitwarden, etc.).
- Configura MFA para el nuevo usuario IAM siguiendo el mismo proceso que para el Root User (sección “Multi‑factor authentication (MFA)”).
- Cierra sesión del Root User y vuelve a iniciar sesión con el alias de cuenta y el nuevo IAM User.
Paso 3 – Configurar Alertas de Facturación
- Con sesión Root, ve a Account → Billing preferences → Edit.
- Activa:
- Receive Free Tier Usage Alerts
- Receive Billing Alerts
- Introduce tu email y guarda los cambios.
- Con el IAM User, abre AWS Budgets (o Billing → Budgets) → Create budget.
- Template: Zero spend budget (recomendado).
- Budget name:
Alerta-Costo-Minimo - Period: Monthly
- Budgeted amount:
0.01 USD - Scope: All AWS services
- Configura alertas:
- Alert 1 – Costo Real: Threshold
Actual costs – 100%(cuando alcances $0.01). - Alert 2 – Pronóstico (opcional): Threshold
Forecasted costs – 80%.
- Alert 1 – Costo Real: Threshold
- Añade tu email a cada alerta. AWS enviará notificaciones cuando estés cerca de superar los límites del Free Tier o cuando los superes.
Paso 4 – Instalar AWS CLI
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 el instalador MSI.
- Ejecuta el instalador.
Verificar la instalación
aws --version
# Expected output: aws-cli/2.x.x Python/3.x.x ...
Nota: Instala la CLI solo para tu IAM User, nunca para el Root.
Paso 5 – Blindar tu Repositorio
5.1 Crear Access Key para la CLI
- En la consola AWS (IAM User) → Users → tu usuario → Security credentials.
- En Access keys, haz clic en Create access key.
- Marca “I understand…” → Next y (opcional) añade una descripción (
CLI-Local-DevMachine). - Descarga el CSV (solo se muestra una vez).
5.2 Configurar el perfil de la CLI
aws configure --profile mi-proyecto
Introduce los valores del CSV:
- AWS Access Key ID
- AWS Secret Access Key
- Default region name (p. ej.,
us-east-1) - Default output format (
jsono dejar vacío)
Los archivos se guardan en:
- macOS/Linux:
~/.aws/credentialsy~/.aws/config - Windows:
C:\Users\<user>\.aws\credentials
5.3 Variable de entorno para el perfil
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
PowerShell
[System.Environment]::SetEnvironmentVariable('AWS_PROFILE', 'mi-proyecto', 'User')
Verificar la identidad
aws sts get-caller-identity
Salida esperada:
{
"UserId": "AIDAXXXXXXXXXX",
"Account": "123456789012",
"Arn": "arn:aws:iam::123456789012:user/juan-admin"
}
- Arn contiene
:user/→ todo correcto. - Arn contiene
:root→ estás usando el Root (MAL).
5.4 .gitignore (crítico)
En la raíz del proyecto crea un archivo .gitignore con el siguiente contenido mínimo:
# === 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
*~
Ejecuta git status y verifica que no aparezcan archivos como .tfstate, .env, .pem, .key o el directorio .terraform/.
5.5 Pre‑commit Hook (opcional pero recomendado)
Instala pre-commit:
# macOS
brew install pre-commit
# Linux / Windows
pip install pre-commit
Crea el archivo .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
Activa el hook:
pre-commit install
Verificación Final
- Root User tiene MFA activado.
- Root User NO se usa para trabajo diario.
- IAM User creado con permisos
AdministratorAccess(para aprendizaje). - IAM User tiene MFA activado.
- Alertas de facturación configuradas y probadas.
- AWS CLI configurada con perfil seguro.
-
.gitignoreprotege todos los archivos sensibles. - (Opcional) Pre‑commit hooks activos.
Recursos Adicionales
- Documentación oficial de AWS IAM
- Guía de MFA en AWS
- AWS Budgets
- AWS CLI Reference
- Pre‑commit hooks for Terraform