やったことのまとめ
クライアント認証がかかったPrometheusにGrafana
でアクセスした.
Prometheus
への認証に必要な情報(証明書と秘密鍵)をGrafana
に持たせることができるので,Grafana
へアクセスする権限さえあればクライアント認証のかかったPrometheus
のメトリクスが閲覧できるようになる.
つかうもの
- macOS Big Sur 11.2.3
- Docker Desktop for Mac
- Version 3.3.1
- Docker Engine Version 20.10.5
- Docker Compose Version 1.29.0
- Prometheus (Docker)
- nginx (Docker)
- Grafana (Docker)
やったこと
クライアント認証をかけたPrometheusの準備
Prometheusにクライアント認証をかけるで用意したものを使う.
秘密鍵や証明書もそのまま同じもの.
(ただしGrafana
にはクライアント認証をかけないのでMacに証明書を読み込ませる必要はなし)
今回はnginx
を挟んで使う方法を採用するが, Prometheus
単独でクライアント認証をかけた場合でもGrafana
の設定は同じはず.
Grafanaでクライアント認証を突破する
Grafana
はDataSource(Prometheus
)への認証方法としてクライアント認証に対応しているので,
クライアント証明書とクライアント秘密鍵(クライアントの身元を証明するのに使用),
サーバー認証局の証明書(サーバーの身元を確認するのに使用)を持たせる.
Grafana
がDataSourceへクライアント認証で接続するための設定はdatasource.yaml
1に記述する.
証明書と秘密鍵をベタ書きしたくないので, File provider
2を使ってファイル名を指定して指定して読み込むようにした.
(このあたりは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で突破する)
Grafana
でnginx
のクライアント認証を突破し,Prometheus
のメトリクスを取得できることが確認できた.
# コンテナを終了しておく
$ docker compose down
おわり
Grafana
でクライアント認証のかかったPrometheus
からメトリクスを習得する流れを確認した.
Prometheus
のセキュリティまわりはこれで一安心な感じもするが, 要件によってはGrafana
にも別の認証をかけたほうがいいかも…