
# keenauth_attack_protection

La risorsa `keenauth_attack_protection` gestisce le impostazioni di protezione dagli attacchi dell'ambiente: brute force, limitazione degli IP sospetti, credential stuffing e modalità attacco, protezione dai bot, password compromesse, protezione della registrazione, protezione dalle frodi SMS e policy di rischio.

## Un oggetto per ambiente

L'oggetto di protezione dagli attacchi esiste una sola volta per ambiente ed è sempre presente. Dichiara la risorsa al massimo una volta per configurazione del provider. Alla creazione, la risorsa legge l'oggetto corrente e scrive solo ciò che la tua configurazione modifica. La distruzione la rimuove solo dallo stato; l'ambiente mantiene le sue impostazioni di protezione, quindi un `destroy` non allenta mai la sicurezza in silenzio.

## Viene gestito solo ciò che scrivi

Un attributo o un gruppo che ometti mantiene il valore corrente. Rimuovere un attributo dalla configurazione ne mantiene l'ultimo valore. Lo stato contiene i valori **effettivi**, cioè i valori predefiniti, i limiti minimi di sicurezza e i vincoli del piano applicati dall'API, quindi un piano declassato compare come modifica nel `plan` successivo. Le liste come `suspicious_ip_throttling.allowlist` e `sms_protection.allowed_countries` sono insiemi, quindi il loro ordine non conta.

```terraform
resource "keenauth_attack_protection" "this" {
  brute_force = {
    max_failures = 10
    lock_minutes = 30
  }

  suspicious_ip_throttling = {
    allowlist = ["203.0.113.0/24"]
  }

  sms_protection = {
    allowed_countries = ["DE", "TR"]
    daily_cap         = 500
  }

  risk_policy = {
    mode                = "enforce"
    challenge_threshold = 5
    block_threshold     = 8
  }
}
```

## Gruppi

| Attributo | Cosa controlla |
|---|---|
| `brute_force` | Blocco per utente dopo accessi falliti: modalità, tentativi falliti prima di un blocco, finestra di conteggio, durata del blocco, e-mail dell'utente. |
| `suspicious_ip_throttling` | Limiti per IP per accessi e registrazioni falliti, e la allowlist CIDR esentata. |
| `credential_stuffing` | Modalità di rilevamento del credential stuffing e modalità attacco (avvio automatico, durata). |
| `bot_protection` | Modalità della sfida anti-bot (`off`, `risk_based`, `always`) e provider. |
| `breached_password` | Cosa succede quando una password compromessa viene usata in registrazione, al cambio password e all'accesso. |
| `signup_protection` | E-mail temporanee, sottoindirizzi `+` e registrazioni per dispositivo in 30 giorni. |
| `sms_protection` | Paesi verso cui possono essere inviati SMS, tetto giornaliero e interruttore di conversione. |
| `risk_policy` | Modalità di rischio, soglie di sfida e di blocco, notifica di nuovo dispositivo. |

## Limiti minimi di sicurezza e vincoli del piano

- I valori sotto un limite minimo di sicurezza (più di 100 tentativi falliti prima di un blocco, un blocco più breve di 5 minuti, più di 20 registrazioni per IP all'ora) vengono rifiutati già al momento del plan. Anche le scelte bloccanti di `breached_password.on_signup` e `on_password_change` sono limiti minimi.
- `risk_policy.block_threshold` deve essere maggiore di `risk_policy.challenge_threshold`.
- `risk_policy.mode = "enforce"` richiede il piano Startup o superiore; altrimenti l'API risponde `403 plan_feature_unavailable`.
- `block_threshold` e `daily_cap` sono `null` nello stato finché sono disattivati. Una volta impostati, la configurazione non può più disattivarli; per questo usa la dashboard o l'API di gestione.
- Le voci della allowlist sono indirizzi di rete canonici come `203.0.113.0/24`. I prefissi IPv4 più ampi di /8 e i prefissi IPv6 più ampi di /32 vengono rifiutati.

## Modifiche sicure

- Un aggiornamento invia solo i campi modificati come JSON merge patch con `If-Match`. Se qualcuno ha modificato l'oggetto dopo la creazione del plan, l'API risponde `412` e nulla cambia. Esegui di nuovo `plan`.
- Una modifica fatta nella dashboard compare nel `plan` successivo come deriva, e `apply` la ripristina per gli attributi che gestisci.
- I blocchi attivi e la modalità attacco sono operazioni, non configurazione: usa per questi la dashboard o l'API di gestione (`/v1/attack-protection/lockouts` e `/v1/attack-protection/attack-mode`).

## Importazione

```shell
tofu import keenauth_attack_protection.this attack-protection
```
