서명 키 정책 업데이트
PATCH /v1/signing-keys/policy · 권한 signing-keys:write
JSON merge patch(application/merge-patch+json, RFC 7396)로 서명 키 정책을 업데이트합니다. If-Match는 필수입니다. 없으면 428, 오래된 버전이면 412입니다. 정책이 한 번도 작성되지 않았다면 버전은 "0"입니다. 아무것도 바꾸지 않는 패치는 쓰기를 하지 않고 버전을 유지합니다.
algorithm을 바꾸면 새 알고리즘으로 새 next 키가 즉시 생성됩니다. JWKS를 캐시하는 검증자가 먼저 볼 수 있도록 이 키는 빨라야 7일 후에 활성화될 수 있습니다(그보다 이른 immediate 교체는 409 next_key_too_young으로 실패). 그때까지 활성 키가 계속 서명합니다. rotation_interval_days를 바꾸면 next_rotation_at이 이동합니다. 변경이 성공하면 signing_key.policy_updated 관리 감사 기록이 작성됩니다.
요청
| 필드 | 유형 | 필수 | 설명 |
|---|---|---|---|
If-Match |
header | 예 | 마지막으로 읽은 정책의 ETag(한 번도 작성되지 않았다면 "0"). 없으면 428, 오래되었으면 412. |
algorithm |
string | 아니오 | RS256, ES256, PS256 또는 EdDSA. null일 수 없습니다. |
rotation_interval_days |
integer | 아니오 | 30-365. null일 수 없습니다. |
storage |
string | 아니오 | wrapped(개인 키는 환경 키로 암호화되어 저장되며 서명 서비스 내부에서만 사용됨). transit(키 관리 서비스에 보관되는 키)은 아직 사용할 수 없으며 422로 거부됩니다. null일 수 없습니다. |
응답
200 OK와 업데이트된 정책, 새 ETag.
{
"algorithm": "ES256",
"rotation_interval_days": 90,
"storage": "wrapped",
"next_rotation_at": "2026-12-04T09:30:00.123456Z",
"updated_at": "2026-10-05T09:30:00.123456Z"
}
오류
| HTTP | code | 조건 |
|---|---|---|
| 400 | unknown_field |
패치에 미알려진 필드나 읽기 전용 필드가 있거나 JSON 객체가 아닙니다(malformed_request). |
| 412 | precondition_failed |
If-Match가 현재 버전과 일치하지 않습니다. |
| 415 | unsupported_media_type |
콘텐츠 유형이 application/merge-patch+json이 아닙니다. |
| 422 | validation_failed |
값이 잘못되었거나(invalid_value), 범위를 벗어났거나(out_of_range), null로 설정되었거나(invalid), storage가 transit입니다. |
| 428 | precondition_required |
If-Match 헤더가 누락되었습니다. |
| 401 | unauthenticated |
자격 증명이 누락되었거나, 잘못되었거나, 취소되었습니다. |
| 403 | insufficient_permissions |
자격 증명에 필요한 권한이 없습니다. |
| 429 | rate_limited |
속도 제한을 초과했습니다. Retry-After 기간 후에 다시 시도하세요. |
| 501 | not_implemented |
이 배포에서는 아직 작업을 사용할 수 없습니다. 다시 시도해도 결과는 바뀌지 않습니다. |
| 503 | service_unavailable |
종속성을 일시적으로 사용할 수 없습니다. Retry-After 기간 후에 다시 시도하세요. |
예제
curl -X PATCH https://api.eu.keenauth.com/v1/signing-keys/policy \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
-H "Content-Type: application/merge-patch+json" \
-H 'If-Match: "0"' \
-d '{"algorithm":"ES256","rotation_interval_days":90}'