セキュリティーグループと Teams のチームメンバーを連動させる Power Automate

Microsoft 365（以降、M365）でセキュリティグループと期待通りに連動してくれないヤツ、ありますよね。そう、Teams のチームメンバーです。ソレに対して、Power Automate による自動化を実現しましょう。

# 関連記事
Power Automate でセキュリティグループへユーザーが追加、削除された際に発火するフローの作成テクニックを事前に紹介しています。

[#PowerAutomate セキュリティグループのメンバー追加・削除をトリガーする](https://qiita.com/yamad365/items/434dd4c56b9e071cb6c0)

上記の記事で紹介したテクニックを利用して、要望としては多いんだけども Microsoft Teams（以降、Teams） の仕様で実現困難な場面に対応していきます。まだ読んでいない方は、当記事を読み進める前に確認すると、これ以降の理解が深まるかな？と個人的には期待しております。

# 前提となる知識
実際のテクニックに入る前に、前提となる知識があります。簡単に案内しておきます。

## Microsoft 365 グループ と Teams の関係性
Microsoft 365 グループ（以降、M365グループ）と Teams のチームは非常に深い関係性にあります。

https://docs.microsoft.com/ja-jp/microsoftteams/office-365-groups?WT.mc_id=BA-MVP-5004053

公式情報は上記 Docs を確認いただくとして、ざっくりと大枠の概念を当方の理解で図解すると下記になります。
![画像1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/ae0dba1f-0a06-8c39-7f67-7448a7cef6c4.png)
Teams のチームは、M365グループと基本的に連動します。つまり「チームの裏には M365グループがある」という仕様です。その裏にある M365グループがメンバーの管理や、チームのファイル置き場である SharePoint Online と連動していたり、グループのメールボックスやカレンダーが連動している、というイメージです。

繰り返しますが「Teams のチームは M365グループ と連動している」という仕様がポイントです。後ほど、この仕様を利用します。

## チームはセキュリティーグループと同期できない
記事投稿時点（2022年7月)で、Teams のチームへセキュリティーグループを連動させることはできません。チームのメンバー登録をする際にセキュリティーグループを指定するコトは可能なのですが、追加ボタンを押した瞬間にセキュリティーグループの全メンバーが展開（バラバラに）されて、各ユーザー毎にチームメンバーとして登録されます。セキュリティーグループとチームのメンバーと関連性が途切れるんです。そのため、セキュリティーグループのメンバー変更を実施しても、チームには反映されない仕様に現状はなっています。

冒頭で「要望としては多い」と言ったのはココで「チームのメンバーを管理するのがタイヘンなので、セキュリティーグループと連動させたい」ですね。例えば、部署単位でセキュリティグループをチャンと運用している M365 テナントだった場合。人事異動で部署のメンバーが変更になったら、セキュリティーグループもあわせてメンテナンスされるでしょう。その結果、部署チーム（Teams）に人事異動の結果が自動で連動されると嬉しいですよね。残念ながら、そんな機能は標準で備わっておらんのです、というのが現状です。

M365グループ、セキュリティーグループ以外にも、M365 上では”グループ”機能が幾つかあります。気になる方は、下記の Docs 等でご確認ください。

https://docs.microsoft.com/ja-jp/microsoft-365/admin/create-groups/compare-groups?view=o365-worldwide&WT.mc_id=BA-MVP-5004053



# Power Automate でチームとセキュリティーグループを連動させる
前置きが長くなりましたが、その要望が多いセキュリティーグループとチームのメンバー連動を Power Automate で実現させましょう。

## フローの全体像
シンプルに仕上がっております。
![画像2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/a8e19dc2-6215-858b-4757-6bd439372560.png)

## フローの説明
ポイントを解説していきましょう。なお、説明しやすいように、フローのトリガー、各アクションへ下図のように番号をつけておきますね。
![画像3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/e6f6ee0a-c7a3-d80d-6a0b-ab302a930a0a.png)

### ①セキュリティグループのメンバー変更でトリガーする
こちらは [前回の記事](https://qiita.com/yamad365/items/434dd4c56b9e071cb6c0) を確認してください。このテクニックを利用することで、セキュリティグループへユーザーが追加・削除されたら発火するフローになります。

### ②セキュリティグループのメンバー削除か否か？をチェック
条件分岐が必要な理由は ① のトリガーが

   - セキュリティグループへユーザーが追加された時
   - セキュリティグループからユーザーが削除された時

の両方で発火するから、です。なので「今処理したいのは”追加なの？”か”削除なの？”か」を判定する必要がありますよね。

条件の箇所は empty 関数を利用して「ユーザー削除なのか？」をチェックしています。

https://docs.microsoft.com/ja-jp/power-automate/use-expressions-in-conditions?WT.mc_id=BA-MVP-5004053#use-the-empty-expression

https://docs.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference?WT.mc_id=BA-MVP-5004053#empty

左辺へ指定している式はこちら。

```
empty(triggerOutputs()?['body/@removed'])
```

”＠removed" という見慣れないプロパティですが、トリガーの結果で選択肢としてチャンと登場します。調査した限りでは、ユーザーがグループから削除された場合、このプロパティに "deleted" の値が設定されるようです。
![画像5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/ddec8eff-cfbf-15f1-5564-0536c18d3fa7.png)

例）グループメンバーが削除された場合の実行結果
![画像4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/799093d6-c9b6-3450-8462-ba339bb3c410.png)
なお、追加の場合 ”＠removed” の値は NULL となります。

### ③チームにメンバーを追加する
グループメンバーが追加されたルートなので、Teams コネクターを利用して対象のユーザーを目的のチームへ追加してください。

https://docs.microsoft.com/ja-jp/connectors/teams/?WT.mc_id=BA-MVP-5004053#%E3%83%81%E3%83%BC%E3%83%A0%E3%81%AB%E3%83%A1%E3%83%B3%E3%83%90%E3%83%BC%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B

![画像6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/5f2253a1-97fb-6ace-74f1-b375c08fe489.png)

### ④チームメンバーから削除する
例であげたフロー、最後のアクションです。ここが Teams コネクターではないコトにお気づきでしょうか。2022年7月時点で、Teams コネクターには「チームからユーザーを削除する」というアクションが存在しません。

「じゃあ、Power Automate で Teams のチームからメンバー削除はできないのかー（諦め）」となるのは、気が早い！です。冒頭に小難しい話題を出した理由がココです。 Teams の裏側にあるのは何でしたっけ？そう、M365グループでしたよね。

Teams のチームメンバーは、M365グループのメンバーと連動しています。つまり M365グループに関連するアクションで処理すればチームからユーザーを削除できます。
![画像7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/e0c33008-6186-91aa-dbb3-55fc77ffbc21.png)

https://docs.microsoft.com/ja-jp/connectors/office365groups/?WT.mc_id=BA-MVP-5004053#%E3%83%A1%E3%83%B3%E3%83%90%E3%83%BC%E3%82%92%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%81%8B%E3%82%89%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B

M365グループコネクター（Power Automate 上は”Office 365 Groups”コネクター）の［グループからメンバーを削除］アクションですが、第2パラメータが”ユーザープリンシパル名”となっています。
![画像8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/91f8aab2-a2b4-6cae-96c7-ca7bc1e0f80f.png)
が、当方が検証した限りでは Azure AD 上のユーザー オブジェクトID（トリガー結果の［ユーザーID］）を指定しても意図した動作をします。（Docs の説明不足なのか、アクション側がアレなのか不明…）

以上で、セキュリティグループのメンバー追加・削除に追従して、Teams の該当チームメンバーを追加・削除するフローの完成です。

## 作成したフローの注意点
チームメンバーの追加・削除ですが、フローや PowerShell など「Teams のアプリ”以外”からユーザー操作をした場合」に ***反映が遅い*** という症状が散見されます。例えば、ここまでに説明したフローで追加したユーザーが Teams クライアントの画面上では確認できないが、Teams 管理センターでは意図した通りの状態になっている、という状態を確認しています。つまり、使えるけど、なんか表示がおかしいんじゃない？という状態ですね。ちなみに、時間が経つと同期されるのか意図した表示になります。

フローの注意点というよりも「Teams のチームにユーザー追加・削除した際の注意点」が正しいかもしれません。記事投稿時点の症状で、将来的に改善されていくものかな？と個人的には考えておりますが、画面へ反映されないと不安になると思うので念のため記載しておきます。

この状況に関してはクラウド側のご機嫌に左右されます。反映が多少遅くても慌てずに、ひと晩ないし二晩ほど寝かせてみる広い心で構えてください。

また、例で紹介したフローはトリガーで指定可能な対象グループは 1つ です。加えて、Teams クライアント等で直接ユーザーをメンテナンスされた場合はフローでフォローされるような気の利いたつくりではありません。

# まとめ
- Teams のチーム、裏には必ず M365グループ がある
- 記事投稿時点で Teams のチームメンバーにセキュリティーグループを連動できない
  - チームにセキュリティーグループを追加した瞬間に、メンバーが個別に展開されちゃう
- Power Automate のトリガーを工夫することでグループのメンバー追加・削除で発火可能
  - それを活用するとセキュリティーグループのメンバー追加・削除をチームメンバーへ反映可能

実現したいコトや直面した課題と、M365 がわの関連するソリューションの仕様を把握していると、このフローのように「アイディア次第で何とかなる」カモ？しれませんなぁ、という良い例だったかな、と個人的に思っています。

動的メンバーシップで Azure AD 側のグループメンテナンスとチームを連動させるコトもできますが、それはソレでタイヘンですよね。紹介した手段は厳密にはセキュリティーグループが完全にチームメンバーに連動してるワケではないんですけどね。とは言え、選択肢が増えると思いますので、自分も含めて皆さんの運用が楽になるシーンが少しでも増えると嬉しいなー、と考えております。

## チームとセキュリティーグループを連動してほしい！という方は…
下記リンクで Microsoft 社へ要望が出ております。M365 の標準機能でチームとセキュリティーグループを連動してほしい、と望む方は是非とも”投票する”などで応援を実施してください！
教えてくださった [もくだいさん](https://twitter.com/mokudai) ありがとうございます！！

https://feedbackportal.microsoft.com/feedback/idea/8416f408-272e-ec11-b6e6-00224827bbc2


それでは、皆さま。素晴らしい Power Platform Life を！