HTTPS 및 인증
HTTPS 및 인증 (HTTPS and authentication)
Alertmanager는 기본 인증(basic authentication)과 TLS를 지원해요. 이 기능은 실험적이며 향후 변경될 수 있습니다. 현재 TLS는 HTTP 트래픽과 gossip 트래픽 모두에 대해 지원됩니다.
웹 구성은 --web.config.file 플래그로 지정한 파일에서 로드하며, 이 파일은 HTTP 요청마다 다시 읽혀서 설정과 인증서 변경이 즉시 반영됩니다.
출처: 문서
본문
Alertmanager는 기본 인증과 TLS를 지원합니다. 이는 실험적이며 향후 변경될 수 있습니다.
현재 TLS는 HTTP 트래픽과 gossip 트래픽 모두에 대해 지원됩니다.
HTTP 트래픽
로드할 웹 구성 파일을 지정하려면 --web.config.file 플래그를 사용합니다.
이 파일은 아래에서 설명하는 스키마로 정의되는 YAML 형식으로 작성됩니다. 대괄호([...])는 파라미터가 선택적임을 나타내요. 리스트가 아닌 파라미터의 경우 값은 지정된 기본값으로 설정됩니다.
이 파일은 매 HTTP 요청마다 읽히므로, 구성이나 인증서의 어떤 변경도 즉시 반영됩니다.
일반적인 플레이스홀더는 다음과 같이 정의됩니다:
<boolean>:true또는false값을 가질 수 있는 부울.<filename>: 현재 작업 디렉터리의 유효한 경로.<secret>: 비밀번호 같은 비밀 문자열.<string>: 일반 문자열.
tls_server_config:
# 서버가 클라이언트에 인증하기 위해 사용하는 인증서 및 키 파일.
cert_file: <filename>
key_file: <filename>
# 클라이언트 인증을 위한 서버 정책. ClientAuth Policies에 매핑됨.
# clientAuth 옵션에 대한 자세한 내용:
# https://golang.org/pkg/crypto/tls/#ClientAuthType
#
# 참고: 클라이언트 인증을 활성화하려면
# RequireAndVerifyClientCert를 사용해야 합니다. 다른 값은 안전하지 않습니다.
[ client_auth_type: <string> | default = "NoClientCert" ]
# 서버에 대한 클라이언트 인증서 인증용 CA 인증서.
[ client_ca_file: <filename> ]
# 클라이언트 인증서에 이 목록의 항목과 정확히 일치하는
# SAN(Subject Alternate Name)이 있는지 검증하고, 아니면 연결을 종료.
# SAN 매치는 다음 중 하나 또는 여러 개일 수 있음: DNS, IP, e-mail,
# 또는 https://pkg.go.dev/crypto/x509#Certificate의 URI 주소.
[ client_allowed_sans:
[ - <string> ] ]
# 허용되는 최소 TLS 버전.
[ min_version: <string> | default = "TLS12" ]
# 허용되는 최대 TLS 버전.
[ max_version: <string> | default = "TLS13" ]
# TLS 1.2까지의 TLS 버전을 위한 지원 암호 스위트 목록. 비어 있으면
# Go 기본 암호 스위트가 사용됨. 사용 가능한 암호 스위트는 Go 문서에 설명되어 있음:
# https://golang.org/pkg/crypto/tls/#pkg-constants
#
# 참고: 다음 함수가 반환하는 암호만 지원됩니다:
# https://pkg.go.dev/crypto/tls#CipherSuites
[ cipher_suites:
[ - <string> ] ]
# prefer_server_cipher_suites는 서버가 클라이언트가 가장 선호하는
# ciphersuite를 선택할지, 서버가 가장 선호하는 ciphersuite를 선택할지를 제어.
# true이면 cipher_suites의 요소 순서로 표현된 서버의 선호도가 사용됨.
[ prefer_server_cipher_suites: <boolean> | default = true ]
# ECDHE 핸드셰이크에 사용될 타원 곡선(선호 순서). 사용 가능한 곡선은 Go 문서에 설명:
# https://golang.org/pkg/crypto/tls/#CurveID
[ curve_preferences:
[ - <string> ] ]
http_server_config:
# HTTP/2 지원 활성화. HTTP/2는 TLS에서만 지원됨에 유의.
# 이 값은 즉석에서 변경할 수 없음.
[ http2: <boolean> | default = true ]
# HTTP 응답에 추가할 수 있는 헤더 목록.
[ headers:
# HTTP 응답에 Content-Security-Policy 헤더 설정.
# 비어 있으면 설정하지 않음.
[ Content-Security-Policy: <string> ]
# HTTP 응답에 X-Frame-Options 헤더 설정.
# 비어 있으면 설정하지 않음. 허용 값은 deny와 sameorigin.
# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
[ X-Frame-Options: <string> ]
# HTTP 응답에 X-Content-Type-Options 헤더 설정.
# 비어 있으면 설정하지 않음. 허용 값은 nosniff.
# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options
[ X-Content-Type-Options: <string> ]
# 모든 응답에 X-XSS-Protection 헤더 설정.
# 비어 있으면 설정하지 않음.
# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection
[ X-XSS-Protection: <string> ]
# HTTP 응답에 Strict-Transport-Security 헤더 설정.
# 비어 있으면 설정하지 않음.
# 이 헤더가 브라우저로 하여금 같은 도메인과 서브도메인에 호스팅된
# Prometheus와 다른 애플리케이션을 HTTPS로 로드하도록 강제할 수 있으므로
# 주의해서 사용하세요.
# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security
[ Strict-Transport-Security: <string> ] ]
# 기본 인증을 통해 웹 서버에 대한 전체 접근 권한을 가진 사용자 이름과
# 해시된 비밀번호. 비어 있으면 기본 인증이 필요하지 않음.
# 비밀번호는 bcrypt로 해시됨.
basic_auth_users:
[ <string>: <secret> ... ]
Gossip 트래픽
gossip에 상호 TLS를 사용할지 지정하려면 --cluster.tls-config 플래그를 사용합니다.
gossip의 서버 쪽과 클라이언트 쪽 모두 구성 가능합니다.
tls_server_config:
# 서버가 클라이언트에 인증하기 위해 사용하는 인증서 및 키 파일.
cert_file: <filename>
key_file: <filename>
# 클라이언트 인증을 위한 서버 정책. ClientAuth Policies에 매핑됨.
# clientAuth 옵션에 대한 자세한 내용:
# https://golang.org/pkg/crypto/tls/#ClientAuthType
[ client_auth_type: <string> | default = "NoClientCert" ]
# 서버에 대한 클라이언트 인증서 인증용 CA 인증서.
[ client_ca_file: <filename> ]
# 허용되는 최소 TLS 버전.
[ min_version: <string> | default = "TLS12" ]
# 허용되는 최대 TLS 버전.
[ max_version: <string> | default = "TLS13" ]
# TLS 1.2까지의 TLS 버전을 위한 지원 암호 스위트 목록. 비어 있으면
# Go 기본 암호 스위트가 사용됨. 사용 가능한 암호 스위트는 Go 문서에 설명되어 있음:
# https://golang.org/pkg/crypto/tls/#pkg-constants
[ cipher_suites:
[ - <string> ] ]
# prefer_server_cipher_suites는 서버가 클라이언트가 가장 선호하는
# ciphersuite를 선택할지, 서버가 가장 선호하는 ciphersuite를 선택할지를 제어.
# true이면 cipher_suites의 요소 순서로 표현된 서버의 선호도가 사용됨.
[ prefer_server_cipher_suites: <boolean> | default = true ]
# ECDHE 핸드셰이크에 사용될 타원 곡선(선호 순서). 사용 가능한 곡선은 Go 문서에 설명:
# https://golang.org/pkg/crypto/tls/#CurveID
[ curve_preferences:
[ - <string> ] ]
tls_client_config:
# 서버 인증서를 검증할 CA 인증서 경로.
[ ca_file: <filename> ]
# 서버에 대한 클라이언트 인증서 인증용 인증서 및 키 파일.
[ cert_file: <filename> ]
[ key_file: <filename> ]
# 서버 이름을 나타내는 서버 이름 확장.
# http://tools.ietf.org/html/rfc4366#section-3.1
[ server_name: <string> ]
# 서버 인증서 검증 비활성화.
[ insecure_skip_verify: <boolean> | default = false]
더 알아보기 (Learn more)
- Alertmanager 설정 문서 — 전체 Alertmanager YAML 설정 참고
- 고가용성 문서 — 클러스터 gossip 트래픽과 상호 TLS 사용
- 관리 API 문서 — 관리 API 사용법
- Go crypto/tls ClientAuthType — 클라이언트 인증 정책 세부 옵션