0Pricing
AWS Solutions Architect · Lección

KMS, ACM y patrones de cifrado

Gestione claves de cifrado con AWS KMS, aprovisione y rote certificados TLS con ACM y elija entre cifrado del cliente, del servidor y en tránsito

KMS, ACM y patrones de cifrado es una lección gratuita de AWS Solutions Architect en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de AWS Solutions Architect, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AWS Solutions Architect incluye 4 lecciones en total.

Cifrado en AWS: descripción general

El cifrado es un control de seguridad fundamental que protege la confidencialidad de los datos incluso si el soporte de almacenamiento se ve comprometido o se obtiene acceso por otros medios. AWS proporciona cifrado para los datos en reposo (almacenados en bases de datos, S3 y EBS) y en tránsito (que se desplazan por las redes). Servicios clave: AWS Key Management Service (KMS) gestiona las claves de cifrado para el cifrado en reposo. AWS Certificate Manager (ACM) aprovisiona y gestiona certificados TLS para el cifrado en tránsito. Comprender cuándo y cómo aplicar cada uno es esencial para el dominio de arquitectura de seguridad del examen SAA-C03.

# Encryption coverage on AWS:
# At rest (KMS):
#   S3, EBS, RDS, DynamoDB, EFS, SQS,
#   Lambda env vars, Secrets Manager, SSM Parameter Store

# In transit (ACM/TLS):
#   ALB listeners (HTTPS), API Gateway, CloudFront,
#   Direct Connect, VPN, inter-service communication

# Both:
#   S3 Server-Side Encryption + HTTPS only policy

AWS KMS: Key Management Service

AWS KMS es un servicio totalmente administrado para crear y controlar claves de cifrado. KMS utiliza Hardware Security Modules (HSMs) para proteger las claves; el material de clave nunca sale del HSM sin cifrar. KMS se integra con la mayoría de los servicios de AWS para el cifrado del lado del servidor. Tipos de claves: AWS Managed Keys (gratuitas, rotación automática anual y sin control directo por su parte), Customer Managed Keys (CMK) (1 USD al mes cada una; usted controla la rotación, la política de claves y la eliminación). Custom Key Store utiliza su propio clúster de CloudHSM para requisitos de conformidad que exigen HSM dedicados.

# Create a Customer Managed Key (CMK)
aws kms create-key \
  --description 'Production database encryption key' \
  --key-usage ENCRYPT_DECRYPT \
  --origin AWS_KMS \
  --tags TagKey=Purpose,TagValue=RDS-Encryption

# Create an alias for the key
aws kms create-alias \
  --alias-name alias/prod-db-key \
  --target-key-id arn:aws:kms:us-east-1:123:key/abc-def

# CMK costs: $1/month + $0.03 per 10,000 API calls

Políticas y concesiones de claves de KMS

Cada clave de KMS tiene una key policy, una política basada en recursos que controla quién puede utilizar y administrar la clave. A diferencia de las políticas de IAM, que se basan en identidades, las políticas de claves son obligatorias: la política de claves debe conceder explícitamente el acceso para que las políticas de IAM surtan efecto. Práctica recomendada: separe la administración de claves (quién puede administrar la clave) del uso de claves (qué servicios y roles pueden cifrar o descifrar). Utilice key grants para delegar acceso temporal; por ejemplo, conceda a un clúster de EMR acceso temporal a una clave de KMS para un trabajo sin modificar la política de claves.

# KMS key policy: grant RDS and admin access
{
  'Statement': [
    {
      'Sid': 'Enable root account full access',
      'Principal': {'AWS': 'arn:aws:iam::123:root'},
      'Action': 'kms:*',
      'Effect': 'Allow'
    },
    {
      'Sid': 'Allow RDS to use this key',
      'Principal': {'Service': 'rds.amazonaws.com'},
      'Action': ['kms:Encrypt','kms:Decrypt','kms:GenerateDataKey'],
      'Effect': 'Allow'
    }
  ]
}

Cifrado de sobre de KMS

