AWS Certified Cloud Practitioner

Post 7 of 25

28%

Complete

Cloud Architecture13 min read

AWS Cloud Practitioner #7: Amazon S3 - Almacenamiento Ilimitado en la Nube

Domina S3: storage classes (Standard, IA, Glacier), versioning, lifecycle policies, security, y aprende a optimizar costos de almacenamiento.

🎯 Lo que Aprenderás Hoy

Al finalizar este post, podrás:

  • Explicar qué es Amazon S3 y sus características clave
  • Diferenciar entre storage classes (Standard, IA, Glacier, Deep Archive)
  • Implementar versioning, lifecycle policies y replication
  • Configurar security y encryption
  • Optimizar costos de almacenamiento

El Problema Real

Tu startup tiene una app de fotos. Los usuarios suben millones de imágenes.

Desafíos:

plaintext
1. Almacenamiento:
   On-premise: Comprar servers con discos
   Costo: $10,000 inicial + $500/mes
   Límite: 10 TB (cuando se llena, comprar más)
 
2. Escalamiento:
   App crece de 10 TB → 100 TB en 6 meses
   On-premise: Comprar más hardware ($50,000+)
   Tiempo: 2-3 semanas
 
3. Disponibilidad:
   Si disco falla → data loss
   Necesitas RAID, backups, etc.
 
4. Acceso:
   Users en todo el mundo
   Latencia alta desde regiones lejanas

Solución: Amazon S3

plaintext
✅ Almacenamiento ilimitado
✅ Pagas solo por lo que usas ($0.023/GB/mes)
✅ 99.999999999% (11 nines) durability
✅ Escalamiento automático
✅ Distribución global
✅ No mantenimiento de hardware

¿Qué es Amazon S3?

Amazon S3 (Simple Storage Service) es un servicio de object storage que te permite almacenar cantidades ilimitadas de datos.

Info

Analogía: S3 es como Google Drive/Dropbox pero:

  • Ilimitado (no hay plan de 2TB o 10TB)
  • API-first (diseñado para apps, no solo humanos)
  • Infinitamente escalable
  • Pagas solo por GB usado

Conceptos Fundamentales

1. Objects (Objetos)

Un object es un archivo y su metadata.

plaintext
Object components:
- Key: Nombre único (path) del objeto
- Value: El contenido (data) del archivo
- Metadata: Info sobre el objeto (content-type, last-modified, etc.)
- Version ID: Si versioning está habilitado
- Access Control: Permisos
 
Ejemplo:
Key: photos/2025/vacation/beach.jpg
Value: [binary data de la imagen]
Metadata: {
  "Content-Type": "image/jpeg",
  "Content-Length": "524288",
  "Last-Modified": "2025-11-16T10:00:00Z"
}

Size limits:

  • Mínimo: 0 bytes
  • Máximo: 5 TB por objeto

2. Buckets

Un bucket es un contenedor para objects.

plaintext
Bucket characteristics:
- Nombre globalmente único (en todo AWS)
- Creado en una región específica
- Puede contener objetos ilimitados
- No hay folders (solo prefixes que simulan folders)
 
Ejemplo:
Bucket name: mi-app-fotos-prod-us-east-1
Region: us-east-1
 
Objects dentro:
s3://mi-app-fotos-prod-us-east-1/users/123/profile.jpg
s3://mi-app-fotos-prod-us-east-1/users/123/photos/vacation.jpg
s3://mi-app-fotos-prod-us-east-1/public/logo.png

3. Keys (Paths)

El key es el path completo del objeto.

plaintext
NO hay folders reales en S3, solo prefixes:
 
Key: users/123/photos/vacation.jpg
     ─────┬────  ──┬──  ─────┬─────
       prefix  prefix  filename
 
En S3 Console se VE como folders, pero son prefixes

Storage Classes (Clases de Almacenamiento)

S3 tiene diferentes storage classes para optimizar costos basados en frecuencia de acceso.

1. S3 Standard

¿Qué es? Storage para datos accedidos frecuentemente.

plaintext
Características:
✅ Low latency, high throughput
✅ 99.99% availability (SLA)
✅ 11 nines (99.999999999%) durability
✅ Almacenado en ≥3 AZs
 
Pricing:
Storage: $0.023/GB/mes
Requests: $0.0004 per 1,000 GET
          $0.005 per 1,000 PUT

¿Cuándo usar?

plaintext
✅ Datos accedidos frecuentemente
✅ Aplicaciones que requieren baja latencia
✅ Contenido dinámico (user uploads)
✅ Analytics en tiempo real
 
