
# keenauth_attack_protection

`keenauth_attack_protection` kaynağı ortamın saldırı koruması ayarlarını yönetir: kaba kuvvet, şüpheli IP kısma, kimlik bilgisi doldurma ve saldırı modu, bot koruması, sızmış parolalar, kayıt koruması, SMS dolandırıcılığı koruması ve risk politikası.

## Ortam başına tek nesne

Saldırı koruması nesnesi her ortamda bir kez vardır ve her zaman vardır. Kaynağı bir sağlayıcı yapılandırmasında en çok bir kez tanımlayın. Kaynağı oluşturmak mevcut nesneyi okur ve yalnız yapılandırmanızın değiştirdiklerini yazar. Kaynağı yok etmek onu yalnız durumdan (state) çıkarır; ortam koruma ayarlarını korur, yani `destroy` güvenliği sessizce gevşetmez.

## Yalnız yazdığınız yönetilir

Yazmadığınız bir alan ya da grup mevcut değerini korur. Yapılandırmadan çıkardığınız bir alan son değerini korur. Durum **etkin** değerleri taşır; bunlar API'nin uyguladığı varsayılanlar, güvenlik tabanları ve plan kapılarıdır. Bu yüzden planın düşürülmesi sonraki `plan` çıktısında değişiklik olarak görünür. `suspicious_ip_throttling.allowlist` ve `sms_protection.allowed_countries` gibi listeler kümedir; sıraları önemli değildir.

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

## Gruplar

| Alan | Neyi denetler |
|---|---|
| `brute_force` | Başarısız girişlerden sonra kullanıcı başına kilit: mod, kilitten önceki başarısız deneme sayısı, sayım penceresi, kilit süresi, kullanıcıya e-posta. |
| `suspicious_ip_throttling` | Başarısız giriş ve kayıtlar için IP başına sınırlar ve muaf tutulan CIDR izin listesi. |
| `credential_stuffing` | Kimlik bilgisi doldurma algılama modu ve saldırı modu (otomatik başlama, süre). |
| `bot_protection` | Bot doğrulama modu (`off`, `risk_based`, `always`) ve sağlayıcı. |
| `breached_password` | Sızmış bir parola kayıtta, parola değişiminde ve girişte kullanılırsa ne olacağı. |
| `signup_protection` | Tek kullanımlık e-posta, `+` alt adresleri ve cihaz başına 30 günlük kayıt sayısı. |
| `sms_protection` | SMS gönderilebilecek ülkeler, günlük tavan ve dönüşüm kesicisi. |
| `risk_policy` | Risk modu, ek doğrulama ve engelleme eşikleri, yeni cihaz bildirimi. |

## Güvenlik tabanları ve plan kapıları

- Güvenlik tabanının altındaki değerler (kilitten önce 100'den fazla başarısız deneme, 5 dakikadan kısa kilit, saatte IP başına 20'den fazla kayıt) plan zamanında reddedilir. `breached_password.on_signup` ve `on_password_change` için engelleme seçeneği de tabandır.
- `risk_policy.block_threshold`, `risk_policy.challenge_threshold` değerinden büyük olmalıdır.
- `risk_policy.mode = "enforce"` Startup planı ve üstünü ister; aksi halde API `403 plan_feature_unavailable` döner.
- `block_threshold` ve `daily_cap` kapalıyken durumda `null` olur. Bir kez ayarladıktan sonra yapılandırmayla yeniden kapatılamaz; bunun için pano ya da yönetim API'sini kullanın.
- İzin listesi girdileri `203.0.113.0/24` gibi kanonik ağ adresleridir. /8'den geniş IPv4 ve /32'den geniş IPv6 önekleri reddedilir.

## Güvenli değişiklik

- Güncelleme yalnız değişen alanları `If-Match` ile JSON merge patch olarak gönderir. Plan yapıldıktan sonra nesneyi başka biri değiştirdiyse API `412` döner ve hiçbir şey değişmez. `plan` komutunu yeniden çalıştırın.
- Panoda yapılan bir değişiklik sonraki `plan` çıktısında sapma (drift) olarak görünür ve `apply`, yönettiğiniz alanlar için onu geri alır.
- Etkin hesap kilitleri ve saldırı modu yapılandırma değil işlemdir: bunlar için pano ya da yönetim API'sini (`/v1/attack-protection/lockouts` ve `/v1/attack-protection/attack-mode`) kullanın.

## İçe aktarma

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