月別アーカイブ: 2020年6月

[Power Automate] Graphを使って(IDではなく)名前でグループを取得する

Power Automate の中でMicrosoft Graph を使って名前をキーにグループを取得するやり方を紹介します。

はじめに:なぜこれをやりたいのか

Office365 グループ(Teams のチーム) の場合、その名前でグループを取得(検索)するアクションが用意されています。

[グループ メンバーの一覧表示]アクション。「グループID」とあるが実際には自身が所有している(オーナーになっている) グループが選択できるので、IDを知っている必要はない

しかしこれが従来のセキュリティ グループの場合、名前で検索することができません
(Azure AD のコネクタに、グループを取得するアクションはあるのですが、IDを指定しなければなりません)

Azure AD の[グループ の取得] アクション(画像は英語版)。グループ名が指定できない

そこで代わりにMicrosoft Graph API を使用すると、グループ名をキーにして取得することができます。

事前準備:Azure ADへのアプリケーション登録とアクセス許可の設定

実際にMicrosoft Graph API を使用してグループを取得する前に、事前準備が必要です。
こちらのドキュメントを参考に実施しておいてください。
(事前と書きましたが実際にはフローを実行する前に済ませておけばOKです)

Azure AD アプリ登録を作成する

【補足】
上記ページの後半、「[ API アクセス許可の要求] ブレードで、・・・」で始まる記載の個所は今回以下のようにしています。
・ [委任されたアクセス許可] → [アプリケーションの許可]
・ [すべてのグループの読み取りと書き込み] アクセス許可 → [Group.Read.All]
※今回は取得なので、必要最低限の権限という意味で読み取りのみとしています

また、ページ中段、「MS Graph バッチアプリブレードで、・・・」で始まる記載の個所で説明されているアプリケーション (クライアント) IDと、
ページ下段、「MS Graph バッチアプリブレードの [管理] セクションで、・・・」で始まる記載の個所で説明されている新しいキーの値をコピーしておきます(後で使います)

グループを取得するためのHTTP アクションの追加

準備ができたら、グループを取得するためにMicrosoft Graph API を呼び出すアクションを追加します。”HTTP” と検索して その名の通りHTTPというアクションを追加します。

【重要】
下の画像にもあるように、このHTTPアクションはプレミアム コネクタに分類されていて、利用にはスタンドアロンの Power Automate ライセンスが必要です。Office365 のプラン(E1, E3等)に含まれるライセンスでは利用できませんので、ご注意ください。
Power Apps と Power Automate のライセンスに関するよくあるご質問 – Power Platform Admin center | Microsoft Docs

Microsoft Graph API を呼び出すには、HTTP アクションを追加する

追加したHTTPアクション内に、グループを取得するGraph API を呼び出す設定を入れていきます。

グループを取得するGraph API を呼び出すためのHTTPアクションの設定。赤枠が今回必要な設定
  • Method: [GET] を選択
  • URI: https://graph.microsoft.com/v1.0/groups?$filter=startswith(displayName,'<取得したいグループの表示名>') ※名前をシングルクオーテーションで挟むのを忘れずに
  • Headers: 以下のように入力
    • Enter key と表示されているところに Content-type
    • Enter value と表示されているところに application/json
  • Authentication: [Active Directory OAuth] を選択
  • Tenant: 取得したいグループが登録されているOffice 365 (Azure AD) のテナント名(xxxxx.onmicrosoft.com)
  • Audience: https://graph.microsoft.com
  • Client ID: 上記の [事前準備] でコピーしておいたアプリケーション (クライアント) IDを貼り付けます
  • Credential Type: [Secret] を選択
  • Secret: 上記の [事前準備] でコピーしておいたキー値を貼り付けます

【補足】上記の例では、URI は文字通り”startswith” (前方一致) で検索するようフィルターの指定をしています。この場合一致しているものが複数あれば結果が複数になりますので、完全一致にしたい場合は “eq” とします。このあたりのフィルターのパターンについては以下が参考になります。

クエリ パラメーターを使用して応答をカスタマイズする – Microsoft Graph | Microsoft Docs

ここまでできたらフローを保存して、実際にグループが取得できるかテストしてみましょう。Status code が200になっていれば、期待通りにグループが取得できているはずです。

HTTPアクションの実行結果。Status code が200 になっていて、Body に指定したグループの情報が表示されていれば成功

取得できていたら、Body の内容を丸ごとコピーしておきます。この後で取得結果を処理する際に使います。

取得したグループの情報を次の処理で利用する

これで名前をキーにしてグループを取得(検索)することができました。最後に、この取得結果を受け取ってオブジェクトIDを知る方法を紹介します。

[JSONの変換 (Parse JSON)] というアクションを使用すると、HTTPアクションの結果を受け取ることができます。
(アクションの追加でjson と入力すると見つかります)

JSONの変換 (Parse JSON)アクションを使用してHTTPアクションの結果を受け取る

アクションを追加したら、コンテンツ(Content) に先ほど取得したHTTPアクションの結果(Body)をセットします。

JSONの変換 (Parse JSON)アクションのコンテンツにHTTPアクションの結果(Body)を指定

次のスキーマ(Schema) ですが、[Generate from sample] ボタンを押して、 先ほどコピーしておいたテスト結果のBody を貼り付けます。

[Insert a sample JSON Payload] というポップアップが表示されたら、先ほどコピーしたテスト結果のBody を貼り付ける

するとスキーマ(Schema) の欄に、テスト結果のBody から抽出されたスキーマ定義がセットされます。

テスト結果のBody をサンプルとして貼り付けることで、JSONの変換を行うためのスキーマ情報を抽出できる

これで取得したグループ情報を取り出す準備ができました。あとは後続のアクションで使いたいグループ情報を参照します。

JSONの変換 (Parse JSON)アクションを使うことで取得したグループの情報を取り出せる。画像はグループのIDを変数にセットする例

この記事の冒頭で書いたように、Power Automate でグループに対して何か処理を行いたい時に、このグループIDを指定しなければならないケースがありますが
このテクニックを使うことで、グループ名さえ分かればIDが取り出せるので、対応できるようになります。