Hermes 키 로테이션 2차 검증 결과 (2026-08-04)
초록
2026-08-04 EROS가 공지한 Hermes 키 3종(NTFY_TOKEN, MEMORY_API_KEY, RHMS_KEY) 로테이션을 실측으로 검증했다. NTFY_TOKEN·MEMORY_API_KEY는 즉시 정상 확인, THESIS_TOKEN은 로테이션 대상이 아니었음을 확인했다. RHMS_KEY는 1차 검증에서 401로 실패했으나, EOS·EROS의 서버측 스코프 반영 이후 동일 값으로 재검증하니 200과 실제 회상 결과를 확인해 최종적으로 3종 전부 완료됐다. 서비스마다 로테이션 무효화 정책이 다르다는 관찰도 기록한다.
Hermes 키 로테이션 2차 검증 결과 (2026-08-04) — v2: 전체 완료
2026-08-04 EROS가 발신한 Hermes 키 3종 로테이션에 대한 실측 검증 기록. v1에서 RHMS_KEY_HERMES만 미해결로 남겼으나, 이후 재검증에서 해결을 확인해 v2로 갱신한다.
0. 배경
이 로테이션은 2026-07-13 §10 git 이력 유출 감사(안건 #17)에 대한 계획적 조치의 연장선이다. 원칙: "새 키는 채팅창으로만 전달, 받으면 즉시 실측 검증(200/401), 구키 무효화까지 확인."
1. 최종 결과 — 3종 전부 확인
| 키 | 대상 서비스 | 검증 방법 | 결과 |
|---|---|---|---|
| NTFY_TOKEN_HERMES | ntfy.hyperbook.com | roops-comm 조회 |
✅ 정상 |
| MEMORY_API_KEY_HERMES | egs2.hyperbook.com | /health (x-api-key) |
✅ 정상 |
| THESIS_TOKEN_HERMES | thesis.hyperbook.com | 빈 payload POST → 422 vs 401 구분 | ✅ 로테이션 대상 아니었음, 기존값 유효 |
| RHMS_KEY_HERMES | ec2.hyperbook.com/rhms | /recall 실호출 |
✅ 재검증에서 확인 (아래 §2) |
2. RHMS_KEY_HERMES — v1의 실패에서 v2의 해결까지
v1 시점(1차 검증): 동일한 키 값으로 아래를 모두 시도했으나 전부 401 Unauthorized였다.
- 헤더: X-Api-Key, x-api-key(소문자), Authorization: Bearer
- 엔드포인트: /rhms/recall, /rhms/bootstrap
레지스트리상 RHMS 운영 주체인 EOS와, 로테이션을 공지한 EROS 양쪽에 서버 쪽 등록 상태 확인을 요청했다.
v2 시점(재검증): 사령관이 동일 키 값을 다시 확인차 전달했고, 같은 값·같은 헤더(X-Api-Key)·
같은 엔드포인트(/rhms/recall)로 재호출하니 HTTP 200과 함께 실제 회상 결과가 반환됐다.
GET https://ec2.hyperbook.com/rhms/recall?agent=hermes&query=test
→ 200, {"query":"test","results":[...3건, hermes 관련 패턴 정상 회상...]}
해석: 키 값 자체는 처음부터 옳았고, 서버 쪽(EC2의 RHMS)에서 hermes 에이전트 스코프 등록이 아직 반영되지 않은 상태에서 우리가 먼저 검증을 시도한 것으로 추정된다. EOS 또는 EROS가 그 사이 등록을 완료·반영해 재검증이 통과했다. 이 시간차는 로그로 정확히 특정하지 못했으나(EOS·EROS 양쪽에 회신 요청은 남겨뒀다), 결과 자체는 재현 가능한 형태(같은 값·같은 호출)로 확인됐다.
3. 부수 관찰 — 서비스마다 다른 로테이션 정책 (v1과 동일)
- NTFY_TOKEN: 로테이션 시 구값 즉시 무효화(단일 활성)
- MEMORY_API_KEY: 신·구값 동시 유효(다중 활성)
- RHMS_KEY: 값 자체는 즉시 유효했으나 서버측 스코프 반영에 시차가 있었던 것으로 추정
세 서비스가 모두 다른 로테이션 거동을 보였다. 다음 로테이션부터는 "실패 시 값을 의심하기 전에 시차 가능성도 함께 고려해 재검증"을 절차에 넣을 필요가 있다.
4. 결론
키 로테이션 2차, 3종 전부 실측으로 확인 완료. "실패했다"는 초기 판정도 최종 결론이 아니라 시점에 따라 달라질 수 있다는 것 — 이번 세션 내내 반복된 교훈(9159a3f 커밋 사례와 동일 구조)이 여기서도 재현됐다. 키 값 자체는 보안 규칙에 따라 이 문서 어디에도 기재하지 않았다.
— Hermes (소통 허브), 2026-08-04
