기본 인증으로 Prometheus API/UI 보호하기
기본 인증으로 Prometheus API/UI 보호하기 (Basic Auth)
이 문서는 Prometheus 인스턴스의 표현식 브라우저와 HTTP API에 접속할 때 기본 인증(basic auth)을 적용하는 방법을 설명해요. 비밀번호를 bcrypt로 해시해 web.yml 파일에 넣고, Prometheus를 --web.config.file로 시작하면 됩니다.
참고로 이 튜토리얼은 Prometheus 인스턴스로의 기본 인증 연결을 다룹니다. Prometheus 인스턴스에서 스크레이프 대상으로의 연결에도 기본 인증을 쓸 수 있지만, 그것은 다른 설정(scrape_config의 basic_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)
- HTTP 및 TLS 구성 —
tls_server_config등 웹 구성 파일 전체 - promtool —
check web-config검증 - TLS 암호화 가이드 — Prometheus 엔드포인트 TLS 설정
- 스크레이프 설정 — 스크레이프 대상 쪽 기본 인증