基本認証でPrometheus APIとUIエンドポイントを保護する
Prometheusは、Prometheusの式ブラウザおよびHTTP APIへの接続に基本認証(別名「基本認証」)をサポートしています。
注このチュートリアルでは、Prometheusインスタンス_への_基本認証接続について説明します。Prometheusインスタンス_から_スクレイプターゲットへの接続にも基本認証がサポートされています。
パスワードのハッシュ化
Prometheusインスタンスにアクセスするすべてのユーザーにユーザー名とパスワードを要求したいとします。この例では、ユーザー名として`admin`を使用し、任意のパスワードを選択してください。
まず、パスワードのbcryptハッシュを生成します。ハッシュ化されたパスワードを生成するには、python3-bcryptを使用します。
Debianのようなディストリビューションを実行していると仮定して、`apt install python3-bcrypt`を実行してインストールします。ハッシュ化されたパスワードを生成する他の方法も存在します。テストのために、ウェブ上の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 https://:9090/graph
有効なユーザー名とパスワードが提供されなかったため、`401 Unauthorized`応答が返されます。
基本認証を使用してPrometheusエンドポイント(例えば`/metrics`エンドポイント)に正常にアクセスするには、`-u`フラグを使用して適切なユーザー名を指定し、プロンプトが表示されたらパスワードを入力します。
curl -u admin https://: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を起動しました。