概要

TODO:

目次

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

App Service のアプリ(Grafana)を作成後でもシークレットの作成は可能だが、
結局は grafana.ini を変更して再デプロイが必要になるので、先に 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-10.png

 
 

項目設定値
リダイレクトURIhttps://Grafanaアプリケーション名.azurewebsites.net/login/azuread
ログアウトURLhttps://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] → [ユーザ] から下図の通りユーザを登録。

create-users.png

ロールの割り当て

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

attach_role.png

リソースの作成

ファイル作成

0_env.sh

#!/bin/bash

PREFIX="各リソース名に付ける接頭文字"

# リソースグループ
resourceGroup=${PREFIX}Resources

# リージョン
region=japanwest

# レジストリ名
registryName=${PREFIX}registry

# Dockerイメージ名
imageName=${PREFIX}-grafana

# ADアプリ名(認証用)
adAppName=${PREFIX}-apps

# Grafanaアプリ名
webappName=${PREFIX}-grafana
#!/bin/bash

# リソース名の読み込み
source 0_env.sh

# リソース作成
if [ "$1" == "--create" ]; then

  # リソースグループの作成
  echo group create
  az group create --name $resourceGroup --location $region

  # コンテナレジストリ作成
  echo "acr create"
  az acr create -n $registryName -g $resourceGroup --sku standard --admin-enabled true

  # レジストリユーザ名/パスワード取得
  acr_credential="`az acr credential show --name $registryName -o table | tail -1`"
  registryUser="`echo "$acr_credential" | awk '{print $1}'`"
  registryPwd="`echo "$acr_credential" | awk '{print $2}'`"

  # イメージのプッシュ
  echo "acr build"
  az acr build --registry $registryName --image $imageName .

  # App Service アプリ作成(Grafana)
  echo "create appservice plan and webapp"
  az appservice plan create -n ${webappName}-plan -g $resourceGroup --is-linux --sku B1
  az webapp create -g $resourceGroup -p ${webappName}-plan -n $webappName \
      --deployment-container-image-name ${registryName}.azurecr.io/${imageName}:latest

  # コンテナの構成/デプロイ(Grafana)
  echo "configure web app from Azure Container Registry"
  az webapp config container set \
      --resource-group $resourceGroup --name $webappName \
      --docker-registry-server-url http://${registryName}.azurecr.io \
      --docker-registry-server-user ${registryUser} \
      --docker-registry-server-password ${registryPwd} \
      --docker-custom-image-name ${registryName}.azurecr.io/${imageName}:latest

  echo "Application URL: https://${webappName}.azurewebsites.net"
fi


# リソース削除
if [ "$1" == "--delete" ]; then
  echo group delete
  az group delete --name $resourceGroup
fi
FROM grafana/grafana:7.1.1
COPY grafana.ini /etc/grafana/grafana.ini

grafana.ini を以下の通り編集する。
※テンプレートは https://github.com/grafana/grafana/blob/master/conf/sample.ini 等から取得。

[server]
:
root_url = https://Grafanaアプリケーション名.azurewebsites.net
:

[auth.azuread]
name = Azure AD
enabled = true
client_id = クライアントID
client_secret = クライアントシークレット
auth_url = https://login.microsoftonline.com/テナントID/oauth2/v2.0/authorize
token_url = https://login.microsoftonline.com/テナントID/oauth2/v2.0/token

※Grafanaアプリケーション名 は 0_env.sh で設定している $webappName。

リソース作成

./1_resources.sh --create

動作確認

ブラウザから https://Grafanaアプリケーション名.azurewebsites.net にアクセスして動作確認を行う。

試しに Adminロールを割り当てたユーザでログインしてみる。
grafana-login1.png

 
grafana-login2.png

 
grafana-login3.png

 
grafana-login4.png

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

補足

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

いちいち [Sign in with Microsoft] を押すのが面倒なのでプロキシを噛ませて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


トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS