概要 †Azure App Service で配備した Grafana でAD(Active Directory)認証を行う手順を記載する。 目次 †
ADアプリ 及び シークレットの作成 †シークレットの作成は App Service アプリを登録してから、そのアプリのシークレットとして登録しても良いが、
ADアプリの登録 †[Active Directory] を選択 [アプリの登録] を選択 [新規登録] を選択 アプリケーション名を入力して登録 クライアントID 及び テナントID を確認しておく クライアントシークレットの作成 †[証明書とシークレット] → [新しいクライアントシークレット] を選択 説明を入力して [追加] 登録したクライアントシークレットを確認しておく。(追加直後しか確認できないので注意) 認証設定 †[認証] → [プラットフォームの追加] リダイレクトURI 等を登録する。
※ Grafanaアプリケーション名は 後述の 0_env.sh の $webappName と同じもの。 アプリケーションロールの作成 †左側メニューの [マニフェスト] から、登録したアプリケーションのマニフェストを以下の通り更新する(アプリケーションロールの追加) : "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] → [エンタープライズ アプリケーション] から対象のアプリを選択後に [ユーザーとグループ] を選択して、ユーザにアプリケーションロールを割り当てる。 リソースの作成 †ファイル作成 †シェルの内容は 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" \ "GF_AUTH_DISABLE_LOGIN_FORM=true" "GF_AUTH_OAUTH_AUTO_LOGIN=true" \ "GF_AUTH_SIGNOUT_REDIRECT_URL=https://${webappName}.azurewebsites.net/.auth/logout" リソース作成 †VMなど ./1_resources.sh --create App Service(Grafana) ./3_app_resources.sh --create App Service 側の認証/承認設定 †App Service 側もADアプリ側の 認証設定 と同じ設定をしておく。 [App Service] から対象の App Servce アプリを ・「オン」、「Active Directory でのログイン」 を選択。 Active Directory の設定を下図の通り入力して [OK]
動作確認 †ブラウザから https://Grafanaアプリケーション名.azurewebsites.net にアクセスしてAdminロールを割り当てたユーザでログインしてみる。 Admin 権限でログインされている事を確認。 補足 †ログインURL等について †Service App アプリの [認証/承認] 設定を行うと、以下のログイン/ログアウトURLが提供され、未ログイン時は自動的に OAuth認証フローが実行されるようになる。
尚、Grafana では Aure OAuth認証用のURLとして 「https://サーバ名/login/azuread」 が用意されており、このURLにリダイレクトされる事で認証結果の受け取り等が行われる。 Grafana Auth Proxy によるロールマッピングについて †プロキシを噛ませてHTTPヘッダで認証できないかやってみたが、 Grafana の Auth Proxy は ロールマッピングには対応していない模様。 ADグループ単位のロール割り当てについて †Active Directory プランによっては、ADグループ単位でのロール割り当ては出来ない。 |