Azure に配置した Grafana でAD(Active Directory)認証を行う手順を記載する。
尚、当記事では Grafana 自体は App Service で作成する。
シークレットの作成は、App Service アプリ(Grafana)の作成後でも可能だが、
結局は再デプロイが必要になるので(※)、先に ADアプリ 及び シークレットは別アプリとして作成しておく。
※OAuth用の設定値が必要になるので。
[Active Directory] を選択
[アプリの登録] を選択
[新規登録] を選択
アプリケーション名を入力して登録
クライアントID 及び テナントID を確認しておく
[証明書とシークレット] → [新しいクライアントシークレット] を選択
説明を入力して [追加]
登録したクライアントシークレットを確認しておく。(追加直後しか確認できないので注意)
[認証] → [プラットフォームの追加]
リダイレクトURI 等を登録する。
項目 | 設定値 |
リダイレクトURI | https://Grafanaアプリケーション名.azurewebsites.net/login/azuread |
ログアウトURL | https://Grafanaアプリケーション名.azurewebsites.net/logout |
暗黙的な許可フロー | シークレットを 他の Service App と共用する場合は2つともチェックを入れておく |
※ Grafanaアプリケーション名は 後述の 0_env.sh の $webappName と同じもの。
左側メニューの [マニフェスト] から、登録したアプリケーションのマニフェストを以下の通り更新する(アプリケーションロールの追加)
※ユニークIDは uuidgen 等を使用して3つ生成しておく。
※ https://grafana.com/docs/grafana/latest/auth/azuread/
: "appRoles": [ { "allowedMemberTypes": [ "User" ], "description": "Grafana Editor Users", "displayName": "Grafana Editor", "id": "ユニークなID", "isEnabled": true, "lang": null, "origin": "Application", "value": "Editor" }, { "allowedMemberTypes": [ "User" ], "description": "Grafana read only Users", "displayName": "Grafana Viewer", "id": "ユニークなID", "isEnabled": true, "lang": null, "origin": "Application", "value": "Viewer" }, { "allowedMemberTypes": [ "User" ], "description": "Grafana admin Users", "displayName": "Grafana Admin", "id": "ユニークなID", "isEnabled": true, "lang": null, "origin": "Application", "value": "Admin" } ], : "groupMembershipClaims": "ApplicationGroup", :
[Azure Active Directory] → [ユーザ] から下図の通りユーザを登録。
[Azure Active Directory] → [エンタープライズ アプリケーション] から対象のアプリを選択後に [ユーザーとグループ] を選択して、ユーザにアプリケーションロールを割り当てる。
※デフォルトで Viewer権限 になるので、割り当てるのは Admin と Editor に該当するユーザだけでOK。
シェルの内容は Azure App Service に Grafana をデプロイ の内容をベースにしている為、以下には変更点のみ記載する。
以下を追加
: : # OAuth用 adClientId="クライアントID" adClientSecret="クライアントシークレット" tenantId="テナントID"
環境変数を追加(GF_AUTH_AZUREAD_XXXXX)
: : # App Service 環境変数設定 echo "az webapp config appsettings ( $webappName )" az webapp config appsettings set \ -g $resourceGroup -n $webappName \ --settings "GF_SERVER_ROOT_URL=https://${webappName}.azurewebsites.net" \ "GF_SECURITY_ADMIN_PASSWORD=admin" "GF_DATABASE_TYPE=mysql" "GF_DATABASE_HOST=${vmIpAddress}:3306" \ "GF_DATABASE_NAME=grafana" "GF_DATABASE_USER=grafana" "GF_DATABASE_PASSWORD=grafana" \ "WEBSITES_PORT=3000" \ "GF_AUTH_AZUREAD_NAME=Azure AD" \ "GF_AUTH_AZUREAD_ENABLED=true" \ "GF_AUTH_AZUREAD_CLIENT_ID=${adClientId}" \ "GF_AUTH_AZUREAD_CLIENT_SECRET=${adClientSecret}" \ "GF_AUTH_AZUREAD_AUTH_URL=https://login.microsoftonline.com/${tenantId}/oauth2/v2.0/authorize" \ "GF_AUTH_AZUREAD_TOKEN_URL=https://login.microsoftonline.com/$tenantId}/oauth2/v2.0/token" \
./1_resources.sh --create
ブラウザから https://Grafanaアプリケーション名.azurewebsites.net にアクセスして動作確認を行う。
試しに Adminロールを割り当てたユーザでログインしてみる。
Admin 権限でログインされている事を確認。
いちいち [Sign in with Microsoft] を押すのが面倒なのでプロキシを噛ませてHTTPヘッダで認証できないかやってみたが、
Grafana の Auth Proxy は ロールマッピングには対応していない模様。
https://grafana.com/docs/grafana/latest/auth/overview/
Active Directory プランによっては、ADグループ単位でのロール割り当ては出来ない。
※AZURE AD PREMIUM P2 などが必要。