Ejemplo:
- Imágenes de perfil de usuarios activos
- Logs de la última semana
- Assets de aplicación web (JS, CSS)

2. S3 Intelligent-Tiering

¿Qué es? Mueve automáticamente objetos entre tiers basado en patrones de acceso.

plaintext
Tiers automáticos:
- Frequent Access: Para objetos accedidos regularmente
- Infrequent Access: No accedidos por 30 días
- Archive Instant Access: No accedidos por 90 días
- Archive Access: No accedidos por 90-180 días
- Deep Archive Access: No accedidos por 180-730 días
 
Pricing:
Storage: Similar a Standard
Monitoring fee: $0.0025 per 1,000 objects/mes
Sin retrieval fees entre tiers

¿Cuándo usar?

plaintext
✅ Patrones de acceso impredecibles
✅ Quieres optimización automática sin gestión manual
✅ Data sets grandes con acceso variable
 
Ejemplo:
- Machine learning datasets (a veces accedidos, a veces no)
- Archivos de proyectos completados (uso esporádico)

3. S3 Standard-IA (Infrequent Access)

¿Qué es? Para datos accedidos pocas veces, pero que requieren acceso rápido cuando se necesitan.

plaintext
Características:
✅ Same latency as Standard
✅ Lower storage cost
❌ Retrieval fee por GB accedido
✅ Almacenado en ≥3 AZs
❌ Minimum storage duration: 30 días
 
Pricing:
Storage: $0.0125/GB/mes (46% cheaper que Standard)
Retrieval: $0.01/GB
Requests: $0.001 per 1,000 GET

¿Cuándo usar?

plaintext
✅ Datos accedidos < 1 vez/mes
✅ Backups
✅ Disaster recovery
✅ Data que debe estar disponible rápidamente si se necesita
 
Ejemplo:
- Backups semanales (raramente restaurados)
- Imágenes de usuarios inactivos
- Archivos de auditoría (raramente consultados)
 
❌ NO usar para:
- Datos accedidos frecuentemente (usa Standard)
- Archivos muy pequeños (min 128KB para ser cost-effective)

4. S3 One Zone-IA

¿Qué es? Como Standard-IA pero almacenado en solo 1 AZ (menor disponibilidad, menor costo).

plaintext
Características:
✅ Same latency as Standard
✅ Even lower cost que Standard-IA
❌ Solo 1 AZ (si AZ falla, pierdes data)
✅ 99.5% availability (vs. 99.9% de Standard)
 
Pricing:
Storage: $0.01/GB/mes (56% cheaper que Standard)
Retrieval: $0.01/GB

¿Cuándo usar?

plaintext
✅ Data que puedes recrear fácilmente
✅ Backups secundarios
✅ Thumbnails (puedes regenerar desde original)
 
Ejemplo:
- Thumbnails de imágenes (puedes recrear desde full-size)
- Data procesada que puede re-generarse
- Backups no críticos
 
❌ NO usar para:
- Data crítica
- Compliance data
- Única copia de información importante

5. S3 Glacier Instant Retrieval

¿Qué es? Para archivos accedidos muy raramente (trimestral), con acceso instantáneo cuando se necesitan.

plaintext
Características:
✅ Same latency as Standard (milliseconds)
✅ Muy bajo costo de storage
❌ Higher retrieval cost
❌ Minimum storage duration: 90 días
 
Pricing:
Storage: $0.004/GB/mes (83% cheaper que Standard)
Retrieval: $0.03/GB

¿Cuándo usar?

plaintext
✅ Archivos médicos/financieros (compliance requiere mantener, rara vez accedidos)
✅ Backups anuales
✅ Data de compliance de 7+ años
 
Ejemplo:
- Registros médicos (deben guardarse 10 años, raramente accedidos)
- Tax records (deben guardarse 7 años)

6. S3 Glacier Flexible Retrieval

¿Qué es? Para archivos raramente accedidos, con retrieval en minutos u horas.

plaintext
Características:
❌ NO acceso instantáneo
✅ Retrieval en: 1-5 minutos (Expedited), 3-5 horas (Standard), 5-12 horas (Bulk)
✅ Muy bajo costo de storage
❌ Minimum storage duration: 90 días
 
Pricing:
Storage: $0.0036/GB/mes (84% cheaper que Standard)
Retrieval:
  - Expedited: $0.03/GB + $0.01 per request
  - Standard: $0.01/GB + $0.05 per 1,000 requests
  - Bulk: $0.0025/GB + $0.025 per 1,000 requests

¿Cuándo usar?

plaintext
✅ Archivos que NO necesitas inmediatamente
✅ Backups de long-term
✅ Digital preservation
 
