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)