はじめに
以前の記事で作成したGrafana環境で、ブラウザ上のGUIからプラグインを追加しようとしたところ、以下のように権限がないと怒られてしまいました。
以前の記事はこちら。
この記事に書いた設定で構築した通り、Grafanaの「管理者」にマッピングしているCognitoのグループに自分を追加しているので、管理者権限を付与したはずですが、なぜか権限がないと言われています。
気になって調べてみると、どうやらGrafanaには一口に「管理者」といっても、少なくとも6種類はあることが分かりました(最初から組み込まれている範囲ではさすがに200種類はありません…)。そして、これまでの設定で「管理者」として設定していたのは「Organizationの管理者」の権限であり、今回の操作に必要なのは「Grafanaサーバー管理者」の権限だということが分かりました。
これを機にGrafanaにおける管理者の設定方法や権限範囲を整理してみたので、記事にまとめます。
この記事では、Grafanaのバージョンv12.3.1を前提にしています。
管理者やリソースの関連では、以下の記事も大変参考になるのでぜひお読みください。
Grafanaの管理者は少なくとも6種類ある
Grafanaにおける管理者は、少なくとも以下の6種類が存在します。
- Grafanaサーバー管理者
- Organizationの管理者
- フォルダーの管理者
- ダッシュボードの管理者
- データソースの管理者
- チームの管理者
それぞれのリソースの関係を図に起こすと、以下の通りです。
一番広いのがGrafanaサーバー管理者です。Grafanaサーバーの中には、Organizationやフォルダー、ダッシュボード、データソースが存在し、それぞれに管理者や閲覧者などのアクセス権限を設定できます。また、権限付与にはユーザーをグループ化した「チーム」も指定でき、この「チーム」にも管理者を設定できます。図中で🔏アイコンを付与したリソースが、権限を設定できる対象です。
それぞれの管理者がどのリソースを対象に何ができるのか、公式ドキュメントを参考に整理してみたので、順番に見ていきましょう。
1. Grafanaサーバー管理者
Grafanaサーバー管理者は、Grafana全体を管理するユーザーです。サーバーの設定、Organizationやプラグインの管理なども含めて全ての権限を持ちます。
Grafanaサーバー管理者になるには、ユーザーごとにサーバー管理者権限を設定することで、権限を付与します。この変更が可能なのは、もちろんGrafanaサーバー管理者のみなので、Cognitoとの連携で「Organizationの管理者」権限しか付与できていない状況では、GUI上で設定を変更することはできませんでした。
実際の権限設定画面はこちら。Grafanaサーバー管理者としてログインしている場合の表示です。
今回は私がGrafanaを管理していることもあって、気安くGrafanaサーバー管理者の権限を自分自身に付与しています。しかし、Grafanaサーバー管理者の権限があれば環境全体を破壊することもできるので、付与するユーザーは必要最低限の信頼できるユーザーのみにしましょう。
公式ドキュメントでも以下のように注意書きがあります。
Server administrators are “super-admins” with full permissions to create, read, update, and delete all resources and users in all organizations, as well as update global settings such as licenses. Only grant this permission to trusted users.
2. Organizationの管理者
OrganizationはGrafana内の組織単位です。Organizationの管理者は、Grafana環境内にある各Organizationごとに設定できる、Organizationの管理者です。ユーザーやチームの管理、ダッシュボードやフォルダーの作成・削除などができます。
Organizationのロールには、管理者(Admin)の他にも編集者(Editor)と閲覧者(Viewer)が存在し、それぞれが実行できる主要なアクションは次の表に示す通りです。
| アクション | Admin |
Editor |
Viewer |
|---|---|---|---|
| ダッシュボードの閲覧 | ○ | ○ | ○ |
| ダッシュボードの作成・編集・削除 | ○ | ○ | |
| フォルダーの作成・編集・削除 | ○ | ○ | |
| アノテーションの閲覧 | ○ | ○ | ○ |
| アノテーションの作成・編集・削除 | ○ | ○ | |
| データソースへのクエリ実行 | ○ | ○ | ○ |
| データソースの作成・編集・削除 | ○ | ||
| ユーザーの追加・編集 | ○ | ||
| チームの追加・編集 | ○ | ||
| Organization設定の変更 | ○ | ||
| チーム設定の変更 | ○ | ||
| アプリケーションプラグインの設定 | ○ |
アノテーションはダッシュボード上にメモや注釈を追加できる機能です。
「アプリケーションプラグインの設定」の権限には、プラグインの追加と削除は含まれません。
実際の権限設定画面はこちら。
3. フォルダーの管理者
フォルダーの管理者は、特定のフォルダー内のダッシュボードを管理するユーザーです。フォルダー内のダッシュボードの作成・編集・削除などができます。
管理権限(Admin)の他にも、編集権限(Edit)と閲覧権限(View)が存在し、それぞれが実行できるアクションは次の表に示す通りです。
| アクション | Admin |
Edit |
View |
|---|---|---|---|
| フォルダーの閲覧 | ○ | ○ | ○ |
| フォルダーの編集・削除 | ○ | ○ | |
| フォルダー内のダッシュボード作成 | ○ | ○ | |
| サブフォルダーの作成 | ○ | ○ | |
| フォルダー権限の変更 | ○ |
フォルダーで設定した権限は、その配下にあるダッシュボードにも継承されます。また、ユーザー単位だけでなく、後述するチームに対しても権限を付与できます。
実際の権限設定画面はこちら。
4. ダッシュボードの管理者
ダッシュボードの管理者は、特定のダッシュボードを管理するユーザーです。ダッシュボードの編集や共有などができます。
管理権限(Admin)の他にも、編集権限(Edit)と閲覧権限(View)が存在し、それぞれが実行できるアクションは次の表に示す通りです。
| アクション | Admin |
Edit |
View |
|---|---|---|---|
| ダッシュボードの閲覧 | ○ | ○ | ○ |
| ダッシュボードの作成・編集・削除 | ○ | ○ | |
| ダッシュボード権限の変更 | ○ |
フォルダー内のダッシュボードの場合は、フォルダーの権限が継承されますが、追加で権限を付与することもできます。また、ユーザー単位だけでなく、後述するチームに対しても権限を付与できます。
実際の権限設定画面はこちら。
5. データソースの管理者
データソースの管理者は、特定のデータソースの管理を行うユーザーです。データソースの設定や接続の管理などができます。
管理権限(Admin)の他にも、編集権限(Edit)とクエリ権限(Query)が存在し、それぞれが実行できるアクションは次の表に示す通りです。
| アクション | Admin |
Edit |
Query |
|---|---|---|---|
| データソースへのクエリ実行 | ○ | ○ | ○ |
| データソース設定の編集 | ○ | ○ | |
| データソースの削除 | ○ | ○ | |
| データソース権限の変更 | ○ | ||
| クエリキャッシュの有効化 / 無効化 | ○ |
データソースの権限を個別管理するにはGrafana Enterpriseのライセンスが必要です。
実際の権限設定画面はこちら……といいたいところですが、Grafana Enterpriseのライセンスがないので、ライセンスがあれば設定できるよという通告画面です。
6. チームの管理者
チームの管理者は、特定のチームを管理するユーザーです。チームメンバーの管理やチームの設定などができます。チームは他のリソースの権限管理にも使われるユーザーのグループですので、前述までの管理者とは毛色が違います。
管理権限(Admin)の他にも、メンバー権限(Member)が存在し、それぞれが実行できるアクションは次の表に示す通りです。
| アクション | Admin |
Member |
|---|---|---|
| チームメンバーとして参加 | ○ | ○ |
| チームメンバー管理(追加・削除) | ○ | |
| チーム権限の管理 | ○ | |
| チーム設定の変更 | ○ |
Organizationの権限は、チーム単位では付与できません。
実際の権限設定画面はこちら。
Cognitoでどう設定すればよいか
Grafanaの管理者は6種類あることが分かりました。そして、プラグインを追加するにはGrafanaサーバー管理者の権限が必要であることが分かりました。さて、Cognitoで認証している場合に、どのように設定すればGrafanaサーバー管理者の権限を付与できるでしょうか。
設定方法
これまでの設定は以下の通りです。
Cognitoのgrafana-adminグループに属しているユーザーにAdminロールを割り当てています。同様にgrafana-editorグループに属するユーザーにはEditorロールを、それ以外のユーザーにはViewerロールを割り当てています。
Adminという文字列で、すっかり全管理者権限を付与できていると思い込んでいました。
role_attribute_path = ("cognito:groups" | contains([*], 'grafana-admin') && 'Admin' || contains([*], 'grafana-editor') && 'Editor' || 'Viewer')
実際にユーザーにGrafanaサーバー管理者の権限を付与するには、以下の設定が必要です。
Grafanaサーバー管理者の権限を付与したいCognitoのグループ(今回の場合はgrafana-server-adminを別途作成しました)には、GrafanaAdminのロールをマッピングさせます。加えて、allow_assign_grafana_adminをtrueに設定します。
role_attribute_path = ("cognito:groups" | contains([*], 'grafana-server-admin') && 'GrafanaAdmin' || contains([*], 'grafana-admin') && 'Admin' || contains([*], 'grafana-editor') && 'Editor' || 'Viewer')
allow_assign_grafana_admin = true
実は公式ドキュメントのGeneric Authの箇所をよく読めば書いてありました。
設定後
この設定変更を反映させ、Cognitoのグループにユーザーを追加してログインすると、プラグインのインストールができるようになりました。
Cognitoのグループの変更を反映させるには、再ログインが必要です。
設定前後の違い
Grafanaサーバー管理者になる前となった後では、サイドバーに表示される設定項目が大きく変わり(増え)ます。
Organizationの管理者の場合(変更前)はこちら。
Grafanaサーバー管理者の場合(変更後)はこちら。General内の設定項目とAuthenticationの設定項目が追加されました。
Grafanaサーバー管理者になると、Grafanaインスタンスの利用状況の統計や設定内容も確認できるようになります。
インスタンスレベルの設定変更は、引き続きiniファイルを修正する必要があります。GUI上で可能なのは確認のみです。
補足
今回は詳しく説明していませんが、org_attribute_pathとorg_mappingの設定を使用することで、OAuth側の組織情報とGrafana上のOrganization及びその中での権限をマッピングすることもできます。
また、Grafana Enterpriseでは、組み込みのロール以外にも独自定義のロールを作成して、より細かくRBACによるアクセス制御ができるようです。
おわりに
Grafanaの管理者は、少なくとも6種類あることが分かりました。Cognitoで認証している場合は、ユーザーにGrafanaサーバー管理者の権限を付与するには、allow_assign_grafana_adminをtrueに設定し、対象のグループにGrafanaAdminのロールをマッピングする必要があることも分かりました。
これで、当初の目的であるブラウザ上のGUIからプラグインを追加できるようになりました。
Grafanaの権限管理は運用方法によっては複雑にもなりますが、本記事が権限管理方法の整理に役立てば幸いです。
また、Grafanaを活用する上でのTipsなどが見つかったら、記事にしていきたいと思います。












