Saturday, January 18, 2025

[Prometheus – Alerting] – Phần 8: HTTPS và xác thực trong Alertmanager

-

Mở đầu

Alertmanager hỗ trợ xác thực cơ bản và TLS (Transport Layer Security). Điều này cho phép bạn bảo mật giao tiếp và xác thực trong việc quản lý cảnh báo. Trong bài viết này, chúng ta sẽ tìm hiểu về cách cấu hình TLS và xác thực cơ bản trong Alertmanager để đảm bảo tính bảo mật của hệ thống.

TLS cho Giao tiếp HTTP

Để chỉ định file cấu hình web sẽ được nạp, sử dụng tùy chọn --web.config.file.

File cấu hình này được viết dưới định dạng YAML, được định nghĩa bởi chuẩn dữ liệu dưới đây. Dấu ngoặc vuông [] chỉ ra rằng một tham số là tùy chọn. Đối với các tham số không phải danh sách, giá trị được đặt thành giá trị mặc định đã được xác định.

File cấu hình này được đọc mỗi khi có yêu cầu HTTP, chẳng hạn như bất kỳ thay đổi nào trong cấu hình và chứng chỉ sẽ được lấy ngay lập tức.

Các giá trị được đặc định cho các tham số:

  • <boolean>: Một boolean có thể nhận các giá trị true hoặc false.
  • <filename>: Đường dẫn hợp lệ trong thư mục làm việc hiện tại.
  • <secret>: Một chuỗi thông thường là bí mật, như một mật khẩu.
  • <string>: Một chuỗi thông thường.

Dưới đây là cấu hình cho giao tiếp HTTP:

tls_server_config:
  # File chứng chỉ và file khóa cho máy chủ sử dụng để xác thực đối tác.
  cert_file: <filename>
  key_file: <filename>

  # Chính sách máy chủ cho xác thực đối tác. Tương ứng với Chính sách ClientAuth.
  [ client_auth_type: <string> | default = "NoClientCert" ]

  # File chứng chỉ CA cho xác thực chứng chỉ đối tác đến máy chủ.
  [ client_ca_file: <filename> ]

  # Phiên bản TLS tối thiểu được chấp nhận.
  [ min_version: <string> | default = "TLS12" ]

  # Phiên bản TLS tối đa được chấp nhận.
  [ max_version: <string> | default = "TLS13" ]

  # Danh sách các bộ mã hóa được hỗ trợ cho các phiên bản TLS lên đến TLS 1.2. Nếu trống,
  # các bộ mã hóa mặc định của Go sẽ được sử dụng.
  [ cipher_suites:
    [ - <string> ] ]

  # prefer_server_cipher_suites kiểm soát việc máy chủ chọn bộ mã hóa ưa thích của máy khách,
  # hoặc bộ mã hóa ưa thích của máy chủ. Nếu đúng thì sự ưa thích của máy chủ,
  # như được biểu thị trong thứ tự các phần tử trong cipher_suites, sẽ được sử dụng.
  [ prefer_server_cipher_suites: <bool> | default = true ]

  # Các đường cong elliptic sẽ được sử dụng trong giao tiếp ECDHE, theo thứ tự ưa thích.
  [ curve_preferences:
    [ - <string> ] ]