KMS utiliza el cifrado de sobre para proteger grandes cantidades de datos de forma eficiente. No puede cifrar directamente más de 4 KB con una clave de KMS. En su lugar: KMS genera una Data Encryption Key (DEK), una clave aleatoria que se utiliza para cifrar localmente los datos reales. A continuación, la clave de KMS cifra la DEK (la Key Encryption Key). Debe almacenar la DEK cifrada junto con los datos cifrados. Para descifrar, primero debe llamar a KMS para descifrar la DEK y, después, utilizar localmente la DEK en texto plano para descifrar los datos. Así funcionan internamente el cifrado de S3, EBS y RDS.

# Generate a Data Key (for envelope encryption)
aws kms generate-data-key \
  --key-id alias/my-key \
  --key-spec AES_256

# Response contains:
# Plaintext: base64-encoded DEK (use to encrypt data locally)
# CiphertextBlob: KMS-encrypted DEK (store alongside data)

# To decrypt:
# 1. Call kms:Decrypt(CiphertextBlob) -> plaintext DEK
# 2. Use plaintext DEK to decrypt data locally
# 3. Zeroize plaintext DEK from memory
aws kms decrypt --ciphertext-blob fileb://encrypted-dek.bin

Rotación de claves de KMS

La rotación de claves es una práctica recomendada de seguridad que sustituye periódicamente el material criptográfico de las claves, limitando el periodo de exposición si una clave se ve comprometida. Para las Customer Managed Keys, puede activar la rotación automática anual; KMS genera nuevo material de clave y lo utiliza para las nuevas operaciones de cifrado, conservando el material anterior para descifrar los datos existentes. Las AWS Managed Keys rotan automáticamente cada año. El material de clave importado NO admite la rotación automática (debe rotarlo manualmente). Tras la rotación, las nuevas operaciones de KMS utilizan automáticamente el nuevo material de clave sin cambios en la aplicación.

# Enable automatic annual key rotation
aws kms enable-key-rotation \
  --key-id alias/prod-db-key

# Verify rotation is enabled
aws kms get-key-rotation-status \
  --key-id alias/prod-db-key

# Manual rotation (for imported key material):
# 1. Create a new CMK
# 2. Update all services to use new key
# 3. Re-encrypt existing data with new key
# 4. Schedule old key for deletion (minimum 7-day waiting period)

Opciones de cifrado del lado del servidor de S3

S3 admite tres opciones de cifrado del lado del servidor: SSE-S3: S3 gestiona las claves mediante AES-256; es gratuito y ofrece un control mínimo. SSE-KMS: utiliza una clave de KMS (administrada por AWS o una CMK), proporciona un registro de auditoría del uso de la clave en CloudTrail, admite políticas de claves y tiene un coste por llamada a la API de KMS. SSE-C: usted proporciona y gestiona el material de clave con cada solicitud; S3 nunca almacena la clave. Utilice SSE-KMS cuando necesite auditar quién utilizó la clave y cuándo. Utilice SSE-S3 para datos de baja sensibilidad cuando la simplicidad y el coste sean importantes. Imponga el cifrado mediante una política de bucket que deniegue PutObject sin cifrado.

# Enforce SSE-KMS on all new S3 objects
aws s3api put-bucket-policy \
  --bucket my-secure-bucket \
  --policy '{
    "Statement": [{
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::my-secure-bucket/*",
      "Condition": {
        "StringNotEquals": {
          "s3:x-amz-server-side-encryption": "aws:kms"
        }
      }
    }]
  }'

# Set default encryption for bucket
aws s3api put-bucket-encryption \
  --bucket my-secure-bucket \
  --server-side-encryption-configuration '{"Rules":[{"ApplyServerSideEncryptionByDefault":{"SSEAlgorithm":"aws:kms","KMSMasterKeyID":"alias/my-key"}}]}'

AWS Certificate Manager (ACM)

AWS Certificate Manager (ACM) aprovisiona, gestiona y renueva automáticamente certificados SSL/TLS para los servicios de AWS sin coste. Los certificados de ACM se pueden utilizar con ALB, NLB, CloudFront, API Gateway y AppSync. ACM gestiona automáticamente el ciclo de vida de los certificados: los renueva 60 días antes de que caduquen y despliega la renovación de forma transparente. Puede solicitar certificados para dominios que sean de su propiedad (validados mediante DNS o correo electrónico) o importar certificados de terceros. Los certificados de ACM NO se pueden descargar, ya que están vinculados al servicio de AWS con el que se asocian.

# Request a public ACM certificate
aws acm request-certificate \
  --domain-name app.example.com \
  --subject-alternative-names '*.example.com' \
  --validation-method DNS

# ACM returns a CNAME record to add to Route 53
# Add the CNAME -> ACM validates domain ownership
# Certificate is issued and auto-renews annually

# Attach to ALB listener (HTTPS:443)
aws elbv2 create-listener \
  --load-balancer-arn <ALB-ARN> \
  --protocol HTTPS --port 443 \
  --certificates CertificateArn=arn:aws:acm:us-east-1:123:certificate/abc \
  --default-actions Type=forward,TargetGroupArn=<TG-ARN>

Autoridad de certificación privada de ACM

ACM Private CA (Certificate Authority) le permite crear una jerarquía de CA privada totalmente administrada para emitir certificados para recursos internos, como instancias de EC2, contenedores, API internas y dispositivos IoT. A diferencia de los certificados públicos de ACM (que se usan con servicios accesibles desde Internet), los certificados de una CA privada pueden emitirse para cualquier nombre de host o dirección IP interna. Use Private CA para: TLS mutuo (mTLS) entre microservicios, autenticación basada en certificados para VPN y requisitos de cumplimiento de una PKI interna. Private CA cuesta 400 USD al mes por la CA, más 0,75 USD por cada certificado emitido.

# Create ACM Private Certificate Authority
aws acm-pca create-certificate-authority \
  --certificate-authority-type ROOT \
  --certificate-authority-configuration '{
    "KeyAlgorithm": "RSA_2048",
    "SigningAlgorithm": "SHA256WITHRSA",
    "Subject": {
      "Country": "US",
      "Organization": "Example Corp",
      "CommonName": "Example Corp Internal CA"
    }
  }'

# Issue certificate from private CA
aws acm request-certificate \
  --domain-name internal-service.example.internal \
  --certificate-authority-arn arn:aws:acm-pca:us-east-1:123:certificate-authority/xxx

Cifrado de EBS y RDS

Para el cifrado de volúmenes de EBS, actívelo al crear el volumen (o copie un volumen existente con el cifrado habilitado). Todos los datos del volumen, incluidas las instantáneas, se cifran mediante la clave de KMS que especifique. El cifrado de EBS es transparente para el sistema operativo: no se necesitan cambios en la aplicación. Para el cifrado de RDS, actívelo al crear la instancia de base de datos; no puede cifrar directamente una instancia de RDS existente que no esté cifrada. Como alternativa, cree una instantánea cifrada a partir de una instancia no cifrada y, después, restáurela en una instancia nueva cifrada. Las instantáneas cifradas de EBS y RDS permanecen cifradas al copiarlas.

# Enable account-level EBS default encryption
aws ec2 enable-ebs-encryption-by-default
aws ec2 modify-ebs-default-kms-key-id \
  --kms-key-id alias/prod-ebs-key

# Encrypt an existing unencrypted RDS instance:
# 1. Create unencrypted snapshot
aws rds create-db-snapshot \
  --db-instance-identifier mydb \
  --db-snapshot-identifier mydb-plain-snapshot

# 2. Copy snapshot with encryption
aws rds copy-db-snapshot \
  --source-db-snapshot-identifier mydb-plain-snapshot \
  --target-db-snapshot-identifier mydb-encrypted-snapshot \
  --kms-key-id alias/prod-db-key

Cifrado del lado del cliente frente al cifrado del lado del servidor

Comprender la diferencia entre el cifrado del lado del servidor y del lado del cliente es importante para el examen SAA-C03. Cifrado del lado del servidor: AWS cifra los datos después de recibirlos y los descifra antes de entregarlos; los datos están en texto sin formato entre su aplicación y AWS. Cifrado del lado del cliente: usted cifra los datos antes de enviarlos a AWS; AWS solo almacena el texto cifrado y nunca ve el texto sin formato. Use el cifrado del lado del cliente para datos muy sensibles cuando no pueda confiar en que el proveedor de la nube gestione el texto sin formato, como historiales médicos o datos financieros sujetos a normativas estrictas.

# Client-side encryption with AWS Encryption SDK
# (conceptual Python example)

# 1. Application encrypts data locally using KMS DEK
# from aws_encryption_sdk import KmsKeyProvider, encrypt

# key_provider = KmsKeyProvider(key_ids=['alias/my-key'])
# ciphertext, _ = encrypt(
#     source=b'Sensitive patient data',
#     key_provider=key_provider
# )

# 2. Send ciphertext to S3
# s3.put_object(Bucket='hipaa-data', Key='record.enc', Body=ciphertext)

# AWS only stores ciphertext - cannot decrypt without your key policy

Acceso entre cuentas a KMS

Las claves de KMS se pueden compartir entre cuentas de AWS para escenarios de cifrado entre cuentas. Por ejemplo, si la aplicación de la Cuenta A escribe datos cifrados en un bucket de S3 propiedad de la Cuenta B, la clave de KMS de la Cuenta A debe permitir que la entidad principal de la Cuenta B la use. Configure la política de claves de KMS en la Cuenta A para conceder acceso entre cuentas y, después, cree una política de IAM en la Cuenta B para permitir que el rol use la clave de la Cuenta A. Este patrón es habitual en arquitecturas de intercambio de datos y con varias cuentas, en las que una cuenta central administra las claves de cifrado.

# KMS key policy: allow cross-account access
# (in Account A's key policy)
{
  'Sid': 'Allow Account B to use this key',
  'Effect': 'Allow',
  'Principal': {
    'AWS': 'arn:aws:iam::999999999999:root'
  },
  'Action': [
    'kms:Encrypt',
    'kms:Decrypt',
    'kms:ReEncrypt*',
    'kms:GenerateDataKey*',
    'kms:DescribeKey'
  ],
  'Resource': '*'
}

# Account B IAM policy also needed to allow the role to use it

Comprobación rápida

Compruebe su comprensión de los conceptos de AWS Solutions Architect (SAA-C03) de esta lección.

Resumen de la lección

En esta lección ha aprendido que: KMS administra claves de cifrado con protección mediante HSM y admite CMK para un control de acceso detallado y registros de auditoría; ACM aprovisiona y renueva automáticamente certificados TLS para los servicios de AWS sin coste; y el cifrado se puede aplicar del lado del servidor (KMS) o del lado del cliente, aunque el del lado del servidor es el patrón más habitual para las cargas de trabajo nativas de AWS. Imponga el cifrado mediante políticas de bucket que denieguen las operaciones sin cifrado. A continuación, exploraremos GuardDuty, Inspector y Macie.

Preguntas frecuentes

¿La lección «KMS, ACM y patrones de cifrado» es gratis?

Sí — el texto completo de «KMS, ACM y patrones de cifrado» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de AWS Solutions Architect, actualiza a CoddyKit PRO. El curso de AWS Solutions Architect incluye 4 lecciones en total.

¿Qué aprenderé en «KMS, ACM y patrones de cifrado»?

Gestione claves de cifrado con AWS KMS, aprovisione y rote certificados TLS con ACM y elija entre cifrado del cliente, del servidor y en tránsito Practicas AWS Solutions Architect con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar AWS Solutions Architect?

No se requiere experiencia previa. AWS Solutions Architect en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «KMS, ACM y patrones de cifrado»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de AWS Solutions Architect?

Sí. Cada lección de AWS Solutions Architect incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. KMS, ACM y patrones de cifrado
  2. GuardDuty, Inspector y Macie
  3. Secrets Manager y Parameter Store
  4. WAF, Shield y Network Firewall
← Volver a AWS Solutions Architect