前回はFabricテナントを取得する方法を紹介しましたが、今回はこれらのプロセスを自動化するため、Power Automateを活用する事例を紹介します。
この手法では、サービスプリンシパル(Service Principal*1)という特別なアカウント(アプリケーションレベルで登録する必要あり)を作成し、Power Automateを使ってFabricのテナント設定を定期的に取得します。Power BIにおけるサービスプリンシパルは、セキュリティを強化し、アクセスを制御するための重要なツールであり、Power BIの自動化タスクに使用されます。
なお、Power AutomateではPremiumコネクタであるHTTPを使用する必要があるため、環境の有無に留意が必要です。
Power Automateを使ってテナント設定を取得
サービスプリンシパルの作り方
まずはSPの作り方です。上記動画で解説していますが、念の為こちらにも記載しておきます。なお、SPは通常、Microsoft Entra ID(旧Azure Active Directory(AAD))チームやグローバル管理権限を持つ人がアプリ登録を行うことが可能となりますが、ご自身がそのような立場であれば下記に従ってSPを作ることができます。
- Azure Portalへログインをします
https://portal.azure.com
- 検索Boxで「アプリ」を入力し、「アプリの登録」を選択
うまく登録が終わると、オーバービュー画面になるので、下記に続きます。 - 新規登録 > 名前を入力(PBI Demo)>(そのまま)登録
- 登録が完了したら、以下①と②を安全な場所に控えておく
②はSPでログインする場合、Power BIの観点から必要となります。 - 右上の「クライアントの資格情報」>「証明書またはシークレットの追加」
もしくは下図のように「証明書とシークレット」をクリック - 「新しいクライアント シークレット」をクリック
一番左にある「証明書(0)」というところをクリックして、証明書を作ることも可能ですが、今回は「クライアント シークレット」を作ります(※Power BIでは証明書を作っても良いですが、Power PlatformのDataverse等はクライアント シークレットのみ(2023年10月時点)に対応している模様)。 - 「説明」に名前を入力し、「追加」
追加されたシークレットの値を控えておく。こちらを控えていないと、取得できなくなった場合は新たに作ることが必要になるため、注意が必要です。なお、「有効期限」は会社の方針(例: 開発環境では数年、しかし本番環境では6ヵ月、等)によって異なりますので、適切な期間を選択してください。
また、クライアント シークレットの値は必ず保管してください。これを忘れると、サインイン後に再び同じ情報を取得することができなくなり、再設定する必要が生じます。そして、これまでに控えた情報は以下の通りですが、主に使用するのは最初の3つになります。
-
アプリケーション (クライアント) ID
-
ディレクトリ (テナント) ID
-
クライアント シークレット 値
-
クライアント シークレット ID
-
- アプリの登録の割り当て
これでSPとして使用する「アプリの登録」が完了しましたが、ここから、新しいグループを作成し、「アプリの登録」を割り当て、Power BI でアプリへのアクセスを提供していきます。
検索ボックスでグループを入力し、サービスから「グループ」を選択
- 新しいグループ > グループの種類「セキュリティ」 > グループ名「pbigroup」と入れ、メンバーのところで"PBI"と入力して検索し、先程作った"PBI Demo"というSPを追加します。
無事グループが作成されると、以下のように全てのグループ内から確認することができます。セキュリティグループとして登録する理由は、アクセスできる対象を限定することであり、当グループ内に更にユーザーを追加する必要がある場合は管理が簡単となります。
Power BI サービスの設定を変更する
- Power BI Serviceにログイン > 管理ポータル
https://powerbi.microsoft.com/
- テナント設定 >検索ボックスで「プリンシパル」> 「Power BI API の使用をサービス プリンシパルに許可」 > 有効化 > 特定のセキュリティ グループ > グループを追加 > 適用
- 同様に、「管理APIの設定」より、「読み取り専用管理 API の使用をサービスプリンシパルに許可する」を有効化にします
※重要
この2つの設定を行わなかった場合、次のPower Automateでエラーが起こってしまいます。
Power Automateでデータを取得
- Power Automateにログイン
https://make.powerautomate.com/ - フローを作ります
フロー名と開始日、頻度を指定します。
「新しいステップ」をクリック
検索ボックスで「HTTP」、プレミアムを選択し、HTTPを選びます
HTTP(PREMIUM)を選択しますが、Premiumのライセンスを持っていない場合は無料トライアルの画面が出てきますので、そのまま試用を開始します。 -
各種パラメーターを設定します。
①「GET」を指定
②「https://api.fabric.microsoft.com/v1/admin/tenantsettings」を入力
③「Active Directory OAuth」を選択
④ アプリの登録で入手した「ディレクトリ (テナント) ID」を入力
⑤ 「https://analysis.windows.net/powerbi/api」を入力
⑥ アプリの登録で入手した「アプリケーション (クライアント) ID」を入力
⑦ クライアント シークレットの登録で取得した「シークレット 値」(※IDではなく値)を入力 - 「保存」>「テスト」
何事もなければ、以下のような画面が出力されます。 - 最終ステップ、OneDriveにアウトプットをJSONとして保存するステップを追加します。まずは新しいステップを追加し、Onedriveを選択。
「ファイルの作成」を選択 - フォルダパスを指定
このパスはちょっと分かりにくいですが、ローカルフォルダのOneDrive -ユーザー名の後に続くパスとなります。 - ファイル名を指定。ここでは抽出日時(日本時間)とJSONファイルを指定します。書式は「ファイル名_日本時間.json」となります。
留意点はファイル名を途中まで指定して、動的なコンテンツを追加して、utcNow関数にaddHours関数で+9時間することで日本時間を取得できるところです。
.jsonをファイル名の最後に入力し、「ファイル コンテンツ」に本文(Body)を指定し、完了。 - 「保存」>「テスト」。成功すると以下のようになります。
フォルダへ行き、JSONファイルがきちんと作成されていることを確認。 - VS Codeで開いて書式設定をすると以下のようになります
この後、Power BI Desktopを使って年月日別のデータを取得すれば、時系列別にテナント設定を追いかけることが可能となります。JSONの自動作成、Power BIで変動を確認すると良いでしょう。
まとめ
Power Automateは、クラウドワークフローの一形態で、自動化において非常に強力なツールです。ただし、今回の方法はプレミアムコネクタを必要とするため、すべてのユーザーに適しているわけではありません。しかし、Power Automateのプレミアムライセンスをお持ちの方は、ぜひ試していただきたいと考えています。なお、下記MiyakeさんのQitta記事でプレミアムコネクタなしでもGraph APIを利用できるという記事がありましたので、もしかしたらこれでも実現できるかもしれません。