
# keenauth_attack_protection

Die Ressource `keenauth_attack_protection` verwaltet die Einstellungen des Angriffsschutzes der Umgebung: Brute-Force-Schutz, Drosselung verdächtiger IP-Adressen, Credential Stuffing und Angriffsmodus, Bot-Schutz, kompromittierte Passwörter, Registrierungsschutz, SMS-Betrugsschutz und die Risikorichtlinie.

## Ein Objekt pro Umgebung

Das Angriffsschutz-Objekt existiert einmal pro Umgebung und ist immer vorhanden. Deklarieren Sie die Ressource höchstens einmal pro Provider-Konfiguration. Beim Erstellen der Ressource wird das aktuelle Objekt gelesen und nur das geschrieben, was Ihre Konfiguration ändert. Das Löschen entfernt sie nur aus dem State; die Umgebung behält ihre Schutzeinstellungen, daher lockert ein `destroy` die Sicherheit nie stillschweigend.

## Nur was Sie schreiben, wird verwaltet

Ein Attribut oder eine Gruppe, die Sie weglassen, behält ihren aktuellen Wert. Wird ein Attribut aus der Konfiguration entfernt, behält es seinen letzten Wert. Der State enthält die **effektiven** Werte, also die Standardwerte, Sicherheitsuntergrenzen und Tarifbeschränkungen, die die API angewendet hat. Ein herabgestufter Tarif erscheint daher als Änderung im nächsten `plan`. Listen wie `suspicious_ip_throttling.allowlist` und `sms_protection.allowed_countries` sind Mengen, daher spielt ihre Reihenfolge keine Rolle.

```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
  }
}
```

## Gruppen

| Attribut | Was es steuert |
|---|---|
| `brute_force` | Sperre pro Benutzer nach fehlgeschlagenen Anmeldungen: Modus, Fehlversuche vor einer Sperre, Zählfenster, Sperrdauer, E-Mail-Adresse des Benutzers. |
| `suspicious_ip_throttling` | Limits pro IP-Adresse für fehlgeschlagene Anmeldungen und Registrierungen sowie die CIDR-Allowlist, die ausgenommen ist. |
| `credential_stuffing` | Erkennungsmodus für Credential Stuffing und Angriffsmodus (automatischer Start, Dauer). |
| `bot_protection` | Modus der Bot-Prüfung (`off`, `risk_based`, `always`) und Anbieter. |
| `breached_password` | Was geschieht, wenn bei der Registrierung, bei einer Passwortänderung und bei der Anmeldung ein kompromittiertes Passwort verwendet wird. |
| `signup_protection` | Wegwerf-E-Mail-Adressen, `+`-Unteradressen und die Registrierungen pro Gerät in 30 Tagen. |
| `sms_protection` | Länder, an die SMS gesendet werden dürfen, tägliche Obergrenze und Unterbrecher bei der Conversion. |
| `risk_policy` | Risikomodus, Schwellenwerte für Prüfung und Blockierung, Benachrichtigung bei neuen Geräten. |

## Sicherheitsuntergrenzen und Tarifbeschränkungen

- Werte unter einer Sicherheitsuntergrenze (mehr als 100 Fehlversuche vor einer Sperre, eine Sperre kürzer als 5 Minuten, mehr als 20 Registrierungen pro IP-Adresse und Stunde) werden bereits beim Plan abgelehnt. Die blockierenden Optionen von `breached_password.on_signup` und `on_password_change` sind ebenfalls Untergrenzen.
- `risk_policy.block_threshold` muss größer sein als `risk_policy.challenge_threshold`.
- `risk_policy.mode = "enforce"` benötigt den Tarif Startup oder höher; andernfalls antwortet die API mit `403 plan_feature_unavailable`.
- `block_threshold` und `daily_cap` sind im State `null`, solange sie aus sind. Sobald Sie sie setzen, kann die Konfiguration sie nicht mehr abschalten; verwenden Sie dafür das Dashboard oder die Management-API.
- Allowlist-Einträge sind kanonische Netzadressen wie `203.0.113.0/24`. IPv4-Präfixe, die weiter als /8 gefasst sind, und IPv6-Präfixe, die weiter als /32 gefasst sind, werden abgelehnt.

## Sichere Änderungen

- Eine Aktualisierung sendet nur die geänderten Felder als JSON Merge Patch mit `If-Match`. Hat jemand das Objekt nach dem Plan geändert, antwortet die API mit `412` und nichts ändert sich. Führen Sie `plan` erneut aus.
- Eine Änderung im Dashboard erscheint im nächsten `plan` als Drift, und `apply` macht sie für die von Ihnen verwalteten Attribute rückgängig.
- Aktive Sperren und der Angriffsmodus sind Betriebsvorgänge, keine Konfiguration: Verwenden Sie dafür das Dashboard oder die Management-API (`/v1/attack-protection/lockouts` und `/v1/attack-protection/attack-mode`).

## Import

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