Día 18: Seguridad en S3: Políticas de Bucket y ACLs
🚀 Día 18: ¡Cierra los candados! Protege tus datos en Amazon S3
Ayer aprendimos a ahorrar dinero, pero de nada sirve si tus datos están expuestos. S3 es famoso por filtraciones accidentales debido a malas configuraciones. Hoy aprenderás a usar las Bucket Policies y el Bloqueo de Acceso Público para controlar exactamente quién puede entrar en tus buckets.
¿Cómo se controla el acceso en S3?
- Block Public Access (El seguro maestro): Es la configuración que bloquea cualquier intento de hacer el bucket público, incluso si alguien comete un error en los permisos.
- Bucket Policies (Recomendado): Políticas basadas en JSON que definen quién puede hacer qué. Son potentes y centralizadas.
- Ownership Controls: Permite desactivar las antiguas ACLs para que solo las políticas de bucket manden sobre la seguridad.
🛠️ El Código (CloudFormation)
Vamos a crear un Bucket que implementa “defensa en profundidad”: bloqueamos todo acceso público a nivel de infraestructura y añadimos una política que obliga a usar conexiones seguras (HTTPS).
1. El Bucket Seguro y su Política
MiBucketSeguro:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub "bucket-seguro-${AWS::AccountId}"
# 1. SEGURO MAESTRO: Bloqueo de acceso público total
PublicAccessBlockConfiguration:
BlockPublicAcls: true
BlockPublicPolicy: true
IgnorePublicAcls: true
RestrictPublicBuckets: true
# 2. MEJOR PRÁCTICA: Desactivar ACLs para usar solo Políticas
OwnershipControls:
Rules:
- ObjectOwnership: BucketOwnerEnforced
# 3. POLÍTICA DE BUCKET: Control de acceso fino
PoliticaDeAccesoS3:
Type: AWS::S3::BucketPolicy
Properties:
Bucket: !Ref MiBucketSeguro
PolicyDocument:
Version: "2012-10-17"
Statement:
# Denegar cualquier conexión que no use HTTPS
- Sid: "EnforceHTTPS"
Effect: Deny
Principal: "*"
Action: "s3:*"
Resource:
- !Sub "arn:aws:s3:::${MiBucketSeguro}"
- !Sub "arn:aws:s3:::${MiBucketSeguro}/*"
Condition:
Bool:
"aws:SecureTransport": "false"
📚 Conceptos Nuevos Explicados
1. PublicAccessBlockConfiguration
Es la muralla principal. Aunque intentes crear una política que permita el acceso a todo internet, si estos valores están en true, AWS ignorará ese permiso para protegerte de filtraciones de datos.
2. Bucket Policy (JSON)
Es el documento que vive en el bucket. El campo Condition con aws:SecureTransport es vital: asegura que los datos viajen siempre cifrados entre tu computadora y los servidores de AWS.
3. BucketOwnerEnforced
Al activar esto, las ACLs (permisos individuales por archivo) dejan de funcionar. Esto es genial porque centraliza todo el control en un solo lugar: tu Política de Bucket.
🚀 Cómo Desplegarlo
Ejecuta el despliegue de tu infraestructura segura:
aws cloudformation deploy \
--stack-name S3-Seguridad-D18 \
--template-file 26-s3-bucket-policy.yaml
📈 Cómo probar la seguridad
- Ve a la consola de S3 → Entra en tu bucket → pestaña Permissions.
- Verifica que el recuadro “Block all public access” esté en On.
- Revisa la sección Bucket Policy y observa cómo AWS resalta en rojo los permisos de “Deny” para asegurar que la regla de HTTPS esté activa.
📂 Código Adjunto
Puedes ver el template completo con la muralla de seguridad aquí: Ver archivo en GitHub
🎥 Video Tutorial
Mira el proceso paso a paso en video:
💡 Próximos pasos
- Día 19: Versionamiento y Ciclo de Vida: Aprende a proteger tus archivos contra borrados accidentales y a automatizar su limpieza.