
# 지원 액세스 부여

`POST /v1/support-access-grants` · 권한 `support-access-grants:write`

KeenAuth 지원 담당자에게 이 환경에 대한 기간 제한 액세스를 부여합니다. 예를 들어 지원 티켓을 처리하는 동안 사용합니다. 액세스는 읽기 전용(`read`)이거나 구성 변경도 가능한(`read_write_config`) 방식입니다. 지원 담당자는 최종 사용자 데이터를 쓰지 않습니다. 권한의 모든 사용과 담당자의 모든 작업은 관리 감사 로그에 기록되며 `support_access_grant.created` 이벤트가 게시됩니다. 권한은 최근 5분 이내에 다시 로그인한 `owner` 또는 `admin`만 대시보드에서 생성할 수 있습니다. API 키와 머신 클라이언트는 `403 insufficient_permissions`를 받습니다.

## 요청

| 필드 | 유형 | 필수 | 설명 |
|---|---|---|---|
| `Idempotency-Key` | header | 아니요 | 선택 사항. 16-64자 `[A-Za-z0-9_-]`; 같은 키를 같은 본문으로 반복하면 같은 권한을 반환합니다. |
| `scope` | string | 예 | `read`(읽기 전용) 또는 `read_write_config`(구성 변경도 가능). |
| `duration_hours` | integer | 예 | 시간 단위 기간, 1-72. |
| `ticket_ref` | string | 예 | 지원 티켓 참조: 출력 가능한 ASCII 문자 1-200자, 앞뒤 공백 없음. |
| `allowed_regions_of_staff` | array \| null | 아니요 | Enterprise 전용. 이 리전(`eu`, `us`)에 있는 담당자만 권한을 사용할 수 있습니다. 생략하거나 `null`이면 제한이 없습니다. |

요청 본문:

```json
{
  "scope": "read",
  "duration_hours": 24,
  "ticket_ref": "SUP-48213",
  "allowed_regions_of_staff": ["eu"]
}
```

## 응답

새 권한과 함께 `201 Created`.

```json
{
  "id": "sag_01j9xk3m7q8r2s4t6v8w0y2z4a",
  "scope": "read",
  "status": "active",
  "ticket_ref": "SUP-48213",
  "allowed_regions_of_staff": ["eu"],
  "granted_by": "du_01j9xk2p5n7q9s1t3v5w7y9z1b",
  "created_at": "2026-10-12T09:30:00.123456Z",
  "expires_at": "2026-10-13T09:30:00.123456Z",
  "revoked_at": null
}
```

## 오류

| HTTP | code | 조건 |
|---|---|---|
| 400 | `malformed_request` | 본문이 유효한 JSON이 아니거나 `Idempotency-Key` 형식이 잘못되었습니다. |
| 403 | `insufficient_permissions` | 요청이 대시보드에서 `owner` 또는 `admin`이 보낸 것이 아니거나, 자격 증명에 필요한 권한이 없습니다. |
| 403 | `plan_feature_unavailable` | `allowed_regions_of_staff`에는 Enterprise 플랜이 필요합니다. |
| 422 | `validation_failed` | 필드가 잘못되었습니다(`scope`, 1-72 범위를 벗어난 `duration_hours`, `ticket_ref`, `allowed_regions_of_staff`). |
| 422 | `idempotency_key_reuse` | `Idempotency-Key`가 다른 본문으로 이미 사용되었습니다. |
| 401 | `unauthenticated` | 자격 증명이 없거나 유효하지 않거나 취소되었습니다. |
| 429 | `rate_limited` | 속도 제한을 초과했습니다. `Retry-After` 기간이 지난 후 다시 시도하세요. |
| 503 | `service_unavailable` | 종속 서비스를 일시적으로 사용할 수 없습니다. `Retry-After` 기간이 지난 후 다시 시도하세요. |

## 예제

생성과 취소는 대시보드 작업입니다. 대시보드가 보내는 요청:

```http
POST /v1/support-access-grants
Content-Type: application/json
Idempotency-Key: 2f1c9a7e-5b3d-4e8f-9a6c-1d2e3f4a5b6c

{
  "scope": "read",
  "duration_hours": 24,
  "ticket_ref": "SUP-48213",
  "allowed_regions_of_staff": ["eu"]
}
```
