diff --git a/journey/troubleshooting/260227_gateway_slack_events_signature_mismatch_and_500_mapping.md b/journey/troubleshooting/260227_gateway_slack_events_signature_mismatch_and_500_mapping.md index db2fc1e..5cbfcdf 100644 --- a/journey/troubleshooting/260227_gateway_slack_events_signature_mismatch_and_500_mapping.md +++ b/journey/troubleshooting/260227_gateway_slack_events_signature_mismatch_and_500_mapping.md @@ -2,7 +2,7 @@ **작성일**: 2026-02-27 **작성자**: Codex -**상태**: 진행 중 (부분 해결) +**상태**: 진행 중 (핵심 버그 2건 반영 완료, 최종 모니터링 필요) ## 문제 요약 @@ -44,7 +44,7 @@ 2. **2순위**: `gateway /slack/events` 본문 재직렬화(`json=`)로 인한 서명 불일치 가능성 3. **보조 요인 아님**: DB/환경변수 변경은 이번 트리거 직접 증거가 약함 -## 이번에 반영된 수정 (51123만) +## 이번에 반영된 수정 (51123) ### A. 헤더 전달 보강 - `X-Slack-Signature`, `X-Slack-Request-Timestamp` 전달 @@ -56,15 +56,37 @@ - `Content-Type` 전달 추가 - 커밋: `12c06ca` (`fix(slack): preserve raw event body for signature verification`) -## 아직 남은 조치 (미해결 항목) +## 이번에 반영된 수정 (51124, Codex) -1. **rb8001에서 403을 500으로 바꾸지 않도록 예외 분기 수정 필요** -- `except HTTPException as e: raise e` 또는 동등한 분기 필요 -- 현재는 이 미조치로 인증 실패가 계속 500으로 관측됨 +### C. timestamp 파싱 가드 추가 +- 파일: `rb8001/app/router/slack_endpoint.py` +- 변경: `timestamp` 빈값/비정상값(`''`, non-numeric)에서 `float()` 예외가 나지 않도록 방어 +- 커밋: `c1321a7` (`fix(slack): guard invalid slack timestamp parsing`) -2. **실유입 기준 최종 검증** -- 기대 결과: 인증 실패면 `403`, 정상 서명이면 `200` -- 더 이상 `/gateway/slack/events`에서 일괄 `500`이 나오지 않아야 함 +### D. 403 -> 500 재매핑 제거 +- 파일: `rb8001/app/router/slack_endpoint.py` +- 변경: `except HTTPException: raise` 분기 추가로 인증 실패 상태코드(403) 보존 +- 커밋: `b19abbd` (`fix(slack): preserve HTTP status for signature failures`) + +## 51124 배포/검증 결과 (2026-02-27) + +1. **자동배포 반영 확인** +- `git push origin main` 후 `docker ps`에서 `rb8001` 재시작 확인 (`Up 52 seconds (healthy)` 시점 확인) +- `curl http://localhost:8001/health` → `200` + +2. **상태코드 동작 확인** +- 무서명 테스트 요청: `POST /api/slack/events` → `403 {"detail":"Invalid signature"}` +- 기존처럼 `500`으로 재매핑되지 않음 + +3. **실유입 로그 확인** +- `docker logs rb8001` 최근 구간에서 `192.168.219.45 -> POST /api/slack/events`가 `200 OK` 다건 확인 +- `could not convert string to float` 및 `/api/slack/events 500` 재발 로그 미확인 + +## 아직 남은 조치 (최종 운영 확인) + +1. **서명 검증 안정화 최종 모니터링** +- `/gateway/slack/events` 실유입 기준으로 200/403 분포를 24시간 관찰 +- 재발 시 게이트웨이 원문 body 전달(`content=raw_body`) 경로와 nginx 로그를 시각 동기화해 재검증 ## 관련 파일 @@ -73,4 +95,3 @@ - `rb8001/app/router/slack_endpoint.py` - `/var/log/nginx/access.json` - `/mnt/hdd/logs/51124-server/rb8001/rb8001.log` -