Grafana Grafana

設定で認証とアクセスを構成する

grafana.ini でログイン、OAuth、ロールのマッピングを設定し、ユーザーとチームをコードとして扱います。

12 min learn.level.中級

誰がログインでき、どのロールを持つかは、プラットフォームの一部であり、ダッシュボードと同じようにバージョン管理に属します。ほとんどは 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 の認証ドキュメントを参照してください。

人気のガイド