0Pricing
AWS Solutions Architect · Aula

KMS, ACM e padrões de criptografia

Gerencie chaves de criptografia com o AWS KMS, provisione e faça a rotação de certificados TLS com o ACM e escolha entre criptografia no cliente, no servidor e em trânsito.

KMS, ACM e padrões de criptografia é uma aula grátis de AWS Solutions Architect no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de AWS Solutions Architect, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de AWS Solutions Architect inclui 4 aulas no total.

Criptografia na AWS: visão geral

A criptografia é um controle de segurança fundamental que protege a confidencialidade dos dados mesmo quando a mídia de armazenamento é comprometida ou o acesso é obtido por outros meios. A AWS fornece criptografia para dados em repouso (armazenados em bancos de dados, S3 e EBS) e em trânsito (em movimento pelas redes). Serviços principais: o AWS Key Management Service (KMS) gerencia chaves de criptografia para criptografia em repouso. O AWS Certificate Manager (ACM) provisiona e gerencia certificados TLS para criptografia em trânsito. Entender quando e como aplicar cada um é essencial para o domínio de Arquitetura de Segurança do 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: serviço de gerenciamento de chaves

O AWS KMS é um serviço totalmente gerenciado para criar e controlar chaves de criptografia. O KMS usa Hardware Security Modules (HSMs) para proteger as chaves — o material da chave nunca deixa o HSM sem criptografia. O KMS integra-se à maioria dos serviços da AWS para criptografia no servidor. Tipos de chave: AWS Managed Keys (gratuitas, rotacionadas automaticamente todos os anos; você não pode controlá-las diretamente), Customer Managed Keys (CMK) (US$ 1/mês cada; você controla a rotação, a política da chave e a exclusão). O Custom Key Store usa seu próprio cluster do CloudHSM para requisitos de conformidade que exigem HSMs 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 e concessões de chaves do KMS

Toda chave do KMS tem uma política de chave — uma política baseada em recurso que controla quem pode usar e gerenciar a chave. Ao contrário das políticas do IAM, que são baseadas em identidade, as políticas de chave são obrigatórias: a política de chave deve conceder explicitamente o acesso para que as políticas do IAM entrem em vigor. Prática recomendada: separar a administração da chave (quem pode gerenciá-la) do uso da chave (quais serviços e funções podem criptografar/descriptografar). Use concessões de chave para acesso delegado temporário — por exemplo, conceda a um cluster do EMR o uso temporário de uma chave do KMS para um trabalho sem modificar a política da chave.

# 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'
    }
  ]
}

Criptografia envelope do KMS

O KMS usa criptografia envelope para proteger grandes volumes de dados com eficiência. Você não pode criptografar diretamente mais de 4 KB com uma chave do KMS. Em vez disso: o KMS gera uma Data Encryption Key (DEK) — uma chave aleatória usada para criptografar seus dados reais localmente. A DEK é então criptografada pela sua chave do KMS (a Key Encryption Key). Você armazena a DEK criptografada junto com os dados criptografados. Para descriptografar, primeiro chama o KMS para descriptografar a DEK e, em seguida, usa localmente a DEK em texto simples para descriptografar os dados. É assim que funcionam internamente a criptografia do S3, do EBS e do 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

Rotação de chaves do KMS

A rotação de chaves é uma prática recomendada de segurança que substitui periodicamente o material criptográfico da chave, limitando a janela de exposição caso uma chave seja comprometida. Para Customer Managed Keys, você pode habilitar a rotação automática anual — o KMS gera um novo material de chave e o utiliza em novas operações de criptografia, mantendo o material antigo para descriptografar dados existentes. As AWS Managed Keys são rotacionadas automaticamente todos os anos. O material de chave importado NÃO oferece suporte à rotação automática (você deve rotacioná-lo manualmente). Após a rotação, novas operações do KMS usam automaticamente o novo material de chave, sem alterações na aplicação.

# 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)

Opções de criptografia no servidor do S3

O S3 oferece três opções de criptografia no servidor: SSE-S3 — o S3 gerencia as chaves usando AES-256, gratuitamente, com controle mínimo. SSE-KMS — usa uma chave do KMS (gerenciada pela AWS ou CMK), fornece trilha de auditoria da chave no CloudTrail, oferece suporte a políticas de chave e gera um custo por chamada de API do KMS. SSE-C — você fornece e gerencia o material da chave em cada solicitação; o S3 nunca armazena a chave. Use SSE-KMS quando precisar auditar quem usou a chave e quando. Use SSE-S3 para dados de baixa sensibilidade nos quais simplicidade e custo sejam importantes. Imponha a criptografia com uma política de bucket que negue PutObject sem criptografia.

# 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)

O AWS Certificate Manager (ACM) provisiona, gerencia e renova automaticamente certificados SSL/TLS para serviços da AWS sem custo. Os certificados do ACM podem ser usados com ALB, NLB, CloudFront, API Gateway e AppSync. O ACM gerencia automaticamente o ciclo de vida dos certificados — renova os certificados 60 dias antes da expiração e implanta a renovação de forma transparente. Você pode solicitar certificados para domínios que possui (validados por DNS ou e-mail) ou importar certificados de terceiros. Os certificados do ACM NÃO podem ser baixados — eles ficam vinculados ao serviço da AWS ao qual estão associados.

# 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>

ACM Private Certificate Authority

ACM Private CA (Certificate Authority) permite criar uma hierarquia de CA privada e totalmente gerenciada para emitir certificados para recursos internos — instâncias EC2, contêineres, APIs internas e dispositivos de IoT. Diferentemente dos certificados públicos da ACM (usados com serviços acessíveis pela internet), os certificados de CA privada podem ser emitidos para qualquer nome de host ou endereço IP interno. Use a Private CA para: TLS mútuo (mTLS) entre microsserviços, autenticação baseada em certificados para VPN e requisitos de conformidade para PKI interna. A Private CA custa US$ 400 por mês pela CA, mais US$ 0,75 por 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

Criptografia de EBS e RDS

Para a criptografia de volumes EBS, habilite-a no momento da criação do volume (ou copie um volume existente com a criptografia habilitada). Todos os dados do volume, incluindo snapshots, são criptografados usando a chave KMS especificada. A criptografia do EBS é transparente para o sistema operacional — não são necessárias alterações na aplicação. Para a criptografia do RDS, habilite-a ao criar a instância de banco de dados; não é possível criptografar diretamente uma instância RDS existente que não esteja criptografada. Alternativa: crie um snapshot criptografado a partir de uma instância não criptografada e restaure-o em uma nova instância criptografada. Os snapshots criptografados de EBS e RDS permanecem criptografados quando são copiados.

# 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

Criptografia no Cliente versus no Servidor

Entender a diferença entre criptografia no servidor e no cliente é importante para a prova SAA-C03. Criptografia no servidor: a AWS criptografa os dados depois de recebê-los e os descriptografa antes de entregá-los — os dados ficam em texto simples entre sua aplicação e a AWS. Criptografia no cliente: você criptografa os dados antes de enviá-los à AWS — a AWS armazena apenas o texto cifrado e nunca vê o texto simples. Use a criptografia no cliente para obter o mais alto nível de sensibilidade dos dados quando não for possível confiar no provedor de nuvem para lidar com texto simples, como em registros de saúde ou dados financeiros sujeitos a regulamentações rigorosas.

# 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

Acesso entre contas ao KMS

As chaves KMS podem ser compartilhadas entre contas da AWS em cenários de criptografia entre contas. Por exemplo, se a aplicação da Account A gravar dados criptografados em um bucket do S3 pertencente à Account B, a chave KMS da Account A deverá permitir que o principal da Account B a utilize. Configure a política de chave do KMS na Account A para conceder acesso entre contas e, em seguida, crie uma política do IAM na Account B para permitir que a função use a chave da Account A. Esse padrão é comum em arquiteturas de compartilhamento de dados e de várias contas, nas quais uma conta central gerencia as chaves de criptografia.

# 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

Verificação rápida

Teste sua compreensão dos conceitos de AWS Solutions Architect (SAA-C03) desta lição.

Recapitulação da lição

Nesta lição, você aprendeu que: o KMS gerencia chaves de criptografia com proteção HSM e oferece suporte a CMKs para controle de acesso detalhado e trilhas de auditoria, a ACM provisiona e renova automaticamente certificados TLS para serviços da AWS sem custo e a criptografia pode ser aplicada no servidor (KMS) ou no cliente, sendo a opção no servidor o padrão mais comum para cargas de trabalho nativas da AWS. Imponha a criptografia com políticas de bucket que neguem operações não criptografadas. A seguir, exploraremos GuardDuty, Inspector e Macie.

Perguntas Frequentes

A aula “KMS, ACM e padrões de criptografia” é grátis?

Sim — o texto completo de “KMS, ACM e padrões de criptografia” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de AWS Solutions Architect, atualize para CoddyKit PRO. O curso de AWS Solutions Architect inclui 4 aulas no total.

O que vou aprender em “KMS, ACM e padrões de criptografia”?

Gerencie chaves de criptografia com o AWS KMS, provisione e faça a rotação de certificados TLS com o ACM e escolha entre criptografia no cliente, no servidor e em trânsito. Você pratica AWS Solutions Architect com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar AWS Solutions Architect?

Nenhuma experiência prévia é necessária. AWS Solutions Architect no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “KMS, ACM e padrões de criptografia”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de AWS Solutions Architect?

Sim. Cada aula de AWS Solutions Architect inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. KMS, ACM e padrões de criptografia
  2. GuardDuty, Inspector e Macie
  3. Secrets Manager e Parameter Store
  4. WAF, Shield e Network Firewall
← Voltar para AWS Solutions Architect