엑추에이터 접근이 제한된 상태에서 프로메테우스 설정
엑추에이터에는 중요한 정보들이 담길 가능성이 높습니다. 그래서 접근을 제한해야 합니다.
영한님의 스프링 부트 강의에 따르면 일반적으로 내부망을 사용해서 접근을 제한하거나 에플리케이션 단에서 보안 처리를 한다고 하셨다. 내부망을 설치하기에는 많이 빙빙 돌아가는 것 같아서 애플리케이션 단에서 처리해보겠습니다.
목차
1. 프로메테우스 의존성을 추가하자.
2. 프로메테우스에서 요청을 보낼 때 토큰을 보내는 방식 bearer_token
1. 프로메테우스 의존성을 추가하자.
지표를 못 받아오길래 뭔가 싶었다. 생각해보니 의존성을 추가하지 않았다. 머쓱.. 꼭 프로메테우스를 추가하자.
implementation 'io.micrometer:micrometer-registry-prometheus'
2. 프로메테우스에서 요청을 보낼 때 토큰을 보내는 방식 bearer_token
엑추에이터 엔드포인트에 인가를 부여하자! 해당 포스팅에서는 엑추에이터 엔드포인트에 무분별한 접근을 막기 위해 ADMIN 인가 설정을 해놓았습니다. 프로메테우스의 기본 설정을 따르면 15초마다 서버에 요청을 보내는데요. 당연히 ADMIN을 분별할 토큰이 없기 때문에 아래와 같은 에러가 발생합니다.
프로메테우스 DOCS 문서는 꽤나 불친절 한 것 같아요. (스프링은 선녀야!) token, authorization 키워드로 검색을 해봐도 딱히 원하는 결과를 얻을 순 없었습니다.
그래서 프로메테우스 설정 파일을 들쑤셔봤습니다. 설정 파일은 프로메테우스를 다운받으면 prometheus.yml 파일이 존재합니다.
Authorization 헤더를 보통 사용하니까 authorization 입력해봤어요. IDE계의 GOAT 인텔리제이가 설명까지 해주네요.
굉장히 그럴듯한 기능이라고 생각했는데 잘 되지 않더라구요. 그래서 chatgpt에게 물어봤습니다.
한 가지 주의할 점은 보통 token에 Bearer Prefix와 함께 담아 보내는데요. Bearer를 떼고 보내시면 됩니다. bearer_token은 요청 시 입력한 토큰 값이 Prefix로 Bearer 붙여보내기 때문입니다.
예시) Bearer A2DWE243C17... (X) / A2DWE243C17... (O)
이제 프로메테우스에서 정상 응답을 받아서 그라파나를 통해 지표도 확인할 수 있습니다.
이제 요청을 받지 못하는 문제는 해결했지만 토큰의 유효 시간 문제가 남았습니다.
현재 토큰 검증 로직에는 유효 시간을 검증합니다. 그렇기 때문에 유효 시간이 만료되면 설정파일에서 토큰을 생성해 주입해야합니다.
우선, Actuator 엔드포인트에 접근할 때는 토큰 검증 시 아래 로직을 제외하는 방법이 가장 먼저 떠오릅니다.
우선 이 방법을 고려중이지만 더 좋은 방법이 있을수도 있기 때문에 로컬 환경에서는 토큰 유효시간을 길게 잡아 토큰 값을 변경해야하는 귀찮음을 줄이려고 합니다.