http_server_config:
  # Bật hỗ trợ HTTP/2. Lưu ý rằng HTTP/2 chỉ được hỗ trợ với TLS.
  # Điều này không thể thay đổi trên đường.
  [ http2: <boolean> | default = true ]

  # Danh sách các tiêu đề có thể được thêm vào phản hồi HTTP.
  [ headers:
    # Đặt tiêu đề Content-Security-Policy cho phản hồi HTTP.
    # Bỏ đi nếu trống.
    [ Content-Security-Policy: <string> ]
    # Đặt tiêu đề X-Frame-Options cho phản hồi HTTP.
    # Bỏ đi nếu trống. Các giá trị được chấp nhận là deny và sameorigin.
    [ X-Frame-Options: <string> ]
    # Đặt tiêu đề X-Content-Type-Options cho phản hồi HTTP.
    # Bỏ đi nếu trống. Giá trị được chấp nhận là nosniff.
    [ X-Content-Type-Options: <string> ]
    # Đặt tiêu đề X-XSS-Protection cho tất cả phản hồi.
    # Bỏ đi nếu trống.
    [ X-XSS-Protection: <string> ]
    # Đặt tiêu đề Strict-Transport-Security cho phản hồi HTTP.
    # Bỏ đi nếu trống.
    # Vui lòng đảm bảo rằng bạn sử dụng điều này cẩn thận vì tiêu đề này có thể buộc
    # trình duyệt nạp Prometheus và các ứng dụng khác được lưu trữ trên cùng
    # miền và phụ miền qua HTTPS.
    [ Strict-Transport-Security: <string> ] ]

# Tên người dùng và mật khẩu đã băm có quyền truy cập đầy đủ vào máy chủ web
# qua xác thực cơ bản. Nếu trống, không cần xác thực cơ bản.
# Mật khẩu đã băm bằng bcrypt.
basic_auth_users:
  [ <string>: <secret> ... ]

Giao tiếp Gossip bằng TLS

Để chỉ định xem có sử dụng TLS tương hỗ cho gossip hay không, sử dụng tùy chọn --cluster.tls-config. Cả phía máy chủ và phía máy khách của gossip đều có thể được cấu hình.

Dưới đây là cấu hình cho giao tiếp Gossip:

tls_server_config:
  # File chứng chỉ và file khóa cho máy chủ sử dụng để xác thực đối tác.
  cert_file: <filename>
  key_file: <filename>

  # Chính sách máy chủ cho xác thực đối tác. Tương ứng với Chính sách ClientAuth.
  [ client_auth_type: <string> | default = "NoClientCert" ]

  # File chứng chỉ CA cho xác thực chứng chỉ đối tác đến máy chủ.
  [ client_ca_file: <filename> ]

  # Phiên bản TLS tối thiểu được chấp nhận.
  [ min_version: <string> | default = "TLS12" ]

  # Phiên bản TLS tối đa được chấp nhận.
  [ max_version: <string> | default = "TLS13" ]

  # Danh sách các bộ mã hóa được hỗ trợ cho các phiên bản TLS lên đến TLS 1.2. Nếu trống,
  # các bộ mã hóa mặc định của Go sẽ được sử dụng.
  [ cipher_suites:
    [ - <string> ] ]

  # prefer_server_cipher_suites kiểm soát việc máy chủ chọn bộ mã hóa ưa thích của máy khách,
  # hoặc bộ mã hóa ưa thích của máy chủ. Nếu đúng thì sự ưa thích của máy chủ,
  # như được biểu thị trong thứ tự các phần tử trong cipher_suites, sẽ được sử dụng.
  [ prefer_server_cipher_suites: <bool> | default = true ]

  # Các đường cong elliptic sẽ được sử dụng trong giao tiếp ECDHE, theo thứ tự ưa thích.
  [ curve_preferences:
    [ - <string> ] ]

tls_client_config:
  # Đường dẫn đến file chứng chỉ CA để xác minh chứng chỉ máy chủ.
  [ ca_file: <filepath> ]

  # File chứng chỉ và file khóa cho xác thực chứng chỉ của máy khách đến máy chủ.
  [ cert_file: <filepath> ]
  [ key_file: <filepath> ]

  # Mở rộng tên máy chủ để chỉ định tên của máy chủ.
  [ server_name: <string> ]

  # Vô hiệu hóa việc xác thực chứng chỉ máy chủ.
  [ insecure_skip_verify: <boolean> | default = false ]

Kết luận

TLS và xác thực cơ bản là hai tính năng quan trọng trong Alertmanager để đảm bảo tính bảo mật và xác thực trong quản lý cảnh báo. Việc cấu hình chúng đòi hỏi sự cân nhắc cẩn thận để đảm bảo rằng dữ liệu cảnh báo của bạn được bảo vệ và truyền tải một cách an toàn.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories