
# 공격 모드 켜기

`POST /v1/attack-protection/attack-mode:activate` · 권한 `attack-protection:write`

`bot_protection.mode`와 `credential_stuffing` 값과 관계없이, 지금부터 `duration_minutes`(15~1,440분) 동안 환경을 공격 모드로 전환합니다. 이후 모든 비밀번호 및 일회용 코드 단계에서 더 강화된 봇 검증을 요구하며, 패스키와 소셜 로그인은 검증하지 않습니다. 자동 트리거보다 먼저 공격을 발견했을 때 사용하세요.

수동 기간이 이미 열려 있으면, 종료 시각이 지금 + `duration_minutes`보다 늦을 경우에만 그 시각으로 연장됩니다. 더 짧은 기간을 지정해도 기존 기간이 더 일찍 끝나지는 않습니다(끝내려면 [`deactivate`](deactivate-attack-mode.md)를 사용하세요). 기간을 여는 경우 `attack_mode_activated` 이벤트와 관리 감사 기록(`attack_mode.activated`)이 기록되며, 연장하는 경우 `attack_mode.extended` 감사 기록이 남습니다. 행위자는 사용 중인 자격 증명입니다. 안전하게 재시도하려면 `Idempotency-Key` 헤더를 보내세요.

## 요청

```json
{ "duration_minutes": 60 }
```

| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
| `duration_minutes` | integer | 예 | 15~1,440. |

## 응답

`200 OK`와 현재 상태가 반환됩니다. 형식은 [`GET /v1/attack-protection/attack-mode`](get-attack-mode.md)와 같습니다.

## 오류

모든 오류는 안정적인 `code`를 담은 `application/problem+json` 본문입니다.

| HTTP | `code` | 발생 시점 |
|---|---|---|
| 400 | `malformed_request` | 본문이 JSON 객체가 아닙니다. |
| 400 | `unknown_field` | 본문에 `duration_minutes` 이외의 필드가 있습니다. |
| 422 | `validation_failed` | `duration_minutes`가 없거나, 정수가 아니거나, 15~1,440 범위를 벗어납니다(`errors[].pointer`는 `/duration_minutes`). |
| 401 | `unauthenticated` | API 키가 없거나, 잘못되었거나, 취소되었습니다. |
| 403 | `insufficient_permissions` | 키에 `attack-protection:write` 권한이 없습니다. |
| 429 | `rate_limited` | 요청 한도를 초과했습니다. `Retry-After`를 따르세요. |
| 503 | `service_unavailable` | 종속 서비스를 일시적으로 사용할 수 없습니다. 나중에 다시 시도하세요. |

## 예제

```bash
curl -X POST https://api.eu.keenauth.com/v1/attack-protection/attack-mode:activate \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 7b2f0c1e-attack-mode-1" \
  -d '{"duration_minutes": 60}'
```

CLI: `keenauth attack-protection attack-mode activate --duration-minutes 60`
