Featured image of post クライアント認証のかかったPrometheusにGrafanaでアクセスする

クライアント認証のかかったPrometheusにGrafanaでアクセスする

みんなに証明書を配るのが面倒

やったことのまとめ

クライアント認証がかかったPrometheusGrafanaでアクセスした.

Prometheusへの認証に必要な情報(証明書と秘密鍵)をGrafanaに持たせることができるので,
Grafanaへアクセスする権限さえあればクライアント認証のかかったPrometheusのメトリクスが閲覧できるようになる.

クライアント認証のかかったPrometheus+nginxにGrafanaからアクセスする

つかうもの

やったこと

クライアント認証をかけたPrometheusの準備

Prometheusにクライアント認証をかけるで用意したものを使う.
秘密鍵や証明書もそのまま同じもの.
(ただしGrafanaにはクライアント認証をかけないのでMacに証明書を読み込ませる必要はなし)

今回はnginxを挟んで使う方法を採用するが, Prometheus単独でクライアント認証をかけた場合でもGrafanaの設定は同じはず.

Grafanaでクライアント認証を突破する

Grafanaでクライアント認証を突破する

GrafanaはDataSource(Prometheus)への認証方法としてクライアント認証に対応しているので,
クライアント証明書クライアント秘密鍵(クライアントの身元を証明するのに使用),
サーバー認証局の証明書(サーバーの身元を確認するのに使用)を持たせる.

GrafanaがDataSourceへクライアント認証で接続するための設定はdatasource.yaml1に記述する.
証明書と秘密鍵をベタ書きしたくないので, File provider2を使ってファイル名を指定して指定して読み込むようにした.
(このあたりはissue3を参考にした)

各種ファイルをGrafanaのコンテナにマウントして起動する.
(今回はProemtheus+nginxの構成にしているが, Prometheus単独でクライアント認証をかけた場合でもGrafana側の設定は同じになる)

# ディレクトリの状態(使わないものを消している)
$ ls -1
client-ca-cert.pem
client-cert.pem
client-private-key.pem
datasource.yaml
docker-compose.yml
https.conf
server-cert.pem
server-private-key.pem

# コンテナを起動する
$ docker compose up -d --force-recreate --remove-orphans

今回Grafanaは単独で動かしている(HTTPS化もしていない)のでChromeでhttp://localhost:3000を開く.
(GrafanaはデフォルトでBasic認証がかかっているので, admin:adminで突破する)

DataSourceの状態. 手動で設定する場合もこんな感じでやればOK

メトリクスも正常に取得できている

Grafananginxのクライアント認証を突破し,
Prometheusのメトリクスを取得できることが確認できた.

# コンテナを終了しておく
$ docker compose down

おわり

Grafanaでクライアント認証のかかったPrometheusからメトリクスを習得する流れを確認した.

Prometheusのセキュリティまわりはこれで一安心な感じもするが, 要件によってはGrafanaにも別の認証をかけたほうがいいかも…

おまけ

見下ろしてくるねこ