💾

Almacenamiento - S3, EBS, EFS

S3, EBS, EFS y Storage Gateway

⏱️ Tiempo estimado de lectura: 25 minutos

Amazon S3 - Simple Storage Service

S3 es un servicio de almacenamiento de objetos que ofrece escalabilidad, disponibilidad de datos, seguridad y rendimiento.

Conceptos clave:
- Bucket: Contenedor de objetos con nombre globalmente único
- Object: Archivo almacenado (hasta 5TB por objeto)
- Key: Nombre único del objeto dentro del bucket
- Regiones: Los buckets se crean en una región específica

Características:
- Durabilidad del 99.999999999% (11 nueves)
- Disponibilidad del 99.99% (Standard)
- Versionado de objetos
- Cifrado en reposo y en tránsito
- Control de acceso granular

Puntos Clave

  • S3 es un almacén de objetos, no sistema de archivos
  • Nombres de bucket deben ser únicos globalmente
  • Objetos grandes usan multipart upload (>100MB recomendado)
  • Strong read-after-write consistency desde dic 2020
  • S3 no tiene límite de almacenamiento total

💻 Operaciones básicas en S3

# Crear bucket
aws s3 mb s3://mi-bucket-unico-12345

# Subir archivo
aws s3 cp archivo.txt s3://mi-bucket-unico-12345/

# Listar objetos
aws s3 ls s3://mi-bucket-unico-12345/

# Sincronizar directorio
aws s3 sync ./mi-carpeta s3://mi-bucket-unico-12345/carpeta/

# Habilitar versionado
aws s3api put-bucket-versioning \n  --bucket mi-bucket-unico-12345 \n  --versioning-configuration Status=Enabled

Clases de Almacenamiento S3

S3 ofrece diferentes clases de almacenamiento para optimizar costos según patrones de acceso:

S3 Standard:
- Uso general, acceso frecuente
- Baja latencia, alto throughput
- Durabilidad 11 nueves, disponibilidad 99.99%

S3 Intelligent-Tiering:
- Mueve automáticamente objetos entre tiers según acceso
- Sin cargos de recuperación, pequeña cuota de monitoreo
- 4 tiers: Frequent, Infrequent, Archive, Deep Archive

S3 Standard-IA (Infrequent Access):
- Acceso menos frecuente pero rápido cuando se necesita
- Menor costo de almacenamiento, cargo por recuperación
- Min 30 días, min 128KB por objeto

S3 One Zone-IA:
- Como Standard-IA pero en una sola AZ
- 20% más barato que Standard-IA
- Disponibilidad 99.5%

S3 Glacier:
- Archivo a largo plazo, minutos a horas de recuperación
- Retrieval: Expedited (1-5 min), Standard (3-5 hrs), Bulk (5-12 hrs)

S3 Glacier Deep Archive:
- Almacenamiento más económico
- Recuperación: Standard (12 hrs), Bulk (48 hrs)
- Min 180 días de retención

Puntos Clave

  • Lifecycle policies automatizan transiciones entre clases
  • Standard: acceso frecuente, IA: acceso ocasional, Glacier: archivo
  • Intelligent-Tiering elimina necesidad de lifecycle policies
  • One Zone-IA pierde datos si la AZ falla
  • Glacier tiene cargos por recuperación según velocidad

Seguridad en S3

S3 ofrece múltiples capas de seguridad para proteger tus datos:

Control de acceso:
- IAM Policies: Controlan qué usuarios/roles pueden acceder a S3
- Bucket Policies: Políticas JSON a nivel de bucket (cross-account, público)
- ACLs: Control de acceso legacy (no recomendado)
- S3 Access Points: Simplifican acceso para aplicaciones específicas

Cifrado:
- En reposo (Server-Side):
- SSE-S3: AWS gestiona las claves (AES-256)
- SSE-KMS: AWS KMS gestiona las claves (auditoría, rotación)
- SSE-C: Cliente proporciona las claves
- En tránsito: HTTPS/TLS
- Client-Side: Cliente cifra antes de subir

Características adicionales:
- Versioning: Protege contra borrado accidental
- MFA Delete: Requiere MFA para borrar objetos
- Object Lock: WORM (write-once-read-many), compliance
- Pre-signed URLs: Acceso temporal a objetos privados

Puntos Clave

  • Por defecto todos los buckets y objetos son privados
  • Block Public Access debe estar habilitado (best practice)
  • Bucket policies permiten acceso cross-account
  • SSE-KMS permite auditoría de acceso a claves
  • Pre-signed URLs expiran después del tiempo configurado

