基本認証で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を起動しました。

このページの内容