攻撃保護の設定を置き換え
PUT /v1/attack-protection · 権限 attack-protection:write
攻撃保護オブジェクト全体を置き換えます(application/json)。省略したセクションとフィールドは既定値に戻ります。If-Match は必須です。ない場合は 428、古い ETag の場合は 412 が返されます。同じオブジェクトを再度書き込んでも何も書き込まれず、ETag は変わりません。数個のフィールドだけを変更するには PATCH を使用してください。
リクエスト
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
If-Match |
ヘッダー | はい | 最後に読み取ったオブジェクトの ETag。ない場合は 428、古い場合は 412。 |
| ボディ | オブジェクト | はい | 設定するオブジェクト。最大32 KiB。各セクションは任意で、セクション内の各フィールドも任意です。 |
| フィールド | 型 | 範囲または値 | 既定値 | 下限 |
|---|---|---|---|---|
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 |
セキュリティの下限を下回る値は、フィールドの一般的な範囲内であっても 422 below_security_floor で拒否されます。下限はすべての環境を保護するもので、引き下げることはできません。
動作
- 変更は新しいサインインにすぐ適用されます。キャッシュされた設定は同じトランザクション内で無効化されます。
- 監査レコードには、変更されたフィールド名と、変更前および変更後のオブジェクトが含まれます。
レスポンス
攻撃保護の設定を取得 と同じオブジェクトと新しい ETag を含む 200 OK です。
エラー
| HTTP | コード | 発生条件 |
|---|---|---|
| 400 | unknown_field |
セクションまたはフィールドがオブジェクトに含まれていない。errors[] にポインターが一覧表示されます。 |
| 400 | malformed_request |
ボディが有効な JSON ではない、または If-Match ヘッダーの形式が不正。 |
| 401 | unauthenticated |
認証情報がない、無効、または失効している。 |
| 403 | insufficient_permissions |
認証情報に attack-protection:write がない。 |
| 403 | plan_feature_unavailable |
risk_policy.mode が enforce だが、プランに含まれていない。ボディには feature と required_plan が含まれます。 |
| 412 | precondition_failed |
読み取り後にオブジェクトが変更されています。もう一度読み取ってから再試行してください。 |
| 413 | payload_too_large |
オブジェクトが 32 KiB を超えている。 |
| 422 | validation_failed |
値の型が誤っているか範囲外である、または block_threshold が challenge_threshold より大きくない。errors[] にポインターが一覧表示されます。 |
| 422 | below_security_floor |
値がセキュリティの下限を下回っている。errors[] の各項目は、detail でフィールドと下限を示します。 |
| 422 | allowlist_range_too_broad |
許可リストのプレフィックスが、IPv4 では /8、IPv6 では /32 より広い。 |
| 428 | precondition_required |
If-Match がない。 |
| 429 | rate_limited |
レート制限を超えました。Retry-After の時間が経過してから再試行してください。 |
| 503 | service_unavailable |
依存先が一時的に利用できません。Retry-After の時間が経過してから再試行してください。 |
複数の種類のエラーがある場合は、最も重大なものだけが次の順序で返されます: unknown_field、validation_failed、below_security_floor、allowlist_range_too_broad、plan_feature_unavailable。書き込んだ値がレスポンスに戻されることはありません。
例
curl -X PUT https://api.eu.keenauth.com/v1/attack-protection \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
-H "Content-Type: application/json" \
-H 'If-Match: "3f1c9a0b5d7e2a4c6b8d0e1f2a3b4c5d"' \
-d '{"brute_force": {"max_failures": 10, "lock_minutes": 30}, "bot_protection": {"mode": "always"}}'