☁️ Guía de servicios en la nube de AWS
Amazon Web Services (AWS) es el principal proveedor de nube de Maxi's Computers. Esta guía cubre los servicios principales utilizados en nuestra infraestructura, desde computación y almacenamiento hasta bases de datos administradas, sin servidor y observabilidad.
IAM y seguridad
La gestión de identidades y accesos (IAM) es la base de la seguridad de AWS. Siga siempre el principio de mínimo privilegio: otorgue sólo los permisos necesarios para la tarea específica.
Nunca use la cuenta raíz La cuenta raíz de AWS nunca debe usarse para las operaciones diarias. Habilite MFA en la cuenta raíz inmediatamente y cree usuarios/roles de IAM para todos los accesos.
"Version": "2012-10-17",
"Statement": [
{
"Sid": "S3ReadOnlyForApp",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::mc-assets-prod",
"arn:aws:s3:::mc-assets-prod/*"
],
"Condition": {
"StringEquals": {
"aws:RequestedRegion": "us-east-1"
}
}
}
]
}aws iam get-caller-identity # Who am I?
aws iam list-users --output table # List all IAM users
aws iam list-attached-role-policies --role-name app-role # View role policies
aws iam simulate-principal-policy \ # Test permissions
--policy-source-arn arn:aws:iam::123456789:role/app-role \
--action-names s3:GetObject \
--resource-arns "arn:aws:s3:::mc-assets-prod/*"Computar (EC2)
aws ec2 describe-instances \
--filters "Name=tag:Environment,Values=production" \
--query "Reservations[*].Instances[*].[InstanceId,InstanceType,State.Name,PublicIpAddress]" \
--output table
# Launch an instance with user data
aws ec2 run-instances \
--image-id ami-0c55b159cbfafe1f0 \
--instance-type m6i.xlarge \
--key-name mc-prod-key \
--security-group-ids sg-0123456789abcdef0 \
--subnet-id subnet-0123456789abcdef0 \
--iam-instance-profile Name=app-instance-profile \
--user-data file://user-data.sh \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Environment,Value=production},{Key=ManagedBy,Value=terraform}]'
# Systems Manager Session Manager (no SSH keys needed)
aws ssm start-session --target i-0123456789abcdef0Almacenamiento (S3)
aws s3 ls s3://mc-assets-prod/ --recursive --human-readable
aws s3 cp dist/ s3://mc-assets-prod/ --recursive --cache-control "max-age=31536000"
aws s3 sync dist/ s3://mc-assets-prod/ --delete --exclude ".git/*"
# Presigned URL (temporary access — 1 hour)
aws s3 presign s3://mc-assets-prod/private/report.pdf --expires-in 3600
# Enable versioning on bucket
aws s3api put-bucket-versioning \
--bucket mc-assets-prod \
--versioning-configuration Status=Enabled
# Lifecycle rule — transition to Glacier after 90 days
aws s3api put-bucket-lifecycle-configuration \
--bucket mc-logs-prod \
--lifecycle-configuration file://lifecycle.jsonRedes y VPC
Una VPC de producción en Maxi's Computers sigue una arquitectura multi-AZ con subredes públicas, privadas y de datos, una puerta de enlace NAT por AZ y una puerta de enlace de tránsito para conectividad de múltiples cuentas.
- Subredes públicas: ALB, puertas de enlace NAT, hosts bastión. Tiene ruta a Internet Gateway.
- Subredes privadas: servidores de aplicaciones, nodos trabajadores de EKS. Salida a través de NAT Gateway.
- Subredes de datos: instancias RDS, ElastiCache. No hay ruta de internet alguna.
- Grupos de seguridad: firewalls con estado a nivel de instancia. Negar siempre el valor predeterminado.
- NACL: controles a nivel de subred sin estado. Úselo como capa de defensa adicional.
- Registros de flujo de VPC: habilítelo en todas las VPC y envíelo a CloudWatch o S3 para realizar una auditoría de seguridad.
Bases de datos (RDS)
aws rds create-db-snapshot \
--db-instance-identifier mc-prod-postgres \
--db-snapshot-identifier mc-prod-postgres-$(date +%Y%m%d)
# List snapshots
aws rds describe-db-snapshots \
--db-instance-identifier mc-prod-postgres \
--query "DBSnapshots[*].[DBSnapshotIdentifier,SnapshotCreateTime,Status]" \
--output table
# Restore to point-in-time
aws rds restore-db-instance-to-point-in-time \
--source-db-instance-identifier mc-prod-postgres \
--target-db-instance-identifier mc-prod-postgres-restore \
--restore-time 2025-05-20T14:00:00ZSin servidor (Lambda)
aws lambda update-function-code \
--function-name mc-image-processor \
--image-uri 123456789.dkr.ecr.us-east-1.amazonaws.com/lambda-functions:2.1.0
# Invoke and capture response
aws lambda invoke \
--function-name mc-image-processor \
--payload '{"bucket":"mc-uploads","key":"image.jpg"}' \
--log-type Tail \
--query "LogResult" \
response.json | base64 -d
# Configure reserved concurrency
aws lambda put-function-concurrency \
--function-name mc-image-processor \
--reserved-concurrent-executions 50Contenedores (EKS / ECS)
## Monitoring & ObservabilityOptimización de costos
- Instancias reservadas/Planes de ahorro: comprométase a plazos de 1 a 3 años para cargas de trabajo estables. Ahorre hasta un 72 % frente a On-Demand.
- Instancias puntuales: se utilizan para trabajos por lotes tolerantes a fallos y trabajadores de CI. Hasta 90% de descuento.
- Auto Scaling: amplía la escala fuera del horario laboral. Programe la reducción gradual para entornos de desarrollo/ensayo durante la noche.
- S3 Intelligent-Tiering: mueva automáticamente los objetos a los que se accede con poca frecuencia a clases de almacenamiento más económicas.
- Detección de anomalías de costos de CloudWatch: reciba alertas cuando se produzca un gasto inesperado.
- AWS Compute Optimizer: revise mensualmente las recomendaciones de tamaño adecuado para EC2, RDS y Lambda.
- Eliminar volúmenes de EBS no adjuntos: los volúmenes huérfanos son una fuente común de gasto desperdiciado.