はじめに
SharePoint リストでは、アイテムごとにアクセス権限を設定することができます。アクセス権限の付与先にEntraグループを指定することができます。業務で、Entraグループへの付与を自動化することに取り組んでいます。本記事では、Power Automateで実現した方法を記載します。
SharePoint リスト
SharePoint リストはExcelのようにデータをテーブルで持ちます。Excelとの違いはMicrosoft製品との相性が良く、Power Automateによる自動化やMicrosoft Listsによるフォーム、Power AppsでGUI画面を容易作成することができます。
今回、注目しているのはSharePointで作ったリストのアイテム(1行のデータ)にMicrosoft Entra グループでアクセス権限を設定することができるという点です。手動で設定するには以下の手順を踏みます。
上記の作業を今回はSharePoint リストと相性が良いPower Automateで自動化していきます。
SharePoint上でのEntraグループの扱いについて
手動でEntraグループにアクセス権限を与えると、SharePointのユーザーやグループを管理する画面にEntraグループが作成されます。確認方法は以下の手順です。
- 右上の「設定」→「サイトのアクセス許可」を選択し、「高度なアクセス許可を設定」を選択
- ユーザー/グループ一覧に該当のEntraグループを確認することができます。
この作成されたEntraグループは、SharePoint上ではドメイングループという種類で管理されるようです。 - Entraグループの名称を選択することで、以下の詳細な情報を確認できます。
詳細な情報を確認すると、「ユーザー情報」という表記があることからSharePoint上で作成されたEntraグループはSharePoint ユーザー扱いであることがわかります。「アカウント」という箇所は秘密情報なので隠していますが、テナント情報やEntraグループのオブジェクトIDを組み合わせた文字列です。
手動でのアクセス権限付与の裏側では、自動でEntraグループの参照情報を持つSharePointユーザーを作成していることがわかりました。では、Power Automateで実現していきます。
Power Automate
Power Automateはビジネス業務の自動化をローコードで書くことができるサービスです。SharePointを操作するAPIが用意されているのでPower Automateを使って実現していきます。
全体図
完成した全体図は以下のようになります。
使用したトリガー/アクションを以下に記します。
- トリガー
- アクション
- SharePoint に HTTP 要求を送信する
- JSONの解析
Microsoft SharePoint コネクタの中を探しましたが、HTTPリクエストを使用する方法しかやりたいことは実現できなかったです。
詳細な説明
Microsoft Entra GroupからSharePoint Userを作成する
Sharepoint上でのentraグループの扱いについてより、Entraグループに相当するSharePointユーザーを作成する箇所です。BodyのLoginName
に前述したテナント情報やEntraグループのオブジェクトIDを組み合わせた文字列を入れます。_api/web/siteusers
のAPIドキュメントはこちらです。今回は、SharePointリストのアイテムの列にAccessGroup
というユーザー/グループの種類を入力して作成し、トリガーからその値を取得してきています。
リストアイテムの権限継承を解除する
アイテムにはSharePointサイトのアクセス権限が継承されています。新しいアクセス権限を付与するには、まず継承を解除する必要があります。breakroleinheritance
というAPIを実行することで可能です。APIドキュメントはこちらです。
リストアイテムの権限にEntraグループを追加する
roleassignments/addroleassignment
のAPIを実行することで、Entraグループにアイテムへのアクセス権限を付与することができます。principalid
にはEntraグループを元に作成したSharePointユーザーのIdを指定してください。ここではユーザー作成したHTTPリクエストのレスポンスをJSON解析した情報からIdを取得して指定しています。roledefid
には読み取り/書き込み権限の指定をします。書き込み権限であれば1073741830
を指定します。こちらのドキュメントを参考に作成しました
課題
- Power Automateの実行開始が遅い
- 体感として、アイテム作成してから4,5分掛かる
- Power Automateの運用について
- IaC化が対応していないので、運用時で苦労することが目に見えている
- (エンジニア目線の考えなのかもしれない)
- 各アクションごとに
Code view
という機能がありJSON形式でコードを確認することができる。最悪のケースで、Github等で1アクションごとにコード管理する
- IaC化が対応していないので、運用時で苦労することが目に見えている
まとめ
本記事では、Entraグループにアイテムへのアクセス権限付与をPower Automateで実現しました。一番の苦悩は、SharePointが裏でEntraグループの情報を元にSharePoint ユーザーを自動で作成していたということを気づくのに時間が掛かったことです。