# S3: Buckets S3 com acesso público

> Esta regra identifica buckets Amazon S3 que não possuem as configurações de bloqueio de acesso público devidamente habilitadas.
>
> Especificamente, a regra sinaliza buckets onde:
>
> * `BlockPublicAcls` está desativado\
>   ou
> * `BlockPublicPolicy` está desativado
>
> O objetivo é detectar buckets potencialmente expostos ao acesso público.

***

**Contexto da regra e impacto no negócio**

O Amazon S3 é frequentemente utilizado para armazenar:

* Dados sensíveis.
* Backups.
* Arquivos internos.
* Dados financeiros.
* Informações pessoais.

A AWS fornece o recurso **Public Access Block** para evitar exposição acidental.

Quando o bloqueio não está totalmente habilitado:

* ACLs públicas podem ser aplicadas.
* Policies públicas podem ser associadas ao bucket.
* Dados podem se tornar acessíveis externamente.

Impactos no negócio:

* Vazamento de dados.
* Incidentes de segurança.
* Multas regulatórias (LGPD, GDPR, etc.).
* Dano reputacional.
* Custos com resposta a incidentes.

Grande parte dos incidentes históricos de vazamento em cloud envolveu buckets S3 expostos publicamente.

***

**Detalhamento técnico da regra**

A regra executa análise global da conta AWS.

O S3 é um serviço global, portanto não há segmentação por região.

***

**Como a regra é executada**

1. Autentica na conta AWS.
2. Lista todos os buckets via `list_buckets`.
3. Aplica filtros de tag (inclusão/exclusão).
4. Para cada bucket:
   * Executa `get_public_access_block`.
   * Avalia a configuração:
     * `BlockPublicAcls`
     * `BlockPublicPolicy`
5. Se ambas estiverem habilitadas, o bucket não é sinalizado.
6. Caso qualquer uma esteja desabilitada, o bucket é sinalizado.

***

**Lógica aplicada**

Um bucket será considerado em não conformidade quando:

```
BlockPublicAcls = False
OU
BlockPublicPolicy = False
```

Se ambas forem:

```
BlockPublicAcls = True
E
BlockPublicPolicy = True
```

O bucket é considerado protegido nesta implementação.

***

**Campos analisados**

Bucket:

* `Name`
* `CreationDate`
* `TagSet`

Configuração de acesso público:

* `PublicAccessBlockConfiguration`
  * `BlockPublicAcls`
  * `BlockPublicPolicy`

***

**Parâmetros considerados na busca**

APIs utilizadas:

* `s3:ListBuckets`
* `s3:GetPublicAccessBlock`
* `s3:GetBucketTagging`

Condição técnica:

* Avaliação direta da configuração de bloqueio de acesso público.

***

**Período Avaliado (Filtro Temporal)**

Período Avaliado (Filtro Temporal): 15 dias.

Padrão e configurado para analisar Buckets com mais de 15 dias com acesso público.<br>

> Esse parâmetro de avaliação pode ser ajustado nas configurações das regras.

***

**Intervalo de Análise**

Execução padrão: a cada 8 horas.

***

**Aderência às melhores práticas**

Não possui cálculo de savings direto.

Está alinhada com:

* AWS Security Best Practices
* AWS Well-Architected Framework – Pilar de Segurança
* CIS AWS Foundations Benchmark
* Princípio de proteção por padrão (Secure by Default)

***

**Riscos associados**

* Exposição pública não intencional.
* Permissão para criação de ACL pública.
* Permissão para aplicação de policy pública.
* Possível acesso anônimo a dados.

***

**Exemplo prático**

Bucket com configuração:

```
BlockPublicAcls = False
BlockPublicPolicy = True
```

Resultado:

* ACLs públicas podem ser aplicadas.
* Bucket é sinalizado como não aderente.

***

**Dicas de uso e boas práticas para o usuário**

* Habilitar todas as configurações de Public Access Block:
  * BlockPublicAcls
  * IgnorePublicAcls
  * BlockPublicPolicy
  * RestrictPublicBuckets
* Revisar policies existentes antes de alterar.
* Implementar SCPs para forçar bloqueio em nível organizacional.
* Monitorar eventos via AWS CloudTrail.
* Revisar buckets legados criados antes da política de bloqueio padrão.

Possíveis exceções legítimas:

* Buckets intencionalmente públicos para hosting de site estático.
* Distribuição de arquivos públicos controlados.

Recomenda-se validar a necessidade de exposição pública antes de qualquer alteração.
