
# 攻撃保護の設定を取得

`GET /v1/attack-protection` · 権限 `attack-protection:read`

環境の攻撃保護オブジェクトを返します。ブルートフォース、疑わしいIPの制限、認証情報スタッフィング、ボット保護、漏えいしたパスワード、サインアップ保護、SMS保護、リスクポリシーが含まれます。各セクションには2つのビューがあります。`configured` は書き込んだ値、`effective` は既定値、セキュリティの下限、プランを適用した後の有効な値です。一度も書き込んでいないセクションは `configured: {}` になります。`ETag` レスポンスヘッダーはオブジェクトの内容を識別し、`PUT` と `PATCH` では `If-Match` として送信します。

## リクエスト

この操作にはパス、クエリ、ボディのフィールドはありません。環境は認証情報から決まります。

## レスポンス

オブジェクトと `ETag` ヘッダーを含む `200 OK` です。

```json
{
  "schema_version": 1,
  "brute_force": {
    "configured": {"max_failures": 10},
    "effective": {"mode": "enforce", "max_failures": 10, "window_minutes": 15, "lock_minutes": 15, "notify_user": true}
  },
  "risk_policy": {
    "configured": {"mode": "enforce"},
    "effective": {"mode": "log", "challenge_threshold": 4, "block_threshold": null, "notify_user_on_new_device": true}
  },
  "bot_protection": {
    "configured": {},
    "effective": {"mode": "risk_based", "provider": "altcha"}
  }
}
```

例は短縮されています。すべてのレスポンスには8つのセクション（`brute_force`、`suspicious_ip_throttling`、`credential_stuffing`、`bot_protection`、`breached_password`、`signup_protection`、`sms_protection`、`risk_policy`）がすべて含まれます。この例では、プランにリスクの適用が含まれなくなったため、設定された `enforce` は残りますが `log` と表示されます。

## フィールド

| フィールド | 型 | 範囲または値 | 既定値 | 下限 |
|---|---|---|---|---|
| `brute_force.mode` | 文字列 | `log`、`enforce` | `enforce` | |
| `brute_force.max_failures` | 整数 | 5-100 | 20 | 100 以下 |
| `brute_force.window_minutes` | 整数 | 5-60 | 15 | |
| `brute_force.lock_minutes` | 整数 | 5-60 | 15 | 5 以上 |
| `brute_force.notify_user` | 真偽値 | | `true` | |
| `suspicious_ip_throttling.mode` | 文字列 | `log`、`enforce` | `enforce` | |
| `suspicious_ip_throttling.login_failures_per_ip_per_day` | 整数 | 10-10000 | 100 | |
| `suspicious_ip_throttling.signups_per_ip_per_hour` | 整数 | 1-20 | 20 | 20 以下 |
| `suspicious_ip_throttling.allowlist` | 文字列の配列 | CIDR プレフィックスは最大100件。IPv4 は /8 より、IPv6 は /32 より広くできない | `[]` | |
| `credential_stuffing.mode` | 文字列 | `log`、`enforce` | `enforce` | |
| `credential_stuffing.attack_mode_auto` | 真偽値 | | `true` | |
| `credential_stuffing.attack_mode_duration_minutes` | 整数 | 15-240 | 30 | |
| `bot_protection.mode` | 文字列 | `off`、`risk_based`、`always` | `risk_based` | |
| `bot_protection.provider` | 文字列 | `altcha` | `altcha` | |
| `breached_password.on_signup` | 文字列 | `block` | `block` | `block` |
| `breached_password.on_password_change` | 文字列 | `block` | `block` | `block` |
| `breached_password.on_login` | 文字列 | `require_reset`、`notify` | `require_reset` | |
| `breached_password.notify_user` | 真偽値 | | `true` | |
| `signup_protection.block_disposable_email` | 真偽値 | | `true` | |
| `signup_protection.block_email_subaddress` | 真偽値 | | `false` | |
| `signup_protection.max_signups_per_device_30d` | 整数 | 1-50 | 3 | |
| `sms_protection.allowed_countries` | 文字列の配列 | ISO 3166-1 alpha-2 コードは最大250件 | `[]`（プランの既定値） | |
| `sms_protection.daily_cap` | 整数 \| null | 1-1000000。`null` はプランの値 | `null` | |
| `sms_protection.conversion_breaker` | 真偽値 | | `true` | `true` |
| `risk_policy.mode` | 文字列 | `log`、`enforce`（`enforce` には Startup 以上のプランが必要） | `log` | |
| `risk_policy.challenge_threshold` | 整数 | 3-8 | 4 | |
| `risk_policy.block_threshold` | 整数 \| null | 6-12。`challenge_threshold` より大きいこと。`null` は無効 | `null` | |
| `risk_policy.notify_user_on_new_device` | 真偽値 | | `true` | |

## エラー

| HTTP | コード | 発生条件 |
|---|---|---|
| 401 | `unauthenticated` | 認証情報がない、無効、または失効している。 |
| 403 | `insufficient_permissions` | 認証情報に必要な権限がない。 |
| 429 | `rate_limited` | レート制限を超えました。`Retry-After` の時間が経過してから再試行してください。 |
| 503 | `service_unavailable` | 依存先が一時的に利用できません。`Retry-After` の時間が経過してから再試行してください。 |

## 例

```bash
curl https://api.eu.keenauth.com/v1/attack-protection \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```