Ejemplo:
- Backups de databases de hace >1 año
- Video archives (raramente accedidos)
- Scientific data preservation

7. S3 Glacier Deep Archive

¿Qué es? El storage más barato, para datos accedidos extremadamente raramente.

plaintext
Características:
❌ Retrieval en 12-48 horas
✅ Costo de storage MÍN MO
❌ Minimum storage duration: 180 días
 
Pricing:
Storage: $0.00099/GB/mes (96% cheaper que Standard)
Retrieval:
  - Standard: $0.02/GB (12 horas)
  - Bulk: $0.0025/GB (48 horas)

¿Cuándo usar?

plaintext
✅ Data que debe guardarse por regulación
✅ Archivos accedidos < 1 vez/año
✅ Reemplazo de magnetic tape archives
 
Ejemplo:
- Registros financieros de 10+ años
- Compliance archives (legal requirement)
- Data histórica para disaster recovery extremo
 
Caso real:
Una empresa debe guardar emails por 7 años por compliance:
- Año 1: S3 Standard-IA
- Año 2-3: Glacier Instant Retrieval
- Año 4-7: Glacier Deep Archive
Ahorro: 95% vs. mantener todo en Standard

Comparación Visual de Storage Classes

ClassLatencyMin DurationDurabilityAZsCost/GB/mesUso
StandardmsNo11 nines≥3$0.023Frequent access
Intelligent-TieringmsNo11 nines≥3$0.023*Unknown pattern
Standard-IAms30d11 nines≥3$0.0125Infrequent + fast
One Zone-IAms30d11 nines1$0.01Recreatable data
Glacier Instantms90d11 nines≥3$0.004Archive + instant
Glacier Flexiblemin-hrs90d11 nines≥3$0.0036Archive + planned
Glacier Deep12-48h180d11 nines≥3$0.00099Long-term archive

*Plus monitoring fee


Lifecycle Policies

¿Qué son? Reglas automáticas para mover o eliminar objetos basado en edad.

plaintext
Ejemplo de política:
 
Rule 1: Archivos en /logs/
- Después de 30 días → mover a Standard-IA
- Después de 90 días → mover a Glacier Flexible
- Después de 365 días → DELETE
 
Rule 2: Archivos en /backups/
- Después de 7 días → mover a Standard-IA
- Después de 30 días → mover a Glacier Deep Archive
- Nunca eliminar (compliance)

Configuración

json
{
  "Rules": [
    {
      "Id": "Move logs to archive",
      "Prefix": "logs/",
      "Status": "Enabled",
      "Transitions": [
        {
          "Days": 30,
          "StorageClass": "STANDARD_IA"
        },
        {
          "Days": 90,
          "StorageClass": "GLACIER"
        }
      ],
      "Expiration": {
        "Days": 365
      }
    }
  ]
}
bash
# Aplicar lifecycle policy
aws s3api put-bucket-lifecycle-configuration \
  --bucket mi-bucket \
  --lifecycle-configuration file://lifecycle.json

Beneficio:

plaintext
Sin lifecycle policy:
1 TB logs en Standard todo el año
Costo: $276/año
 
Con lifecycle policy:
- Primeros 30 días en Standard: $23
- Días 31-90 en Standard-IA: $7.50
- Días 91-365 en Glacier: $27.45
- Total: $57.95/año
Ahorro: $218/año (79%)

Versioning

¿Qué es? Mantiene múltiples versiones de un objeto en el mismo bucket.

plaintext
Sin versioning:
PUT photo.jpg (version 1)
PUT photo.jpg (sobrescribe version 1) ← No puedes recuperar v1
 
Con versioning:
PUT photo.jpg (version 1, ID: abc123)
PUT photo.jpg (version 2, ID: def456)  ← v1 sigue disponible
GET photo.jpg → retorna v2 (latest)
GET photo.jpg?versionId=abc123 → retorna v1

Casos de Uso

1. Protección contra eliminación accidental

bash
# Con versioning, DELETE no elimina, solo marca como deleted
 
DELETE photo.jpg
 Agrega "delete marker" (nueva version)
 Objeto aparece como eliminado
 Pero versiones anteriores siguen existiendo
 
# Recuperar:
aws s3api delete-object \
  --bucket mi-bucket \
  --key photo.jpg \
  --version-id [delete-marker-id]
 
 Objeto reaparece

2. Auditoría de cambios

bash
# Ver todas las versiones
aws s3api list-object-versions \
  --bucket mi-bucket \
  --prefix document.pdf
 
Output:
Version 3 (latest): 2025-11-16 10:00
Version 2: 2025-11-15 14:00
Version 1: 2025-11-10 09:00
 
