TLS暗号化を使用したPrometheus APIおよびUIエンドポイントの保護

Prometheusは、Prometheusインスタンスへの接続(つまり、式ブラウザまたはHTTP APIへの接続)にトランスポート層セキュリティ(TLS)暗号化をサポートしています。これらの接続にTLSを強制したい場合は、特定のWeb構成ファイルを作成する必要があります。

注: このガイドは、PrometheusインスタンスへのTLS接続に関するものです。TLSは、Prometheusインスタンスからスクレイプターゲットへの接続にもサポートされています。

前提条件

すでにPrometheusインスタンスが起動して実行されており、それを適応させたいとします。このガイドでは、初期のPrometheus設定については扱いません。

TLSでサービス提供され、example.comドメイン(所有している)で利用可能なPrometheusインスタンスを実行したいとします。

また、OpenSSLまたは類似のツールを使用して、以下を生成したとします。

  • /home/prometheus/certs/example.com/example.com.crtにあるSSL証明書
  • /home/prometheus/certs/example.com/example.com.keyにあるSSLキー

次のコマンドを使用して、自己署名証明書と秘密キーを生成できます。

mkdir -p /home/prometheus/certs/example.com && cd /home/prometheus/certs/certs/example.com
openssl req \
  -x509 \
  -newkey rsa:4096 \
  -nodes \
  -keyout example.com.key \
  -out example.com.crt

プロンプトで適切な情報を入力し、Common Nameプロンプトでexample.comを入力してください。

Prometheusの設定

以下は、web-config.yml構成ファイルの例です。この構成を使用すると、PrometheusはすべてのエンドポイントをTLSの背後でサービス提供します。

tls_server_config:
  cert_file: /home/prometheus/certs/example.com/example.com.crt
  key_file: /home/prometheus/certs/example.com/example.com.key

Prometheusにこの構成を使用させるには、フラグ--web.config.fileを指定して呼び出す必要があります。

prometheus \
  --config.file=/path/to/prometheus.yml \
  --web.config.file=/path/to/web-config.yml \
  --web.external-url=https://example.com/

--web.external-url=フラグはここではオプションです。

テスト

example.comドメインを使用してTLSをローカルでテストする場合は、/etc/hostsファイルにexample.comlocalhostにリダイレクトするエントリを追加できます。

127.0.0.1     example.com

その後、cURLを使用してローカルのPrometheusセットアップと対話できます。

curl --cacert /home/prometheus/certs/example.com/example.com.crt \
  https://example.com/api/v1/label/job/values

--insecureまたは-kフラグを使用して、証明書を指定せずにPrometheusサーバーに接続できます。

curl -k https://example.com/api/v1/label/job/values

このドキュメントはオープンソースです。問題やプルリクエストを提出して改善にご協力ください。