# IAM: Funções IAM Não Utilizadas

> Esta regra identifica IAM Roles customizadas que não foram utilizadas recentemente ou que foram criadas há um período superior ao configurado sem registro de uso.
>
> O objetivo é detectar roles obsoletas que aumentam a superfície de ataque e a complexidade de governança do ambiente.

***

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

IAM Roles são amplamente utilizadas para:

* Assumir permissões temporárias
* Execução de workloads (EC2, Lambda, ECS, EKS)
* Integrações cross-account
* Automação

Com o tempo, é comum acumular roles que:

* Foram criadas para projetos temporários
* Pertenciam a aplicações descontinuadas
* Foram substituídas por novas roles
* Nunca chegaram a ser utilizadas

Manter roles não utilizadas pode:

* Aumentar risco de exploração indevida
* Dificultar auditoria
* Elevar complexidade de segurança
* Violar princípio de menor privilégio

***

**Detalhamento técnico da regra**

A regra executa análise global da conta AWS (IAM é serviço global).

***

**Como a regra é executada**

1. Autentica na conta AWS.
2. Lista todas as roles via `list_roles`.
3. Filtra apenas roles customizadas:
   * Exclui roles gerenciadas pela AWS:

     ```
     arn:aws:iam::aws:
     ```
4. Para cada role:
   * Recupera as tags via `list_role_tags`.
   * Aplica filtros de tag (inclusão/exclusão).
   * Verifica:
     * `RoleLastUsed.LastUsedDate`
     * `CreateDate`
5. Calcula diferença de dias em relação à data atual.
6. Se a role:
   * Não foi utilizada dentro do período configurado
   * E não foi criada recentemente → A role é sinalizada.

***

**Lógica aplicada**

Uma role será considerada não utilizada quando:

```
(LastUsedDate inexistente OU Último uso > período configurado)
E
CreateDate > período configurado
```

Se a role foi criada recentemente dentro do período definido, ela não é sinalizada.

Se houve uso recente dentro do período definido, ela não é sinalizada.

***

**Campos analisados**

IAM Role:

* `RoleName`
* `Arn`
* `CreateDate`
* `RoleLastUsed.LastUsedDate`
* `Tags`

***

**Parâmetros considerados na busca**

APIs utilizadas:

* `iam:ListRoles`
* `iam:ListRoleTags`

Condições técnicas:

* Exclusão de roles AWS-managed.
* Comparação de datas baseada em `self.checker.period.days`.

***

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

Período Avaliado (Filtro Temporal): A regra avalia:

* A data de criação da role (`CreateDate`)
* A última utilização da role (`RoleLastUsed.LastUsedDate`)

O intervalo de análise corresponde ao número de dias configurado na regra.

Padrão configurado configurado é para 30 dias, qualquer role que não tenha sido utilizada nos últimos 30 dias e que também não tenha sido criada nesse período será considerada não utilizada.

> 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 direto de savings.

Está alinhada com:

* AWS Security Best Practices
* AWS Well-Architected Framework – Pilar de Segurança
* Princípio de menor privilégio
* Gestão de ciclo de vida de identidades

***

**Riscos associados**

* Roles esquecidas com permissões elevadas.
* Possível uso indevido por credenciais comprometidas.
* Complexidade de auditoria.
* Exposição desnecessária de políticas sensíveis.

***

**Exemplo prático**

Configuração da regra:

```
Período = 30 dias
```

Role:

* Criada há 2 anos
* Último uso há 30 dias

Resultado:

Role será sinalizada como não utilizada.

***

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

* Validar dependências antes de remover.
* Desabilitar temporariamente antes da exclusão definitiva.
* Revisar permissões anexadas.
* Implementar revisão periódica de roles.
* Utilizar naming convention clara.
* Automatizar processo de limpeza de identidades obsoletas.

Possíveis exceções:

* Roles utilizadas esporadicamente.
* Roles de contingência.
* Integrações cross-account pouco frequentes.

Recomenda-se validação técnica antes da remoção definitiva.
