Cuando hablamos de seguridad en la nube, el cifrado de datos es uno de los pilares más importantes. Protege la confidencialidad y la integridad de tu información tanto cuando está almacenada (en reposo) como cuando se mueve entre servicios o usuarios (en tránsito). AWS ofrece un conjunto robusto de servicios y características para implementar cifrado de manera efectiva, siendo el AWS Key Management Service (KMS) el corazón de la gestión de claves.
En este artículo desglosamos cómo funciona el cifrado en AWS, cuándo usar cada tipo de clave y cómo configurar correctamente el cifrado en servicios de almacenamiento y bases de datos como S3, RDS y EBS. También incluimos mejores prácticas y ejemplos de comandos CLI y políticas que puedes aplicar hoy.
Conceptos básicos: cifrado en reposo vs. en tránsito
- Cifrado en reposo (at-rest): protege los datos mientras están almacenados en discos, SSD, o cualquier medio de almacenamiento persistente.
- Cifrado en tránsito (in-transit): protege los datos mientras se mueven entre componentes (por ejemplo, entre tu aplicación y una base de datos, o entre nodos de un cluster).
Idealmente, deberías aplicar ambos tipos de cifrado para lograr defensa en profundidad. AWS permite habilitar ambos en la mayoría de sus servicios.
AWS KMS: el centro de gestión de claves
KMS te permite crear, controlar y rotar claves criptográficas utilizadas para cifrar tus datos. Ofrece:
- Claves administradas por AWS (aws/s3, aws/ebs, etc.) – opciones predefinidas y rotación automática.
- Claves administradas por el cliente (CMKs) – control total sobre política de uso, rotación y permisos.
- Integración con IAM para definir quién puede usar o administrar cada clave.
- Registro de uso en CloudTrail para auditoría.
- Uso simétrico y asimétrico (para firmas y cifrado fuera de AWS).
Cuando habilitas el cifrado en un servicio de AWS, generalmente seleccionas una CMK (o usas la predeterminada de AWS) y el servicio se encarga de usar esa clave para cifrar los datos de forma transparente.
Cifrado en S3 (Simple Storage Service)
Amazon S3 ofrece varias opciones de cifrado en reposo:
- SSE‑S3: Amazon gestiona las claves (AES‑256). No necesitas administrar nada, pero no tienes control de rotación ni políticas.
- SSE‑KMS: Usa una CMK de KMS (puede ser administrada por AWS o por ti). Permite control total, auditoría y rotación de claves.
- SSE‑C: Tú proporcionas la clave en cada solicitud (menos común, requiere gestión propia de claves).
Para cifrado en tránsito, S3 solo acepta conexiones HTTPS (TLS 1.2+).
Ejemplo: crear un bucket S3 con cifrado SSE‑KMS y una CMK personalizada
# 1. Crear una CMK en KMS (opcional: puedes usar la aws/s3) aws kms create-key --description "CMK para bucket de datos sensibles" --region us-east-1 # Supongamos que el ID de la clave es: 1111aaaa-bbbb-cccc-dddd-eeeeffff1111 # 2. Crear el bucket y aplicar cifrado SSE‑KMS con esa CMK aws s3api create-bucket --bucket mi-bucket-seguro --region us-east-1 --create-bucket-configuration LocationConstraint=us-east-1 aws s3api put-bucket-encryption --bucket mi-bucket-seguro --server-side-encryption-configuration '{ "Rules": [ { "ApplyServerSideEncryptionByDefault": { "SSEAlgorithm": "aws:kms", "KMSMasterKeyID": "1111aaaa-bbbb-cccc-dddd-eeeeffff1111" } } ] }' # 3. (Opcional) Bloquear acceso público y habilitar versionamiento aws s3api put-public-access-block --bucket mi-bucket-seguro --public-access-block-configuration "BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true" aws s3api put-bucket-versioning --bucket mi-bucket-seguro --versioning-configuration Status=EnabledCifrado en RDS y Aurora
Amazon RDS y Aurora soportan cifrado en reposo usando KMS y cifrado en tránsito usando SSL/TLS.
Cifrado en reposo
Al crear una instancia de RDS, puedes habilitar el cifrado y especificar una CMK. Una vez creado, no puedes desactivar el cifrado ni cambiar la CMK (tienes que crear una nueva instancia y migrar los datos).
Ejemplo: crear una instancia RDS cifrada con KMS
aws rds create-db-instance \ --db-instance-id mi-base-segura \ --db-instance-class db.t4g.micro \ --engine mysql \ --master-user-admin usuarioadmin \ --master-user-password Claud3s3cr3t4! \ --allocated-storage 20 \ --storage-encrypted \ --kms-key-id 1111aaaa-bbbb-cccc-dddd-eeeeffff1111 \ --backup-retention-period 7 \ --region us-east-1Para cifrado en tránsito, debes configurar tu aplicación o cliente para usar SSL al conectarse a la instancia. La mayoría de los drivers y conectores lo hacen por defecto, pero verifica que el parámetro
require_sslesté activado o que la cadena de conexión incluyasslmode=require(PostgreSQL) o equivalente.Cifrado en EBS (Elastic Block Store)
Los volúmenes EBS pueden crearse cifrados usando una CMK de KMS. El cifrado es transparente para el sistema operativo y las aplicaciones.
Ejemplo: crear un volumen EBS cifrado
aws ec2 create-volume \ --availability-zone us-east-1a \ --size 100 \ --volume-type gp3 \ --encrypted \ --kms-key-id 1111aaaa-bbbb-cccc-dddd-eeeeffff1111Si estás lanzando una instancia EC2 y quieres que su volumen raíz esté cifrado, debes especificar la en la plantilla de lanzamiento (launch template) o en la configuración de la instancia.
Mejores prácticas de gestión de claves en KMS
- Usa CMKs administradas por el cliente para cargas de trabajo sensibles; así controlas la rotación, políticas y auditoría.
- Habilita la rotación automática de claves cada año (o según tus requisitos de cumplimiento).
- Aplica políticas de clave mínimas (principio de menor privilegio) usando condiciones en la política de la clave (por ejemplo, limitar el uso a ciertos roles o servicios).
- Utiliza alias para facilitar la rotación de claves sin cambiar el código de tu aplicación.
- Monitorea el uso de KMS con CloudTrail y crea alarmas en CloudWatch para operaciones inusuales (por ejemplo, intentos de deshabilitar una clave).
- Never disable or delete a CMK that is still in use; programa su eliminación con una ventana de espera (por ejemplo, 30 días) para poder recuperarla si es necesario.
⚠️ AtenciónSi usamos la clave predeterminada de AWS (aws/s3, aws/ebs, etc.), no podemos administrar su rotación ni políticas. Para cargas de trabajo que requieren cumplimiento (PCI, HIPAA, etc.) es casi siempre necesario usar CMKs propias.Resultado esperado: lista de verificación de cifrado
Antes de lanzar cualquier recurso de almacenamiento o base de datos, verifica:
- ¿El servicio soporta cifrado en reposo? Si sí, ¿está habilitado?
- ¿Estás usando una CMK adecuada (administrada por el cliente si necesitas control)?
- ¿La política de la clave permite solo los usos necesarios (encriptar/desencriptar por ciertos roles o servicios)?
- ¿El cifrado en tránsito está forzado (HTTPS/TLS)?
- ¿Has habilitado registro y auditoría (CloudTrail) para operaciones de KMS?
- ¿Tienes un plan de rotación de claves y de recuperación ante pérdida de acceso?
Bloque de código: listar y verificar claves KMS
# Listar las CMKs en tu cuenta (alias y descripción) aws kms list-aliases --query 'Aliases[?AliasName!==`alias/aws/*`].{Name:AliasName, TargetKey:AliasName, TargetKey:TargetKeyId}' --output table # Ver detalles de una CMK específica (por alias) aws kms describe-key --key-id alias/mi-clave-s3 --query 'KeyDescription' --output text✅ ResultadoEl resultado esperado o un tip extra.Conclusión
El cifrado no es una característica opcional en la nube; es una responsabilidad esencial para proteger la confidencialidad y cumplir con normas de seguridad. Al comprender cómo funciona KMS y aplicar correctamente las opciones de cifrado en S3, RDS, EBS y otros servicios, construyes una base sólida para la protección de tus datos en AWS.
Recuerda: la seguridad es un proceso continuo. Revisa periódicamente tus configuraciones de cifrado, rota tus claves y auditoriza el uso de KMS para mantenerte un paso adelante de las amenazas.