設定で認証とアクセスを構成する
grafana.ini でログイン、OAuth、ロールのマッピングを設定し、ユーザーとチームをコードとして扱います。
誰がログインでき、どのロールを持つかは、プラットフォームの一部であり、ダッシュボードと同じようにバージョン管理に属します。ほとんどは grafana.ini にあります。残りのユーザー、チーム、サービスアカウントには、プロビジョニングのファイル形式がないため、このガイドでは、それらをコードとして管理する方法も示します。以下のオプション名は、Grafana の設定リファレンスと一致しますが、頼る前に、お使いのバージョンの defaults.ini で確認してください。
基本設定
[users]
allow_sign_up = false # 自己登録なし
auto_assign_org = true
auto_assign_org_role = Viewer # 新しいユーザーのデフォルトのロール
[auth]
disable_login_form = false # SSO が機能し、フォームが不要になったら true にする
[auth.anonymous]
enabled = false
意図的にオープンなインスタンスにしたい場合を除き、allow_sign_up = false を維持してください。匿名アクセスを有効にする場合は、可能な限り最小のロールを与えます。
[auth.anonymous]
enabled = true
org_role = Viewer
汎用 OAuth によるシングルサインオン
OpenID Connect や OAuth 2 のプロバイダーは、どれもファイルで接続できます。シークレットは環境から取得します。
[server]
root_url = https://grafana.example.com/
[auth.generic_oauth]
enabled = true
name = Company SSO
allow_sign_up = true
client_id = grafana
client_secret = ${OAUTH_CLIENT_SECRET}
scopes = openid profile email groups
auth_url = https://sso.example.com/oauth2/authorize
token_url = https://sso.example.com/oauth2/token
api_url = https://sso.example.com/oauth2/userinfo
login_attribute_path = preferred_username
email_attribute_path = email
role_attribute_path = contains(groups[*], 'grafana-admins') && 'Admin' || contains(groups[*], 'grafana-editors') && 'Editor' || 'Viewer'
知っておくべきこと:
- プロバイダーのリダイレクト URI は
<root_url>login/generic_oauthなので、root_urlは正確である必要があります。 role_attribute_pathは、ユーザーのトークンまたは userinfo に対して評価される JMESPath の式です。ID プロバイダーのグループを Grafana のロール(Admin、Editor、Viewer)にマップするため、ロールの変更は Grafana ではなく ID プロバイダーで行われます。- ここでの
allow_sign_upは、「最初の SSO ログインで Grafana のユーザーを作成する」という意味で、[users] allow_sign_upが false の場合でも、望ましい設定です。 - 一般的なプロバイダー(
[auth.github]、[auth.google]、[auth.azuread]、[auth.gitlab]など)には専用のセクションがあり、SAML と LDAP は Grafana Enterprise と Grafana Cloud で利用できます。LDAP は、別のldap.tomlファイルも読み取ります。
SSO が機能したら、disable_login_form = true を設定し、admin アカウントは緊急用のオプションとしてのみ保持するか、フォームは有効なままにして、ネットワークルールで保護します。
ロールと、ファイルで設定できないもの
Grafana には、組織のロール(Admin、Editor、Viewer)があり、RBAC は Enterprise と Cloud で、きめ細かいロールを追加します。オープンソースの Grafana では、次のリソースにプロビジョニングのファイル形式がありません。
| リソース | コードとして管理する方法 |
|---|---|
| ユーザー | SSO 経由で作成するか、bootstrap のスクリプトで Admin API を使う |
| チームとチームのメンバーシップ | Terraform(grafana_team)、API、または ID プロバイダーからのチーム同期 |
| 組織 | Terraform(grafana_organization)または API |
| サービスアカウントとトークン | Terraform(grafana_service_account、grafana_service_account_token)または API |
| フォルダーとダッシュボードの権限 | Terraform(grafana_folder_permission、grafana_dashboard_permission)、Operator、または API |
Terraform のガイドがそのパターンを示します。小規模な構成では、リポジトリに保管して CI で実行する、admin の認証情報で HTTP API を呼び出す単発のスクリプトが、妥当な代替手段です。
自動化のためのサービスアカウントを作成する
Terraform、Operator、CI のようなツールには、人間ではない ID が必要です。機能する最も低いロールでサービスアカウントを 1 度作成し、そのトークンをシークレットとして保存します。
# サービスアカウントを作成(Admin API、Basic 認証)
curl -s -X POST -u admin:$GRAFANA_ADMIN_PASSWORD \
-H 'Content-Type: application/json' \
-d '{"name":"terraform","role":"Admin"}' \
http://localhost:3000/api/serviceaccounts
# 上で返された id を使って、そのトークンを作成
curl -s -X POST -u admin:$GRAFANA_ADMIN_PASSWORD \
-H 'Content-Type: application/json' \
-d '{"name":"terraform-token"}' \
http://localhost:3000/api/serviceaccounts/<id>/tokens
トークンは 1 度だけ表示されます。すぐにシークレットストアに入れ、有効期限を設定するか、スケジュールに従ってローテーションします。
commit する価値のあるハードニングの設定
[security]
cookie_secure = true
cookie_samesite = lax
disable_gravatar = true
allow_embedding = false
[auth]
login_maximum_lifetime_duration = 30d
login_maximum_inactive_lifetime_duration = 7d
アップグレード時に見直し、root_url のように値が実際に異なる場合を除いて、環境間で同一に保ってください。
UI なしで確認する
curl -s -u admin:$GRAFANA_ADMIN_PASSWORD http://localhost:3000/api/admin/settings | jq '."auth.generic_oauth" | {enabled, name}'
curl -s -u admin:$GRAFANA_ADMIN_PASSWORD http://localhost:3000/api/users | jq '.[] | {login, isAdmin}'
curl -s -u admin:$GRAFANA_ADMIN_PASSWORD http://localhost:3000/api/teams/search | jq '.teams[].name'
プロバイダーごとのオプションの完全な一覧は、Grafana の認証ドキュメントを参照してください。
人気のガイド
-
Grafana をコードとして運用する:全体像 ファイルに置けるもの、API が必要なもの、そしてそれらがどう組み合わさるか。 -
grafana.ini と環境変数で Grafana サーバーを設定する 設定ファイルの場所、上書きの順序、設定を Git に保つ方法を理解します。 -
JSON ファイルからダッシュボードをプロビジョニングする ディスクからダッシュボードを読み込み、ディレクトリからフォルダーを対応付け、変更を失わずに作成します。 -
アラートルール、コンタクトポイント、通知ポリシーをプロビジョニングする アラートのパイプライン全体を YAML で定義し、コードのようにレビューしてバージョン管理します。 -
Helm とプロビジョニングの values で Grafana を Kubernetes にデプロイする データソース、ダッシュボード、設定のすべてが values ファイルから来る、Helm チャートで Grafana を実行します。 -
コマンドラインからプロビジョニングを再読み込み、確認、トラブルシューティングする Grafana が何を読み込んだかを調べ、再起動せずに再読み込みし、よくあるプロビジョニングのエラーを修正します。