Prometheusは、Prometheusの式ブラウザおよびHTTP APIへの接続にベーシック認証(別名「ベーシック認証」)をサポートしています。
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ファイル(ドキュメント)を作成しましょう。
basic_auth_users:
admin: $2b$12$hNf2lSsxfm0.i4a.1kVpSOVyBCfIB51VRjgBUyv6kdnyTlgWj81Ay
`promtool check web-config web.yml`でそのファイルを検証できます。
$ promtool check web-config web.yml
web.yml SUCCESS
ファイルに複数のユーザーを追加できます。
次のように、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を起動しました。
このドキュメントはオープンソースです。問題の報告やプルリクエストを送信して改善にご協力ください。