엑추에이터 보안 처리를 하다가 마주한 문제를 공유해보려고 합니다.
목차
1. 엑추에이터의 필요성과 아주 조금 알아보기
2. 엑추에이터 보안 처리하기
엑추에이터의 필요성과 아주 조금 알아보기
엑추에이터를 활용하면 에플리케이션 모니터링을 쉽고 빠르게 할 수 있습니다. 쉽게 말해 톰캣 CPU 사용량, JVM 메모시 소모량, 커넥션 풀 상황 등을 쉽게 살펴볼 수 있습니다. 운영 단계가 아니더라도 개발 단계에 테스트를 거치면서 주요 자원들을 효과적으로 사용하고 있는지 여부를 확인할 때도 도움이 될 것이라고 생각합니다.
엑추에이터를 사용하려면 아래 의존성을 추가합니다.
implementation 'org.springframework.boot:spring-boot-starter-actuator'
로컬에서 서버를 작동시켰다면 /actuator 엔드포인트로 엑츄에이터를 살펴 볼 수 있습니다.
이 외에도 더 많은 actuactor 엔드포인트를 사용하려면 properties 혹은 yml 파일에서 엔드포인트를 노출하면 됩니다.
application.properties 추가
management.endpoints.web.exposure.include=*
이외에도 더 많은 엔드포인트를 사용하려면 1. 엔드포인트 활성화 2. 엔드포인트 노출 과정을 설정하면 됩니다.
더 자세한 내용은 공식 문서에서 확인하실 수 있습니다.
엑추에이터 보안 처리하기
엑추에이터를 활성화하고 노출시키면 에플리케이션을 사용하는 모두에게 노출됩니다. 이로 인해 몇 가지 작업이 필요합니다. Actuator 안전하게 사용하기를 참고해보시면 좋을 것 같습니다. 이제 제가 프로젝트를 진행하면서 엑추에이터 보안 처리와 관련하게 알게 된 내용을 말해보려고 합니다.
1. 엑추에이터 엔드포인트는 dispatcherServlet을 호출하지 않습니다.
엑추에이터 엔드포인트는 인터셉터에서 처리되지 않습니다. 이 말은 즉 dispatcherServlet까지 들어오지 않는다는 것인데요. 조금 의아했습니다. 엔드포인트가 존재하면 컨트롤러까지 호출될 것이라고 가정했습니다. 그래서 조금 애먹었어요. 인터셉터, AOP 만으로 공통 처리를 하시는 분들께서 저와 같은 실수를 하지 않기 바라며!
실제로 인터셉터에 들어왔을 때 로깅을 남기고 /actuactor 요청을 보내보았습니다.
작동하지 않습니다. 처음에는 어리둥절해서 몇 번을 다시 시도해봤는데 안되더라구요. 그래서 몇 가지 가설을 세웠습니다.
1. 인터셉터에 적용되는 엔드포인트로 설정되지 않았다.
2. 인터셉터까지 들어오지 않는다.
1번 가설은 경우 인터셉터의 범위가 모든 URI기 때문에 타당하지 않습니다.
2번 가설이기를 간절히 바라면 Filter에서 공통 처리를 해보았습니다. 그리고 2번 가설이 맞다는 것을 알 수 있었습니다.
코드는 아래와 같습니다.
이제 사용자를 만들어서 테스트 해봅시다!
1. USER 권한 actuator 엔드포인트 요청
. 2. ADMIN 권한 actuator 엔드포인트 요청
이를 통해 권한에 따라 사용자 요청이 처리되는 것을 확인하는 것을 확인하였습니다.
'개발일기장' 카테고리의 다른 글
동시성 문제 - 재현 (1) (0) | 2023.04.12 |
---|---|
엑추에이터 접근이 제한된 상태에서 프로메테우스 설정 (0) | 2023.04.11 |
local DB H2에서 MySQL으로 변경 (0) | 2023.04.10 |
Junit5 조금 알은 채 하기 (1) (0) | 2023.04.06 |
[사이드 프로젝트 - xuni] 세션 + (필터, 인터셉터)로 인증 로직 구현하고 테스트 환경 만들기 (0) | 2023.04.04 |