SAA-C03
SAA-C03 · Revisão
GitHub

Amazon S3 — Security Revisão SAA-C03 · Domínio 1 (Segurança) & Domínio 1.3 (Controles de dados)

1. Criptografia de objetos no S3 — Visão Geral

Você pode criptografar objetos armazenados em buckets S3 usando um de 4 métodos. É essencial entender qual método se aplica a qual situação — este é um ponto muito cobrado no exame.

MétodoQuem gerencia a chaveOnde é criptografado
SSE-S3 (Server-Side Encryption)AWS (chave gerenciada e de propriedade da AWS)Server-side
SSE-KMS (Server-Side Encryption)AWS KMS (Key Management Service) — chaves gerenciadas com controle do usuárioServer-side
SSE-C (Server-Side Encryption)Cliente fornece e gerencia a própria chaveServer-side
Client-Side EncryptionClienteClient-side (antes do upload)
💡 Dica de exame
SSE-S3 é habilitado por padrão ("Enabled by Default") em novos buckets e novos objetos.

2. Amazon S3 Encryption — SSE-S3

🔄 Fluxo (SSE-S3)
User --[HTTP(S) + Header]--> Amazon S3 | |-- Objeto + S3 Owned Key --> Criptografia --> S3 Bucket

3. Amazon S3 Encryption — SSE-KMS

🔄 Fluxo (SSE-KMS)
User --[HTTP(S) + Header]--> Amazon S3 | |-- Objeto --> Criptografia (usa AWS KMS Key) --> S3 Bucket

SSE-KMS Limitation (Limitações)

⚠️ Atenção — Limites de API do KMS
  • Se você usa SSE-KMS, pode ser impactado pelos limites (quotas) do KMS.
  • Quando você faz upload, o S3 chama a API GenerateDataKey do KMS.
  • Quando você faz download, o S3 chama a API Decrypt do KMS.
  • Essas chamadas contam para a quota do KMS por segundo (5.500 / 10.000 / 30.000 req/s, dependendo da região).
  • Você pode solicitar aumento de quota através do Service Quotas Console.
🔄 Fluxo (Limitação SSE-KMS)
Users --[API call]--> S3 Bucket <--> KMS Key (upload/download via SSE-KMS)

4. Amazon S3 Encryption — SSE-C

🔄 Fluxo (SSE-C)
User --[HTTPS SOMENTE + Chave no Header]--> Amazon S3 | Objeto + Chave fornecida pelo cliente --> Criptografia --> S3 Bucket

5. Amazon S3 Encryption — Client-Side Encryption

🔄 Fluxo (Client-Side Encryption)
Arquivo + Chave do Cliente --> Criptografia (no cliente) --> Arquivo (já criptografado) --[upload HTTP(S)]--> S3 Bucket

6. Amazon S3 — Encryption in Transit (SSL/TLS)


7. Amazon S3 — Force Encryption in Transit (aws:SecureTransport)

É possível forçar a criptografia em trânsito usando uma Bucket Policy que nega (Deny) qualquer chamada de API que não use HTTPS.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-bucket/*",
      "Condition": {
        "Bool": {
          "aws:SecureTransport": "false"
        }
      }
    }
  ]
}
🔄 Fluxo
User A --[https]--> ✅ Account B / S3 Bucket (my-bucket) User B --[http]--> ❌ (bloqueado pela Bucket Policy)

8. Amazon S3 — Default Encryption vs. Bucket Policies

📌 Nota importante do exame
Bucket Policies são avaliadas ANTES da "Default Encryption".
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::my-bucket/*",
      "Condition": {
        "StringNotEquals": {
          "s3:x-amz-server-side-encryption": "aws:kms"
        }
      }
    }
  ]
}
/* ...ou, alternativamente, exigindo SSE-C: */
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::my-bucket/*",
      "Condition": {
        "Null": {
          "s3:x-amz-server-side-encryption-customer-algorithm": "true"
        }
      }
    }
  ]
}

9. What is CORS? (Cross-Origin Resource Sharing)

🔄 Fluxo — Preflight Request/Response
Web Browser --[OPTIONS / Host: www.other.com / Origin: https://www.example.com]--> Web Server (Origin, cross-origin) Web Server --[Preflight Response: Access-Control-Allow-Origin / Access-Control-Allow-Methods: GET, PUT, DELETE]--> Web Browser Web Browser --[GET / Host: www.other.com / Origin: https://www.example.com]--> Web Server (Cross-Origin) (CORS Headers já recebidos pela Origem: o Web Browser pode fazer as requisições)

Amazon S3 — CORS (aplicado a buckets)

🔄 Exemplo — Site estático hospedado em S3 consumindo assets de outro bucket S3
GET /index.html Host: my-bucket-html.s3-website-us-west-2.amazonaws.com --> S3 Bucket "my-bucket-html" (Static Website Enabled) devolve index.html GET /images/coffee.jpg Host: my-bucket-assets.s3-website-us-west-2.amazonaws.com Origin: http://my-bucket-html.s3-website-us-west-2.amazonaws.com --> S3 Bucket "my-bucket-assets" (Static Website Enabled) Access-Control-Allow-Origin: http://my-bucket-html.s3-website-us-west-2.amazonaws.com

10. Amazon S3 — MFA Delete

MFA será exigido para:

MFA NÃO será exigido para:

📌 Regras importantes
  • Para usar MFA Delete, o versionamento deve estar habilitado no bucket.
  • Apenas o proprietário do bucket (conta root) pode habilitar/desabilitar o MFA Delete.

Dispositivos suportados (ilustrados no material): Google Authenticator, dispositivo hardware MFA.


11. S3 Access Logs

🔄 Fluxo
User --[requests]--> My-bucket --[log all requests]--> Logging Bucket

S3 Access Logs: Warning (Aviso importante)

⚠️ Nunca faça isso!
  • Não configure o bucket de logging para ser o próprio bucket monitorado.
  • Isso criará um loop de logging (logging loop), e seu bucket crescerá exponencialmente.
User --[PutObject]--> App Bucket & Logging Bucket (o mesmo bucket) --> gera um novo log --> que gera outro log --> LOOP infinito 🔁 "Do not try this at home 😅"

12. Amazon S3 — Pre-Signed URLs

Expiração da URL

Exemplos de uso

🔄 Fluxo
Owner --[gera a URL pré-assinada]--> S3 Bucket (Private) User --[usa a URL, herdando as permissões do Owner]--> GET / PUT

13. S3 Glacier Vault Lock


14. S3 Object Lock (o versionamento deve estar habilitado)

Retention Mode — Compliance

Retention Mode — Governance

Retention Period

Protege o objeto por um período fixo; esse período pode ser estendido.

Legal Hold


15. S3 — Access Points

Cada Access Point possui:

🔄 Exemplo de arquitetura
Users (Finance) --[Policy R/W /finance]--> Finance Access Point -->\ Users (Sales) --[Policy R/W /sales]--> Sales Access Point --> S3 Bucket (Simple Bucket Policy) Users (Analytics)--[Policy Grant R/entire bucket]--> Analytics Access Point --/ ("/finance/..." e "/sales/..." como prefixos dentro do bucket)

S3 — Access Points — VPC Origin

🔄 Fluxo
EC2 Instance --> VPC Endpoint --> Access Point (VPC Origin) --> S3 Bucket (dentro de uma VPC)
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-bucket/*",
      "Condition": {
        "StringEquals": {
          "aws:SourceVpce": "vpce-xxxxxxxx"
        }
      }
    }
  ]
}

16. S3 Object Lambda

Casos de uso:

🔄 Fluxo (S3 Object Lambda)
E-commerce Application --> S3 Object Lambda Access Point --> Redacting Lambda Function --> Original Object (S3 Bucket) --> Redacted Object Marketing Application --> S3 Object Lambda Access Point --> Enriching Lambda Function --> Supporting S3 Access Point + Customer Loyalty Database --> Enriched Object
📌 Resumo mental — S3 Object Lambda
S3 Object Lambda = S3 Access Point normal (para o objeto original) + Lambda Function (para transformar) exposto por um S3 Object Lambda Access Point — tudo isso em cima de um único bucket físico.