AWS S3 - Encryption
Tags: aws, devops, security, cloud
Published: 2023-05-19 14:28:23

**Anotações sobre o AWS S3 - Encryption para ajudar na preparação das certificações AWS.**

Até o momento as anotações são para as certificações abaixo:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/se0sqtegn424nami6rz8.png)

- [Link oficial](https://docs.aws.amazon.com/pt_br/AmazonS3/latest/userguide/UsingEncryption.html)

---

##**Anotações gerais**

- AES-256
- **Os metadados não são encryptados, para isso coloque-os em uma tabela do Dynamodb e criptografe com KMS**
- **"s3:x-amz-server-side-encryption": "AES256"**
- **Para encryptar um bucket - AWS SSE-S3 + AWS KMS CMK**
- **aws:SecureTransport**
- Para criptografar os dados do Amazon S3 em trânsito, você pode usar os endpoint (endpoints) da API do Amazon S3 Secure Sockets Layer (SSL). 
- Isso garante que todos os dados enviados para e do Amazon S3 sejam criptografados enquanto estiver em trânsito usando o protocolo HTTPS.
- Para criptografar os dados do Amazon S3 em repouso, você pode usar várias variações de SSE (Server-Side Encryption).
- O Amazon S3 criptografa seus dados no nível do objeto enquanto os grava em discos em seus datacenters e os descriptografa para você quando você os acessa.
- Todo o SSE executado pelo Amazon S3 e pelo AWS Key Management Service (Amazon KMS) usa o Advanced Encryption Standard (AES) de 256 bits. 
- Você também pode criptografar os dados do Amazon S3 em repouso usando o lado do cliente, criptografando seus dados no cliente antes de enviá-los para o Amazon S3.

---
## **Server Side Encryption (_Criptografia no lado do servidor_)** 
[Documentação oficial](https://docs.aws.amazon.com/pt_br/AmazonS3/latest/userguide/serv-side-encryption.html)

_Server Side Encryption é a criptografia de dados em seu destino pela aplicação ou serviço que os recebe._

- **Criptografa os dados no nível do objeto no momento em que os grava em discos nos datacenters e descriptografa-os quando você os acessa.**
- Peça que o Amazon S3 criptografe o objeto antes de salvá-lo em discos em seus datacenters e descriptografe-o ao fazer download dos objetos.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/96dzcyrlcov4pdupazcg.png)

Você tem três opções, dependendo de como escolhe gerenciar as chaves de criptografia.

**SSE-S3 (Chaves gerenciadas pela AWS)**
[Documentação oficial](https://docs.aws.amazon.com/pt_br/AmazonS3/latest/userguide/UsingServerSideEncryption.html)

_Quando usar Server Side Encryption com as chaves gerenciadas pelo Amazon S3 (SSE-S3), cada objeto será criptografado com uma chave exclusiva. Como uma proteção adicional, ela criptografa a própria chave utilizando uma chave-raiz que alterna regularmente._


- **Não fornecem uma trilha de auditoria que mostre quando sua CMK foi usada e por quem**
- Essa é uma solução de criptografia "estilo caixa de seleção" totalmente integrada, na qual a AWS lida com o gerenciamento e a proteção de chaves do Amazon S3. Cada objeto é criptografado com uma chave exclusiva.
- A própria chave do objeto é então criptografada por uma chave mestra separada. 
- Uma nova chave mestra é emitida pelo menos mensalmente, com a AWS rotacionando as chaves. 
- Dados criptografados, chaves de criptografia e chaves mestras são todos armazenados separadamente em hosts seguros, aumentando ainda mais a proteção.

**SSE-KMS (KMS Key)**
[Documentação oficial](https://docs.aws.amazon.com/pt_br/AmazonS3/latest/userguide/UsingKMSEncryption.html)

_A Server Side Encryption com AWS KMS keys (SSE-KMS) é semelhante a SSE-S3, mas com alguns benefícios adicionais e cobranças para usar esse serviço. Há outras permissões para uso de uma chave do KMS que fornece maior proteção contra acesso não autorizado de seus objetos no Amazon S3._

- Esta é uma solução totalmente integrada em que a Amazon lida com o gerenciamento e a proteção de chaves do Amazon S3, mas onde você gerencia as chaves.
- O SSE-KMS oferece vários benefícios adicionais em comparação com o SSE-S3. 
- Usando o SSE-KMS, existem permissões separadas para o uso da chave mestra, que fornecem proteção contra acesso não autorizado aos seus objetos armazenados no Amazon S3 e uma camada adicional de controle.
- **O AWS KMS também fornece auditoria, para que você possa ver quem usou sua chave para acessar qual objeto e quando eles tentaram acessar esse objeto. **
- O AWS KMS também permite exibir quaisquer tentativas falhas de acessar dados de usuários que não tinham permissão para descriptografar os dados.

**SSE-C (customer-managed keys)**
[Documentação oficial](https://docs.aws.amazon.com/pt_br/AmazonS3/latest/userguide/ServerSideEncryptionCustomerKeys.html)

_A Server Side Encryption envolve a proteção de dados em repouso. A Server Side Encryption criptografa somente os dados de objeto, não os metadados de objeto. Ao usar criptografia do lado do servidor com chaves fornecidas pelo cliente (SSE-C), você pode armazenar suas próprias chaves de criptografia_

- **Criptografa somente os dados de objeto, não os metadados de objeto**
- **Não fornecem uma trilha de auditoria que mostre quando sua CMK foi usada e por quem**
- É usado para criptografar os dados no storage externo antes de enviar.
- É usado quando você deseja manter suas próprias chaves de criptografia, mas não deseja gerenciar ou implementar sua própria biblioteca de criptografia do lado do cliente.
- Com o SSE-C, a AWS faz a criptografia/descriptografia de seus objetos enquanto você mantém controle total das chaves usadas para criptografar/descriptografar os objetos no Amazon S3.
- **É possível ter diferentes Keys de criptografia para diferentes versões do mesmo objeto.**

---
### **Client Side Encryption (_Criptografia do lado do cliente_)**
[Documentação oficial](https://docs.aws.amazon.com/pt_br/AmazonS3/latest/userguide/UsingClientSideEncryption.html)

**_A Client Side Encryption é o ato de criptografar dados localmente para garantir sua segurança à medida que eles são transmitidos ao serviço do Amazon S3._**

- **Recebe os dados criptografados. Ele não atua na criptografia ou descriptografia desses dados**
- Client Side Encryption e faça upload dos dados criptografados no Amazon S3. Nesse caso, você gerencia o processo de criptografia, as chaves de criptografia e as ferramentas relacionadas.
- Ao usar a Client Side Encryption, você mantém o controle ponta a ponta do processo de criptografia, incluindo o gerenciamento das chaves de criptografia. 
- Para máxima simplicidade e facilidade de uso, use a criptografia do servidor com chaves gerenciadas pela AWS (SSE-S3 ou SSE-KMS).
- Client Side Encryption refere-se à criptografia de dados no lado do cliente do seu aplicativo antes de enviá-los ao Amazon S3. 

**Para habilitar a Client Side Encryption, você tem as seguintes opções:**

- Use AWS KMS-managed customer master key.
- Use client-side master key.

---
**AWS S3 c/ AWS KMS**
Deve ter permissão ao fazer upload ou download de um objeto no S3 criptografado com uma chave AWS KMS

- kms:Decrypt
- kms:Encrypt
- kms:ReEncrypt*
- kms:GenerateDataKey*
- kms:DescribeKey

---

##**Referências**

- [Proteção de dados usando criptografia](https://docs.aws.amazon.com/pt_br/AmazonS3/latest/userguide/UsingEncryption.html)
- [Criptografia no AWS S3](https://guilhermeteles.com.br/criptografia-no-aws-s3/)
- [AWS S3 Encryption](https://jayendrapatil.com/aws-s3-encryption/)