# Puedes ver qué cambió y cuándo

3. Rollback

bash
# Si subes versión incorrecta, puedes volver a anterior
 
# Promover versión anterior a latest
aws s3api copy-object \
  --bucket mi-bucket \
  --copy-source mi-bucket/file.txt?versionId=abc123 \
  --key file.txt

Costos de Versioning

plaintext
⚠️ Pagas por CADA versión almacenada
 
Ejemplo:
file.txt (1 GB) updated 10 veces en un mes
→ 10 GB almacenados (todas las versiones)
→ Costo: $0.23 (vs. $0.023 sin versioning)
 
Mitigación: Lifecycle policy para borrar old versions
 
{
  "NoncurrentVersionExpiration": {
    "NoncurrentDays": 30
  }
}
 
→ Borra versiones no-current después de 30 días

Replication

¿Qué es? Copia automática de objetos entre buckets.

Cross-Region Replication (CRR)

plaintext
Bucket A (us-east-1) → Bucket B (eu-west-1)
 
Casos de uso:
✅ Compliance (datos deben estar en región específica)
✅ Lower latency (usuarios en Europa acceden a eu-west-1)
✅ Disaster recovery (backup en otra región)
 
Ejemplo:
App con usuarios en US y Europa
- Write to us-east-1
- Auto-replicate to eu-west-1
- Users en EU acceden desde eu-west-1 (menor latency)

Same-Region Replication (SRR)

plaintext
Bucket A (us-east-1) → Bucket B (us-east-1)
 
Casos de uso:
✅ Agregación de logs (múltiples buckets → 1 bucket)
✅ Replicación entre accounts (prod → dev)
✅ Data backup dentro de región
 
Ejemplo:
Múltiples apps escriben logs a sus propios buckets
→ Replica todos a bucket centralizado de analytics

Configuración

json
{
  "Role": "arn:aws:iam::123456789012:role/ReplicationRole",
  "Rules": [
    {
      "Status": "Enabled",
      "Priority": 1,
      "Filter": {
        "Prefix": "documents/"
      },
      "Destination": {
        "Bucket": "arn:aws:s3:::destination-bucket",
        "StorageClass": "STANDARD_IA"
      }
    }
  ]
}

Importante:

plaintext
✅ Versioning DEBE estar habilitado en source y destination
✅ Solo replica objetos NUEVOS (después de habilitar replication)
✅ Para replicar objetos existentes: S3 Batch Replication

Security

1. Bucket Policies

Control de acceso a nivel de bucket.