💻 Bucket Policy para acceso público de lectura

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::mi-bucket-publico/*"
    }
  ]
}

💻 Configuración de seguridad en S3

# Generar pre-signed URL (válida 1 hora)
aws s3 presign s3://mi-bucket/archivo-privado.pdf --expires-in 3600

# Habilitar cifrado por defecto
aws s3api put-bucket-encryption \n  --bucket mi-bucket \n  --server-side-encryption-configuration '{
    "Rules": [{
      "ApplyServerSideEncryptionByDefault": {
        "SSEAlgorithm": "AES256"
      }
    }]
  }'

Amazon EBS - Elastic Block Store

EBS proporciona volúmenes de almacenamiento en bloque persistente para instancias EC2.

Tipos de volúmenes EBS:

SSD-backed:
- gp3 (General Purpose): Balance precio/rendimiento, 3000 IOPS base, hasta 16000 IOPS
- gp2: Generación anterior, IOPS escala con tamaño (3 IOPS/GB)
- io2 Block Express: Máximo rendimiento, hasta 256,000 IOPS, 99.999% durabilidad
- io1: Generación anterior de alto IOPS, hasta 64,000 IOPS

HDD-backed:
- st1 (Throughput Optimized): Big data, data warehouses, log processing. No boot volume
- sc1 (Cold HDD): Datos accedidos con poca frecuencia. Más económico. No boot volume

Características:
- Limitados a una AZ específica
- Pueden desmontarse y montarse en otra instancia (misma AZ)
- Snapshots permiten copia a otras regiones/AZ
- Cambio de tamaño/tipo en caliente

Puntos Clave

  • gp3 es la recomendación por defecto para la mayoría de workloads
  • io2 para bases de datos con requisitos de IOPS extremos
  • HDD no pueden ser boot volumes
  • EBS Multi-Attach permite hasta 16 instancias Nitro en misma AZ
  • Delete on Termination: root=true, adicionales=false por defecto

Snapshots de EBS

Los snapshots son copias de seguridad incrementales de volúmenes EBS almacenadas en S3.

Características:
- Incrementales: Solo los bloques modificados se copian
- Almacenamiento: S3 (gestionado por AWS, no visible)
- Región: Los snapshots pertenecen a una región, pero pueden copiarse
- Restauración: Puedes crear volúmenes desde snapshots en cualquier AZ de la región

Mejores prácticas:
- No es necesario desmontar el volumen, pero recomendado para consistencia
- Primer snapshot es completo, siguientes son incrementales
- Borrar snapshot solo elimina datos no usados por otros snapshots
- Data Lifecycle Manager (DLM) automatiza creación/retención/borrado

Características avanzadas:
- Fast Snapshot Restore (FSR): Elimina latencia de inicialización
- Snapshot Archive: Tier económico (75% más barato), restauración 24-72 hrs
- Recycle Bin: Recupera snapshots borrados accidentalmente

Puntos Clave

  • Snapshots se pueden copiar entre regiones (DR, migración)
  • Puedes crear AMIs desde snapshots de root volumes
  • FSR tiene costo adicional pero elimina warming period
  • DLM puede crear snapshots automáticos según schedule
  • Recycle Bin retiene snapshots borrados por 1 día a 1 año

💻 Gestión de snapshots EBS

# Crear snapshot
aws ec2 create-snapshot \n  --volume-id vol-0123456789abcdef0 \n  --description "Backup diario DB producción"

# Copiar snapshot a otra región
aws ec2 copy-snapshot \n  --source-region us-east-1 \n  --source-snapshot-id snap-0123456789abcdef0 \n  --region eu-west-1 \n  --description "DR backup en EU"

# Crear volumen desde snapshot
aws ec2 create-volume \n  --snapshot-id snap-0123456789abcdef0 \n  --availability-zone us-east-1a \n  --volume-type gp3

Amazon EFS - Elastic File System

EFS es un sistema de archivos NFS totalmente gestionado y escalable que puede ser montado por múltiples instancias EC2 simultáneamente.

Características:
- Multi-AZ: Los datos se replican automáticamente en múltiples AZ
- Escalado automático: Crece y se reduce automáticamente según uso
- Compatibilidad: Protocolo NFSv4.1, compatible con Linux
- Rendimiento: Dos modos: General Purpose (latencia baja) y Max I/O (alto throughput)
- Throughput: Bursting (escala con tamaño) o Provisioned (fijo)

Clases de almacenamiento:
- Standard: Acceso frecuente, múltiples AZ
- Infrequent Access (IA): Menor costo, cargo por acceso
- One Zone: Datos en una sola AZ (más económico)
- One Zone-IA: Combinación de One Zone + IA (mínimo costo)

Casos de uso:
- Content management y web serving
- Data analytics y procesamiento compartido
- Directorios home compartidos
- Ambientes de desarrollo compartidos

Puntos Clave

  • EFS solo compatible con Linux (no Windows)
  • Más caro que EBS pero ofrece compartición multi-instancia
  • Lifecycle policy mueve archivos a IA automáticamente
  • EFS Access Points simplifican gestión de permisos
  • Encryption at rest con KMS, encryption in transit con TLS

💻 Montar EFS en Linux

# Montar EFS en instancia EC2
sudo mkdir -p /mnt/efs
sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 \n  fs-0123456789abcdef.efs.us-east-1.amazonaws.com:/ /mnt/efs

# Agregar a /etc/fstab para montaje automático
echo "fs-0123456789abcdef.efs.us-east-1.amazonaws.com:/ /mnt/efs nfs4 defaults,_netdev 0 0" \n  | sudo tee -a /etc/fstab