Prometheus API および UI エンドポイントの Basic Auth による保護

Prometheus は、Prometheus 式ブラウザおよび HTTP API への接続に、Basic 認証 (「basic auth」とも呼ばれる) をサポートしています。

このチュートリアルでは、Prometheus インスタンスの Basic Auth 接続について説明します。Basic Auth は、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 https://:9090/graph

有効なユーザー名とパスワードを指定していないため、401 Unauthorized という応答が返されます。

Prometheus エンドポイントに Basic Auth を使用して正常にアクセスするには、たとえば /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 を起動しました。

このページの内容