Skip to content

actuator 메트릭 관리자 인증 경로 보강 - #811

Merged
Cassiiopeia merged 1 commit into
mainfrom
20260727_#806_actuator_메트릭_관리자_인증_경로_보강
Jul 31, 2026

Hidden character warning

The head ref may contain hidden characters: "20260727_#806_actuator_\uba54\ud2b8\ub9ad_\uad00\ub9ac\uc790_\uc778\uc99d_\uacbd\ub85c_\ubcf4\uac15"
Merged

Cassiiopeia merged 1 commit into
mainfrom
20260727_#806_actuator_메트릭_관리자_인증_경로_보강

Conversation

@Cassiiopeia

@Cassiiopeia Cassiiopeia commented Jul 31, 2026

Copy link
Copy Markdown
Member

문제

PR #807 배포 후 운영에서 실측한 결과, /actuator/prometheus/actuator/metrics관리자 토큰으로도 403이 나서 아무도 접근할 수 없는 상태였습니다.

관리자 JWT(payload에 "role":"ROLE_ADMIN" 확인) → /actuator/prometheus  → 403
같은 토큰                                    → /api/admin/logs/files  → 500 (핸들러 도달 = 인가는 통과)
미인증                                       → /actuator/health       → 200 (정상)

원인

두 인증 필터 모두 /actuator/*를 처리하지 않습니다.

  • TokenAuthenticationFilter:59uri.startsWith("/api/")인 경우에만 Bearer 토큰을 읽음
  • AdminJwtAuthenticationFilter/admin, /api/admin, Swagger 경로만 처리

그 결과 /actuator/* 요청은 인증 주체가 설정되지 않은 채 hasRole("ADMIN") 검사에 도달하고, 익명 사용자로 판정돼 403이 됩니다.

PR #807이 메트릭 엔드포인트를 ADMIN_PATHS로 옮기면서 드러난 문제입니다. 이 상태로는 PR #807의 목적인 "개선 효과를 메트릭으로 측정"이 불가능합니다.

수정

AdminJwtAuthenticationFilter/actuator/ 경로도 처리하도록 확장했습니다. 이 필터는 이미 Swagger(/docs/**, /v3/api-docs/**)라는 비-/api 경로를 같은 방식으로 다루고 있어, 그 패턴을 그대로 따랐습니다.

/actuator/health는 필터의 화이트리스트 체크가 프리픽스 체크 뒤에 있어 여전히 미인증 200입니다. Dockerfile HEALTHCHECK와 Traefik 블루/그린 전환에 영향이 없습니다.

검증

ConfigBindingTest(실기동 통합 테스트, RANDOM_PORT) 6개 통과:

  • 관리자 로그인 후 /actuator/prometheus200이고 본문에 hikaricp_, jvm_ 지표 포함
  • 미인증 /actuator/prometheus → 접근 거부
  • 미인증 /actuator/health → 200

관리자 자격증명은 admin.yml에서 @Value로 주입받아 씁니다. 테스트 코드에 하드코딩하지 않았습니다.

테스트 컨텍스트에 @AutoConfigureObservability(tracing = false)를 추가했습니다. @SpringBootTest가 기본으로 메트릭 export를 끄기 때문이며, 이를 되돌리는 Spring Boot 공식 수단입니다. 프로덕션 설정은 변경하지 않았습니다.

보안 리뷰 결과

  • /actuator/health 미인증 200 유지 — 코드 추적 + 통합 테스트 양쪽 확인
  • 필터의 filterChain.doFilter() 탈출 경로 4개 전수 추적 — 인증 우회 없음
  • 일반 회원 토큰도 차단됨 (TokenAuthenticationFilter가 비-/api/ 경로에 인증 주체를 세우지 않으므로 ROLE_ADMIN 검사에서 401)
  • 뮤테이션 검증: 이 수정을 되돌리면 신규 테스트가 운영에서 관측된 증상(403)과 동일하게 실패

남은 후속 작업

  1. 일반 회원 토큰의 메트릭 접근 차단 회귀 테스트 — 현재 동작은 정상이나, ROLE_ADMIN 검사가 나중에 제거되면 잡아낼 테스트가 없습니다.
  2. 실제 Prometheus 스크레이퍼 운용 설계 — 지금은 만료되는 관리자 JWT를 요구해 스크레이퍼가 붙을 수 없습니다. 현재 수동 계측에는 문제없지만, 스크레이퍼 도입 전에 정적 크리덴셜 경로나 네트워크 레벨 제한이 필요합니다.

Summary by CodeRabbit

  • 개선 사항
    • /actuator/ 엔드포인트에 관리자 인증을 적용했습니다.
    • 인증되지 않은 Actuator 요청은 일관된 JSON 오류 응답으로 처리됩니다.
    • 관리자 인증 후 Prometheus 메트릭에 접근할 수 있습니다.
    • HikariCP 및 JVM 관련 메트릭이 정상적으로 제공됩니다.

@Cassiiopeia
Cassiiopeia merged commit 084e495 into main Jul 31, 2026
2 of 3 checks passed
@coderabbitai

coderabbitai Bot commented Jul 31, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 3470eaec-5324-4417-ab5b-0e675e380f63

📥 Commits

Reviewing files that changed from the base of the PR and between 4bab77e and 7b18ed6.

📒 Files selected for processing (2)
  • RomRom-Domain-Auth/src/main/java/com/romrom/auth/filter/AdminJwtAuthenticationFilter.java
  • RomRom-Web/src/test/java/com/romrom/web/config/ConfigBindingTest.java

Walkthrough

관리자 인증 필터가 /actuator/ 요청을 인증 대상으로 처리한다. Actuator 인증 오류는 API 오류 응답을 사용한다. 통합 테스트는 관리자 토큰으로 Prometheus 메트릭 접근과 HikariCP·JVM 메트릭 포함 여부를 검증한다.

Changes

Actuator 인증 및 관측성

Layer / File(s) Summary
Actuator 관리자 인증 분류
RomRom-Domain-Auth/src/main/java/com/romrom/auth/filter/AdminJwtAuthenticationFilter.java
/actuator/ 경로를 관리자 인증 대상에 포함한다. Actuator 요청의 인증 오류를 API 응답 흐름으로 처리한다.
Prometheus 인증 통합 테스트
RomRom-Web/src/test/java/com/romrom/web/config/ConfigBindingTest.java
관측성 자동 설정을 활성화한다. 관리자 로그인으로 access token을 발급받는다. /actuator/prometheus의 상태 코드와 HikariCP·JVM 메트릭을 검증한다.

Estimated code review effort: 3 (Moderate) | ~15–30 minutes

Possibly related PRs

Suggested reviewers: discipline24

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch 20260727_#806_actuator_메트릭_관리자_인증_경로_보강

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant