기본 인증으로 Prometheus API/UI 보호하기

기본 인증으로 Prometheus API/UI 보호하기 (Basic Auth)

이 문서는 Prometheus 인스턴스의 표현식 브라우저HTTP API에 접속할 때 기본 인증(basic auth)을 적용하는 방법을 설명해요. 비밀번호를 bcrypt로 해시해 web.yml 파일에 넣고, Prometheus를 --web.config.file로 시작하면 됩니다.

참고로 이 튜토리얼은 Prometheus 인스턴스로의 기본 인증 연결을 다룹니다. Prometheus 인스턴스에서 스크레이프 대상으로의 연결에도 기본 인증을 쓸 수 있지만, 그것은 다른 설정(scrape_configbasic_auth)입니다.

출처: 문서

본문

Prometheus는 Prometheus 표현식 브라우저HTTP API에 대한 연결에 기본 인증(일명 "basic auth")을 지원합니다.

참고: 이 튜토리얼은 Prometheus 인스턴스에 대한 기본 인증 연결을 다룹니다. 기본 인증은 Prometheus 인스턴스에서 스크레이프 대상으로의 연결에도 지원됩니다.

비밀번호 해시 (Hashing a password)

Prometheus 인스턴스에 접근하는 모든 사용자에게 사용자 이름과 비밀번호를 요구하고 싶다고 해볼게요. 이 예시에서는 사용자 이름으로 admin을 사용하고, 원하는 아무 비밀번호나 고르세요.

먼저 비밀번호의 bcrypt 해시를 생성합니다. 해시된 비밀번호를 만들기 위해 python3-bcrypt를 사용할 거예요.

데비안 계열 배포판을 쓰고 있다면 apt install python3-bcrypt로 설치합니다. 해시된 비밀번호를 만드는 다른 방법도 있지만, 테스트용으로는 웹상의 bcrypt 생성기를 쓸 수도 있습니다.

비밀번호를 물어봐서 해시하는 python3-bcrypt 스크립트는 다음과 같습니다:

import getpass
import bcrypt

password = getpass.getpass("password: ")
hashed_password = bcrypt.hashpw(password.encode("utf-8"), bcrypt.gensalt())
print(hashed_password.decode())

이 스크립트를 gen-pass.py로 저장하고 실행합니다:

$ python3 gen-pass.py

비밀번호를 물어보면:

password:
$2b$12$hNf2lSsxfm0.i4a.1kVpSOVyBCfIB51VRjgBUyv6kdnyTlgWj81Ay

이 예시에서는 "test"를 비밀번호로 사용했습니다. 이 비밀번호를 어딘가 저장해두세요, 다음 단계에서 사용할 거예요!

web.yml 만들기 (Creating web.yml)

다음 내용으로 web.yml 파일(문서)을 만듭니다:

basic_auth_users:
    admin: $2b$12$hNf2lSsxfm0.i4a.1kVpSOVyBCfIB51VRjgBUyv6kdnyTlgWj81Ay

promtool check web-config web.yml로 파일을 검증할 수 있습니다:

$ promtool check web-config web.yml
web.yml SUCCESS

파일에 여러 사용자를 추가할 수도 있습니다.

Prometheus 실행 (Launching Prometheus)

웹 구성 파일로 Prometheus를 다음과 같이 실행합니다:

$ prometheus --web.config.file=web.yml

테스트 (Testing)

cURL로 설정을 확인해보세요. 다음 요청을 시도합니다:

curl --head http://localhost:9090/graph

유효한 사용자 이름과 비밀번호를 제공하지 않았으므로 401 Unauthorized 응답을 반환합니다.

기본 인증으로 Prometheus 엔드포인트(예: /metrics)에 접근하려면 -u 플래그로 올바른 사용자 이름을 주고, 비밀번호 프롬프트에 비밀번호를 입력합니다:

curl -u admin http://localhost:9090/metrics
Enter host password for user 'admin':

그러면 Prometheus 메트릭 출력이 반환되며, 대략 다음과 같습니다:

# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 0.0001343
go_gc_duration_seconds{quantile="0.25"} 0.0002032
go_gc_duration_seconds{quantile="0.5"} 0.0004485
...

요약 (Summary)

이 가이드에서는 web.yml 파일에 사용자 이름과 해시된 비밀번호를 저장하고, Prometheus의 HTTP 엔드포인트에 접근하는 사용자를 인증하기 위해 그 파일의 자격 증명을 쓰도록 Prometheus를 필요한 매개변수로 실행했습니다.

더 알아보기 (Learn more)