概要

Azure App Service で配備した Grafana でAD(Active Directory)認証を行う手順を記載する。
尚、認証以外の部分は、Azure App Service に Grafana をデプロイ をベースにしている為、詳細はそちらを参照。

目次

ADアプリ 及び シークレットの作成

シークレットの作成は App Service アプリを登録してから、そのアプリのシークレットとして登録しても良いが、
認証のベースとなるアプリ 及び シークレット は、以下の理由で別アプリとして先に作成しておく。

  • 既に認証情報を持つアプリが存在するケースへの対応( 複数アプリ間の SSO まで考慮 )
    ※ここで登録しているアプリは、先行でリリース済みの別アプリとして考える。
  • App Service の作成時にOAuth系の環境変数の設定まで行いたい為。
  • 開発段階ではシークレットが、特定のアプリに依存していない方が削除、作り直しが行いやすい。

ADアプリの登録

[Active Directory] を選択
create_secret1-1.png

[アプリの登録] を選択
create_secret1-2.png

[新規登録] を選択
create_secret1-3.png

アプリケーション名を入力して登録
create_secret1-4.png

クライアントID 及び テナントID を確認しておく
create_secret1-5.png

クライアントシークレットの作成

[証明書とシークレット] → [新しいクライアントシークレット] を選択
create_secret1-6.png

説明を入力して [追加]
create_secret1-7.png

登録したクライアントシークレットを確認しておく。(追加直後しか確認できないので注意)
create_secret1-8.png

認証設定

[認証] → [プラットフォームの追加]
create_secret1-9.png

リダイレクトURI 等を登録する。
create_secret1-10b.png

 
 

項目設定値
リダイレクトURIhttps://Grafanaアプリケーション名.azurewebsites.net/login/azuread
〃(2つ目)https://Grafanaアプリケーション名.azurewebsites.net/.auth/login
暗黙的な許可フローシークレットを 他の 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] → [ユーザ] から下図の通りユーザを登録。

create-users.png

ロールの割り当て

[Azure Active Directory] → [エンタープライズ アプリケーション] から対象のアプリを選択後に [ユーザーとグループ] を選択して、ユーザにアプリケーションロールを割り当てる。
※デフォルトで Viewer権限 になるので、割り当てるのは Admin と Editor に該当するユーザだけでOK。

attach_role.png

リソースの作成

ファイル作成

シェルの内容は 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 アプリを
選択後、「認証/承認」 を選択。
azure_app_servce_auth1.png

・「オン」、「Active Directory でのログイン」 を選択。
・認証プロバイダーの Active Directory の選択。
azure_app_servce_auth2.png

Active Directory の設定を下図の通り入力して [OK]
※クライアントID、シークレットは先に登録したADアプリのものを入力。
azure_app_servce_auth3.png

 
詳細設定を下図の通り設定して、最後に [保存] を押下・
azure_app_servce_auth4.png

 
 
許可される外部リダイレクト URLは以下の2つを入力しておく。(ADアプリ側に登録したものと同じもの)

項目設定値
リダイレクトURIhttps://Grafanaアプリケーション名.azurewebsites.net/login/azuread
〃(2つ目)https://Grafanaアプリケーション名.azurewebsites.net/.auth/login

動作確認

ブラウザから https://Grafanaアプリケーション名.azurewebsites.net にアクセスしてAdminロールを割り当てたユーザでログインしてみる。
※GF_AUTH_DISABLE_LOGIN_FORM 及び GF_AUTH_OAUTH_AUTO_LOGIN を true にしている為、Grafana のログインフォームは表示されず、最初からOAuth認証が始まる。

grafana-login2.png

grafana-login3.png

grafana-login4.png

Admin 権限でログインされている事を確認。
grafana-login5.png

補足

ログインURL等について

Service App アプリの [認証/承認] 設定を行うと、以下のログイン/ログアウトURLが提供され、未ログイン時は自動的に OAuth認証フローが実行されるようになる。
また、このURLを利用してアプリ側でログイン/ログアウト用のリンクを設置したり、ある程度のフロー制御を行う事が出来るようになる。
※上記の GF_AUTH_SIGNOUT_REDIRECT_URL では .auth/logout を利用している。

種別URL
ログインhttps://アプリケーション名.azurewebsites.net/.auth/login
ログアウトhttps://アプリケーション名.azurewebsites.net/.auth/logout

尚、Grafana では Aure OAuth認証用のURLとして 「https://サーバ名/login/azuread」 が用意されており、このURLにリダイレクトされる事で認証結果の受け取り等が行われる。
参考: https://grafana.com/docs/grafana/latest/auth/azuread/

Grafana Auth Proxy によるロールマッピングについて

プロキシを噛ませてHTTPヘッダで認証できないかやってみたが、 Grafana の Auth Proxy は ロールマッピングには対応していない模様。
https://grafana.com/docs/grafana/latest/auth/overview/

grafana_rolemapping_etc.png

ADグループ単位のロール割り当てについて

Active Directory プランによっては、ADグループ単位でのロール割り当ては出来ない。
※AZURE AD PREMIUM P2 などが必要。

attach_role_etc1.png


添付ファイル: filecreate_secret1-10b.png 1件 [詳細] fileazure_app_servce_auth4.png 2件 [詳細] fileazure_app_servce_auth3.png 3件 [詳細] fileazure_app_servce_auth2.png 1件 [詳細] fileazure_app_servce_auth1.png 1件 [詳細] filegrafana-login1b.png 2件 [詳細] filegrafana_rolemapping_etc.png 1件 [詳細] fileattach_role_etc1.png 1件 [詳細] filegrafana-login5.png 1件 [詳細] filegrafana-login4.png 1件 [詳細] filegrafana-login3.png 1件 [詳細] filegrafana-login2.png 2件 [詳細] filegrafana-login1.png 1件 [詳細] filecreate_secret1-10.png 1件 [詳細] filecreate_secret1-9.png 1件 [詳細] filecreate_secret1-5.png 2件 [詳細] fileattach_role.png [詳細] filecreate-users.png 2件 [詳細] filecreate_secret1-8.png 1件 [詳細] filecreate_secret1-7.png 1件 [詳細] filecreate_secret1-6.png 1件 [詳細] filecreate_secret1-4.png 1件 [詳細] filecreate_secret1-3.png 1件 [詳細] filecreate_secret1-2.png 1件 [詳細] filecreate_secret1-1.png [詳細]

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-08-18 (火) 03:09:18 (35d)