json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicRead",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::mi-bucket/public/*"
    },
    {
      "Sid": "DenyUnencrypted",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::mi-bucket/*",
      "Condition": {
        "StringNotEquals": {
          "s3:x-amz-server-side-encryption": "AES256"
        }
      }
    }
  ]
}

Casos de uso:

plaintext
✅ Hacer bucket público (website hosting)
✅ Compartir con otra AWS account
✅ Forzar encryption
✅ Restringir por IP

2. ACLs (Access Control Lists)

Control de acceso a nivel de objeto (legacy, usa IAM/Bucket Policies).

3. Block Public Access

Previene buckets públicos accidentales.

bash
# Habilitar Block Public Access (recomendado por defecto)
aws s3api put-public-access-block \
  --bucket mi-bucket \
  --public-access-block-configuration \
    "BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true"
 
Resultado:
 No puedes hacer bucket público
 No puedes agregar ACLs públicas
 No puedes agregar bucket policies públicas
 
 Previene data leaks accidentales

Encryption

1. Encryption at Rest

Server-Side Encryption (SSE):

plaintext
SSE-S3: AWS gestiona keys
- Encryption: AES-256
- AWS rota keys automáticamente
- Costo: $0 (incluido)
 
SSE-KMS: Tú gestionas keys con AWS KMS
- Más control sobre keys
- Auditing de uso de keys (CloudTrail)
- Costo: KMS charges
 
SSE-C: Tú provees las keys
- Tú gestionas keys completamente
- AWS solo usa para encrypt/decrypt
bash
# Habilitar default encryption
aws s3api put-bucket-encryption \
  --bucket mi-bucket \
  --server-side-encryption-configuration '{
    "Rules": [{
      "ApplyServerSideEncryptionByDefault": {
        "SSEAlgorithm": "AES256"
      }
    }]
  }'
 
# Ahora todos los objetos se encriptan automáticamente

Client-Side Encryption:

python
# Encriptas ANTES de subir a S3
from Crypto.Cipher import AES
 
def encrypt_file(file_path):
    cipher = AES.new(key, AES.MODE_EAX)
    ciphertext, tag = cipher.encrypt_and_digest(data)
    return ciphertext
 
# Upload encrypted file
encrypted_data = encrypt_file("sensitive.pdf")
s3.put_object(Bucket='mi-bucket', Key='sensitive.pdf', Body=encrypted_data)
 
# AWS solo ve datos encriptados

2. Encryption in Transit

plaintext
Usa HTTPS/TLS para todas las transferencias:
 
✅ Bucket policy que fuerza HTTPS:
{
  "Effect": "Deny",
  "Principal": "*",
  "Action": "s3:*",
  "Resource": "arn:aws:s3:::mi-bucket/*",
  "Condition": {
    "Bool": {
      "aws:SecureTransport": "false"
    }
  }
}
 
→ Rechaza requests no-HTTPS

📝 Preparación para el Examen

Puntos Clave para Memorizar

Storage Classes:

  • 📌 Standard: Frequent access, low latency
  • 📌 Intelligent-Tiering: Unknown/changing access patterns
  • 📌 Standard-IA: Infrequent access, fast retrieval
  • 📌 One Zone-IA: Infrequent + single AZ + recreatable data
  • 📌 Glacier Instant: Archive + instant retrieval
  • 📌 Glacier Flexible: Archive + 1-5 min to hours retrieval
  • 📌 Glacier Deep Archive: Cheapest, 12-48h retrieval

Características:

  • 📌 Durability: 11 nines (99.999999999%) para todas las classes
  • 📌 Availability: Varía (99.99% Standard, 99.5% One Zone-IA)
  • 📌 Versioning: Protege contra delete accidental
  • 📌 Lifecycle: Automáticamente mueve/elimina objetos por edad
  • 📌 Replication: CRR (cross-region), SRR (same-region)

Security:

  • 📌 Encryption at rest: SSE-S3, SSE-KMS, SSE-C
  • 📌 Encryption in transit: HTTPS/TLS
  • 📌 Block Public Access: Previene buckets públicos accidentales

Preguntas de Práctica

Pregunta 1:

Una empresa necesita guardar logs que:

  • Son accedidos frecuentemente los primeros 30 días
  • Raramente accedidos después
  • Deben mantenerse 1 año por compliance

¿Qué solución es más cost-effective?

A) S3 Standard con manual migration B) S3 Standard-IA C) S3 Standard con lifecycle policy D) S3 Glacier Deep Archive

Success

Respuesta: C) S3 Standard con lifecycle policy

Lifecycle policy automáticamente mueve objetos:

  • 0-30 días: Standard (frequent access)
  • 30-365 días: Standard-IA o Glacier (infrequent access)
  • Después de 365 días: DELETE (compliance cumplido)

Optimiza costos automáticamente sin gestión manual.

Pregunta 2:

¿Qué storage class tiene el menor costo de almacenamiento?

A) S3 Standard-IA B) S3 One Zone-IA C) S3 Glacier Flexible Retrieval D) S3 Glacier Deep Archive

Success

Respuesta: D) S3 Glacier Deep Archive

$0.00099/GB/mes es el más barato. Trade-off: retrieval toma 12-48 horas.


🎓 Resumen

Lo que aprendimos:

  1. S3: Object storage ilimitado, 11 nines durability
  2. Storage Classes: 7 opciones desde frequent (Standard) a archive (Deep Archive)
  3. Lifecycle: Automatiza transitions entre classes y deletions
  4. Versioning: Protege contra deletes accidentales, mantiene history
  5. Replication: CRR (cross-region) y SRR (same-region)
  6. Security: Bucket policies, encryption at rest/transit, Block Public Access

Decisión de Storage Class:

plaintext
¿Frecuencia de acceso?
├─ Diario/semanal → Standard
├─ Mensual → Standard-IA
├─ Trimestral + instant retrieval → Glacier Instant
├─ Anual + planned retrieval → Glacier Flexible
└─ Compliance/archival → Glacier Deep Archive
 
¿Patrón de acceso desconocido?
└─ Intelligent-Tiering
 
¿Data recreatable + cost-sensitive?
└─ One Zone-IA

⏭️ Próximo Post

En el Post #8 exploraremos Amazon RDS y Database Services:

  • Databases relacionales gestionadas
  • RDS vs. EC2 + DB manual
  • Multi-AZ, Read Replicas
  • Aurora y otros database services

📚 Recursos


Tags: #AWS #CloudPractitioner #S3 #Storage #DataManagement #Lifecycle #Certification

Written by Jhonny Lorenzo

Researcher at TrautsLab

Related Articles

Recent Articles

Comments