KMS: envelope encryption e quando usar CMK
- ⬜👥 Cognito: user pools vs identity pools(AWS Developer Associate (DVA-C02))
Recomendamos completar os pré-requisitos antes de seguir, mas nada te impede de continuar.
Operações essenciais
- GenerateDataKey: KMS retorna plaintext DEK + encrypted DEK. Use DEK local pra criptografar (AES-256-GCM), armazene encrypted DEK junto.
- Encrypt: KMS criptografa payload pequeno (max 4KB). Uso raro — quase sempre envelope via GenerateDataKey.
- Decrypt: KMS descriptografa encrypted DEK (ou encrypted payload pequeno). Retorna plaintext.
- Rotate: automática yearly opcional. AWS mantém histórico pra decrypt antigos. Zero impact em dados existentes.
- → 1. GenerateDataKey
- → 2a. devolve em claro
- → 2b. e cifrada
- → 3. cifra o dado localmente
- → 4. guarda ao lado do dado
- → autoriza
- → registra
- Segurança e identidade
- Compute
- Armazenamento
- Gestão e governança
Envelope encryption existe por um motivo prático: o KMS não pode ver o seu dado nem processar volume. Ele protege uma chave pequena, e essa chave protege o dado grande — localmente e rápido.
- O dado nunca passa pelo KMS. Este é o ponto. O KMS tem limite de tamanho por operação de alguns KB — cifrar um arquivo de 5 GB direto nele é impossível. Ele cifra CHAVES, não conteúdo.
- GenerateDataKey devolve duas versões. A mesma chave em claro e cifrada pela CMK. Você usa a versão em claro para cifrar, apaga da memória, e guarda a cifrada.
- A data key cifrada mora com o dado. Ela fica no metadado do objeto. Para descriptografar, você manda a data key cifrada ao KMS, recebe em claro, e decifra o dado localmente. Sem a CMK, a data key cifrada é inútil.
- Permissão é em dois lugares. Key policy (no recurso) e política IAM (na identidade). Diferente da maioria dos serviços, a key policy é obrigatória: sem ela, nem o administrador da conta usa a chave. É pegadinha frequente.
- Tudo é auditado. Cada Encrypt, Decrypt e GenerateDataKey aparece no CloudTrail, com quem chamou e quando. É o que permite responder "quem descriptografou este dado em março".
import boto3, os
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
kms = boto3.client("kms")
# O KMS cifra no máximo 4 KB por chamada. Para dado grande, o padrão é envelope:
# peça uma chave de dados, use-a localmente, guarde a versão CIFRADA dela junto.
r = kms.generate_data_key(KeyId=CHAVE_CMK, KeySpec="AES_256")
chave_clara, chave_cifrada = r["Plaintext"], r["CiphertextBlob"]
nonce = os.urandom(12)
conteudo_cifrado = AESGCM(chave_clara).encrypt(nonce, dados_grandes, None)
del chave_clara # a chave clara não persiste em lugar nenhum
guardar(chave_cifrada=chave_cifrada, nonce=nonce, conteudo=conteudo_cifrado)
# Para decifrar, o KMS devolve a chave de dados — e só quem tem permissão de
# `kms:Decrypt` na CMK consegue. É a SEGUNDA autorização: ter acesso ao objeto
# e não ter acesso à chave resulta em negação, e o erro raramente diz isso.
chave_clara = kms.decrypt(CiphertextBlob=chave_cifrada)["Plaintext"]
original = AESGCM(chave_clara).decrypt(nonce, conteudo_cifrado, None)Onde isso entra no exame
Espere envelope encryption (a chave de dados é cifrada pela CMK; o objeto não passa pelo KMS), quando a key policy vence a policy do IAM, e a diferença entre SSE-S3, SSE-KMS e SSE-C na hora de auditar quem descriptografou. Se a questão pede rastro de uso da chave no CloudTrail, SSE-S3 está eliminado.
Qual operação do KMS uma aplicação usa para cifrar um arquivo grande?
Quando CloudHSM
KMS é multi-tenant FIPS 140-2 Level 2. CloudHSM é single-tenant Level 3 — sua HSM dedicada, FIPS nível hardware. Caro ($1.60/hora). Uso: compliance PCI/financial estrito, custom algorithms, TLS offloading com key material próprio.
Perguntas frequentes
❓ O que é cifragem em envelope, do ponto de vista de quem programa?
❓ Quando preciso de chave própria em vez da do serviço?
❓ Cifragem no cliente ou no servidor?
Fixando
Por que uma chave do KMS pode ficar inutilizável mesmo para o administrador da conta?
Qual é a diferença entre KMS e CloudHSM?
Terminou de ler?
Marcar como concluído registra o XP, mantém sua sequência e coloca 3 cartas deste módulo na fila de revisão espaçada.
Próximos passos sugeridos
Temas deste módulo
Discussão
Carregando comentários…