ベーシック認証を使用したPrometheus APIおよびUIエンドポイントの保護

Prometheusは、Prometheusの式ブラウザおよびHTTP APIへの接続にベーシック認証(別名「ベーシック認証」)をサポートしています。

注:このチュートリアルでは、Prometheusインスタンス*への*ベーシック認証接続について説明します。ベーシック認証は、Prometheusインスタンス*から*スクレイプターゲットへの接続にもサポートされています。

パスワードのハッシュ化

Prometheusインスタンスにアクセスするすべてのユーザーにユーザー名とパスワードを要求したいとします。この例では、ユーザー名として`admin`を使用し、任意のパスワードを選択します。

まず、パスワードのbcryptハッシュを生成します。ハッシュ化されたパスワードを生成するために、python3-bcryptを使用します。

Debian系のディストリビューションを実行していると仮定して、`apt install python3-bcrypt`を実行してインストールしましょう。ハッシュ化されたパスワードを生成する他の方法も存在します。テストのために、Web上のbcryptジェネレーターを使用することもできます。

これは、python3-bcryptを使用してパスワードの入力を求めてハッシュ化するPythonスクリプトです。

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の作成

次の内容で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の起動

次のように、Web設定ファイルを使用してPrometheusを起動できます。

$ prometheus --web.config.file=web.yml

テスト

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
...

まとめ

このガイドでは、ユーザー名とハッシュ化されたパスワードを`web.yml`ファイルに保存し、PrometheusのHTTPエンドポイントにアクセスするユーザーを認証するためにそのファイルの資格情報を使用するために必要なパラメーターを使用してPrometheusを起動しました。

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