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étodo | Quem gerencia a chave | Onde é 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ário | Server-side |
| SSE-C (Server-Side Encryption) | Cliente fornece e gerencia a própria chave | Server-side |
| Client-Side Encryption | Cliente | Client-side (antes do upload) |
2. Amazon S3 Encryption — SSE-S3
- Criptografia usando chaves manuseadas, gerenciadas e de propriedade da AWS.
- O objeto é criptografado server-side (no lado do servidor).
- Tipo de criptografia: AES-256.
- É necessário definir o header:
"x-amz-server-side-encryption": "AES256"
- Habilitado por padrão para novos buckets e novos objetos.
3. Amazon S3 Encryption — SSE-KMS
- Criptografia usando chaves manuseadas e gerenciadas pelo AWS KMS (Key Management Service).
- Vantagens do KMS: controle do usuário + auditoria do uso das chaves via CloudTrail.
- O objeto é criptografado no lado do servidor (server-side).
- É necessário definir o header:
"x-amz-server-side-encryption": "aws:kms"
SSE-KMS Limitation (Limitações)
- 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.
4. Amazon S3 Encryption — SSE-C
- Server-Side Encryption usando chaves totalmente gerenciadas pelo cliente, fora da AWS.
- O Amazon S3 NÃO armazena a chave de criptografia que você fornece.
- HTTPS deve ser usado obrigatoriamente (mandatory).
- A chave de criptografia deve ser fornecida nos headers HTTP, em cada requisição HTTP feita.
5. Amazon S3 Encryption — Client-Side Encryption
- Utiliza bibliotecas client-side, como a Amazon S3 Client-Side Encryption Library.
- Os clientes devem criptografar os dados eles mesmos antes de enviar ao Amazon S3.
- Os clientes devem descriptografar os dados eles mesmos ao recuperar do Amazon S3.
- O cliente gerencia totalmente as chaves e o ciclo de criptografia.
6. Amazon S3 — Encryption in Transit (SSL/TLS)
- Criptografia em trânsito também é chamada de SSL/TLS.
- Amazon S3 expõe dois endpoints:
- HTTP Endpoint — não criptografado.
- HTTPS Endpoint — criptografado em trânsito.
- HTTPS é recomendado.
- HTTPS é obrigatório para SSE-C.
- A maioria dos clientes usa o endpoint HTTPS por padrão.
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"
}
}
}
]
}
8. Amazon S3 — Default Encryption vs. Bucket Policies
- A criptografia SSE-S3 é aplicada automaticamente a novos objetos armazenados em um bucket S3.
- Opcionalmente, você pode "forçar" a criptografia usando uma bucket policy e recusar qualquer chamada de API para fazer PUT de um objeto S3 sem os headers de criptografia (SSE-KMS ou SSE-C).
{
"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)
- CORS = Cross-Origin Resource Sharing.
- Origin = scheme (protocolo) + host (domínio) + porta.
- Exemplo: https://www.example.com (porta implícita 443 para HTTPS, 80 para HTTP).
- CORS é um mecanismo baseado no navegador (Web Browser) para permitir requisições a outras origens enquanto se está visitando a origem principal.
- Same origin (mesma origem): http://example.com/app1 & http://example.com/app2
- Different origins (origens diferentes): http://www.example.com & http://other.example.com
- As requisições não serão atendidas a menos que a outra origem permita as requisições, usando os CORS Headers (exemplo: Access-Control-Allow-Origin).
Amazon S3 — CORS (aplicado a buckets)
- Se um cliente faz uma requisição cross-origin no nosso bucket S3, precisamos habilitar os headers CORS corretos.
- É uma pergunta popular no exame.
- Você pode permitir uma origem específica ou usar * (todas as origens).
10. Amazon S3 — MFA Delete
- MFA (Multi-Factor Authentication) — força os usuários a gerar um código em um dispositivo (geralmente um celular ou hardware) antes de realizar operações importantes no S3.
MFA será exigido para:
- Excluir permanentemente uma versão de objeto.
- Suspender o versionamento no bucket.
MFA NÃO será exigido para:
- Habilitar o versionamento.
- Listar versões excluídas.
- 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
- Para fins de auditoria, você pode querer registrar (log) todo o acesso aos buckets S3.
- Qualquer requisição feita ao S3, de qualquer conta, autorizada ou negada, será registrada em outro bucket S3.
- Esses dados podem ser analisados usando ferramentas de análise de dados.
- O bucket de destino do log (logging bucket) deve estar na mesma região AWS que o bucket monitorado.
- O formato do log está disponível em: https://docs.aws.amazon.com/AmazonS3/latest/dev/LogFormat.html
S3 Access Logs: Warning (Aviso importante)
- 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.
12. Amazon S3 — Pre-Signed URLs
- Você pode gerar URLs pré-assinadas (pre-signed) usando o S3 Console, AWS CLI ou SDK.
Expiração da URL
- S3 Console: mínimo de 1 até 720 minutos (12 horas).
- AWS CLI: configure a expiração com o parâmetro --expires-in em segundos (padrão 3.600s, máximo 604.800s ≈ 168 horas).
- Usuários que recebem a URL pré-assinada herdam as permissões do usuário que gerou a URL, para operações de GET ou PUT.
Exemplos de uso
- Permitir que apenas usuários logados façam download de um vídeo premium do seu bucket S3.
- Permitir uma lista de usuários (que muda constantemente) fazer download de arquivos, gerando URLs dinamicamente.
- Permitir que um usuário faça upload temporário de um arquivo para um local específico do seu bucket S3.
13. S3 Glacier Vault Lock
- Adota um modelo WORM (Write Once Read Many).
- Você cria uma Vault Lock Policy.
- A política é travada (lock) para edições futuras (não pode mais ser alterada ou excluída).
- Útil para conformidade (compliance) e retenção de dados.
14. S3 Object Lock (o versionamento deve estar habilitado)
- Adota um modelo WORM (Write Once Read Many).
- Bloqueia a exclusão de uma versão de objeto por um período de tempo especificado.
Retention Mode — Compliance
- As versões dos objetos não podem ser sobrescritas ou excluídas por nenhum usuário, incluindo o usuário root.
- Os modos de retenção do objeto não podem ser alterados, e os períodos de retenção não podem ser reduzidos.
Retention Mode — Governance
- A maioria dos usuários não pode sobrescrever ou excluir uma versão de objeto ou alterar suas configurações de lock.
- Alguns usuários podem ter permissões especiais para alterar a retenção ou excluir o objeto.
Retention Period
Protege o objeto por um período fixo; esse período pode ser estendido.
Legal Hold
- Protege o objeto indefinidamente, independentemente do período de retenção.
- Pode ser livremente aplicado e removido usando a permissão IAM s3:PutObjectLegalHold.
15. S3 — Access Points
- Access Points simplificam o gerenciamento de segurança para buckets S3.
Cada Access Point possui:
- Seu próprio nome de DNS (Origem na Internet ou Origem VPC).
- Uma política de access point (semelhante a uma bucket policy) — para gerenciar segurança em escala.
S3 — Access Points — VPC Origin
- Podemos definir o Access Point para ser acessível somente a partir de dentro da VPC.
- Você deve criar um VPC Endpoint (Gateway ou Interface Endpoint) para acessar o Access Point.
- A política do VPC Endpoint deve permitir acesso ao bucket de destino e ao Access Point.
{
"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
- Usa funções AWS Lambda para alterar o objeto antes que ele seja retornado à aplicação que o solicitou (caller application).
- Apenas um bucket S3 é necessário, sobre o qual são criados o S3 Access Point e o S3 Object Lambda Access Point.
Casos de uso:
- Redigir informações de identificação pessoal (PII) ou não produtivas.
- Converter entre diferentes formatos de dados, como converter XML para JSON.
- Redimensionar e aplicar marca d'água (watermark) em imagens dinamicamente, usando detalhes específicos do usuário que solicitou o objeto.