# S3: Objetos de versão desatualizada do S3

> Esta regra identifica buckets Amazon S3 que:
>
> * Possuem **versionamento habilitado**
> * Contêm **versões não atuais (noncurrent versions)**
> * Atendem ao critério de idade configurado
> * Atendem aos filtros de tag definidos
>
> O objetivo é identificar acúmulo de versões antigas que geram custo recorrente desnecessário.

***

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

Quando o versionamento está habilitado:

* Toda alteração cria uma nova versão
* Versões antigas permanecem armazenadas
* Custos de storage aumentam continuamente

Problemas comuns:

* Falta de política de retenção
* Acúmulo de versões obsoletas
* Crescimento silencioso de storage

Impacto:

* Custo recorrente invisível
* Storage duplicado
* Falta de governança de retenção

Classificação: **ECONOMIA + GOVERNANÇA**

***

**Detalhamento técnico da regra**

A regra avalia todos os buckets da conta (escopo global).

***

**Como a regra é executada**

1. Executa:

   ```
   s3:ListBuckets
   ```
2. Para cada bucket:
   * Obtém tags:

     ```
     s3:GetBucketTagging
     ```
   * Aplica filtros de tag.
   * Verifica versionamento:

     ```
     s3:GetBucketVersioning
     ```

     Condição:

     ```
     Status = Enabled
     ```
   * Lista versões:

     ```
     s3:ListObjectVersions
     ```
   * Filtra versões não atuais:

     ```
     IsLatest = False
     AND
     DeleteMarker != True
     ```
   * Aplica filtro de idade:

     ```
     LastModified
     ```
3. Bucket é sinalizado quando houver ao menos uma versão não atual que atenda ao critério temporal.

***

**Lógica aplicada**

Um bucket será sinalizado quando:

```
Versioning = Enabled
AND
Existe versão onde:
    IsLatest = False
    AND DeleteMarker != True
    AND Idade atende critério configurado
```

***

**Campos analisados**

Bucket S3:

* `Name`
* `Tags`
* `Versioning.Status`
* `ARN`

Versões analisadas:

* `IsLatest`
* `DeleteMarker`
* `LastModified`

***

**Parâmetros considerados na busca**

APIs utilizadas:

* `s3:ListBuckets`
* `s3:GetBucketTagging`
* `s3:GetBucketVersioning`
* `s3:ListObjectVersions`

Parâmetros configuráveis:

* `period.days`
* `period.operator` (greater\_than / less\_than)
* Filtros de tag

***

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

Período Avaliado: 15 dias

Baseado em:

```
Dias entre agora e LastModified
```

Configuração padrão é de identificar versões desatualizadas de objetos dentro do período de 15 dias, objetos que não estão seguindo a boa prática de marcador de exclusão para versionamento de objetos S3, ajudando a otimizar custos.

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

***

**Calculo de Savings**

Versões não atuais representam custo adicional de armazenamento.

Seguindo o padrão das regras de recurso potencialmente eliminável:

**Fórmula Oficial de Savings**

```sql
sum("lineitem/unblendedcost")
```

**Interpretação**

O savings considera:

* 100% do custo associado ao armazenamento das versões não atuais
* Campo do CUR:

```
lineitem/unblendedcost
```

Serviço relacionado:

```
Amazon Simple Storage Service
```

***

**Exemplo de Impacto**

Cenário:

* Bucket com 3 TB em versões antigas
* Custo mensal associado: $1.800

Savings estimado:

```
$1.800/mês
```

Caso sejam aplicadas políticas de expiração.

***

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

Antes de remover versões:

* Validar se há dependência de rollback.
* Confirmar política de retenção.
* Avaliar requisitos legais.

Boas práticas:

* Implementar lifecycle para:
  * Expirar versões não atuais após X dias
  * Transicionar para Glacier
* Definir padrão organizacional de retenção.
* Monitorar crescimento via S3 Storage Lens.

Exceções possíveis:

* Buckets de compliance.
* Ambientes regulados.
* Requisitos de auditoria.

***
