App Service のアプリ(Grafana)を作成後でもシークレットの作成は可能だが、
結局は grafana.ini を変更して再デプロイが必要になるので、先に ADアプリ 及び シークレットは別アプリとして作成しておく。
[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。
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ロールを割り当てたユーザでログインしてみる。
Admin 権限でログインされている事を確認。
いちいち [Sign in with Microsoft] を押すのが面倒なのでプロキシを噛ませてHTTPヘッダで認証できないかやってみたが、
Grafana の Auth Proxy は ロールマッピングには対応していない模様。
https://grafana.com/docs/grafana/latest/auth/overview/