SharePoint および OneDrive (Business) では共有リンクを使ってファイルやリストアイテムなどをピンポイントで共有できますが、その内部的な仕組みについてはわかりにくく、いつかきちんと整理しなくてはなぁと思いつつここまで来てしまいました。
ですが、Copilot for Microsoft 365 が登場し、機密情報をどう保護するかということを考えていくうえでそもそも共有リンクってどういう仕組みで動いているの? というのを確認しておく必要性が以前にも増してきました。
ということで、重い腰を上げてドキュメント化しておくことにします。長いのでご容赦ください。また、弊社では下記のファイル管理に特化した研修もやっています(※ 弊社の SharePoint サイト管理基礎をご受講いただくことが前提となっております。前提コースでアクセス権限の考え方の基本などをみっちり説明しているためです)。研修のご受講もお待ちしております。
📌 【オフィスアイ株式会社】Microsoft 365 を活用した最新のファイル管理手法 (office-i-corp.jp)
ここから本題です。
------------------------------------------------------------------
リストアイテムやフォルダー、ファイル単位で共有リンクを作成できますが、その内部的な仕組みについて解説します。
なお、ここからの解説はSharePoint でのアクセス権限管理の基本用語と概念がわかっていることが前提です。OneDrive (Business) も SharePoint がベースなので概念は同じです。参考情報として Microsoft Learn の記事のリンクも掲載しておきます。
SharePoint の権限レベルについて - SharePoint in Microsoft 365 | Microsoft Learn
※「ひと目でわかる Microsoft 365 SharePoint 運用管理編」も併せてどうぞ。
共有リンクを作成すると、固有の権限に変更されます。これによってアイテムごと(リストアイテム、フォルダー、ファイル)の権限を持てるようになるわけです。
ここでおさらいです。サイトには既定では「サイトレベルでの権限スコープ」というものがあり、これがアクセス制御リスト(ACL)になっているわけです。「サイトに対して誰が何ができるのか」を記録している権限台帳が ACL です。たとえば、次のようなサイトがあるとすると既定では 3つの SharePoint グループのみが作成され、サイトの管理者が既定では <サイト名>所有者 グループに所属します。
このサイトで 見積書 - A.pdf に対して共有リンクを生成します。今回は「組織内のユーザー」が表示可能なリンクを生成したとします。
この時、このファイルに対してサイトからの権限の継承を中止し、固有の権限を作成するわけです。が、実はファイルの上位コンテナである「ライブラリ」自体も固有の権限になります。上記の例だと、"Library A" も固有に権限になります。
では、フォルダー内にあるファイル単位で共有リンクを生成したらどうなるでしょうか?
共有リンクを作成するとサイトに対して共有リンクを制御するための特殊な SharePoint グループが複数、自動生成されます。
共有リンクを作成すると Limited Access System Group という名前の付く SharePoint グループが複数できます。 System と名前がついている通り、内部的に作成され管理される特殊なグループです。
このうち次の2つはサイト内で初めて共有リンクが生成された時に作成されます。
- Limited Access System Group
- Limited Access System Group for Web <GUID>
もう一つの似た名前の Limited Access System Group for List <GUID> は、共有リンクを作成したリストまたはライブラリごとに作成されます。Limited Access System Group と名前のつくこれらのグループは一度作成されると削除されることはありません。
一方の SharingLinks ~で始まるグループは共有リンクごとに作成され、当該共有リンクが削除されるとこのグループも削除されます。
これらの特殊なグループは SharePoint の UI 上には表示されません。PowerShell などから確認する必要があります。たとえば、サイト内に作成されている SharePoint グループの一覧は次の PnP PowerShell コマンドで取得できます。
Get-PnPGroup | Format-Table -Property Title, Description, PrincipalType,Users,OnlyAllowMembersViewMembership -AutoSize
共有リンクを作成すると自動的に生成されるグループがわかったところで、各レベルでのアクセス権限がどうなっているのかを確認しましょう。
サイトレベルでのアクセス権限
既存の SharePoint グループに加え次の2つのグループにサイトに対するアクセス許可レベルが付与されます。
SharePoint グループ | サイトに対して付与されるアクセス許可レベル |
---|---|
Limited Access System Group For Web <GUID> | Webのみのアクセス制限 |
Limited Access System Group | 制限付きアクセス |
Limited Access System Group For Web <GUID> グループには「Webのみのアクセス制限」という特殊なアクセス許可レベルが付与されています。このアクセス許可レベルは、サイトに対して特殊な制限のあるアクセスを行えるようにするものです。具体的には、サイト全体に対して直接のアクセス許可を持たないユーザーに対してサイト内またはライブラリやリスト内の特定のアイテムへのアクセスを許可します。
もう一つが Limited Access System Group であり、「制限付きアクセス」が設定されています。
制限付きアクセスでは、サイト全体でできることは次の3つだけです。リストおよびライブラリに対しては何の権限も持ちません。
- ユーザー情報の参照
- クライアント統合機能の使用
- 開く
ここで「制限付きアクセス」について、簡単に振り返っておきましょう。SharePoint ではオンプレミス時代からたびたび登場した特殊な権限です。最近はなるべく目につかないような設定になっているので、よく知らない方も少なくないでしょう。特徴は次の通りです。
- 特殊なアクセス許可レベル
- 特定の条件で自動的にユーザーやグループに適用される
- このアクセス許可レベルは編集や削除ができない
共有リンクのように単一のアイテムにのみ編集や表示などの権限を与えるときに、ユーザーやグループはサイトまたはライブラリ内のすべてのアイテムを表示または編集するアクセス許可は持ちません。ですがそれではアイテムにアクセスできない。そこで、サイトやアイテムが格納されているリストやライブラリレベルでアクセス制限のある特殊な権限を付与する必要があるわけです。制限付きアクセスはユーザーやグループに直接割り当てることができない特殊なアクセス許可レベルであり、自動的に構成されます。
続いて、アイテム(ファイル、フォルダー、リストアイテム)のコンテナであるリスト レベルでのアクセス権限はどうなっているか確認してみましょう。固有の権限になっています。
既存の SharePoint グループに加え次の2つのグループにリスト(ライブラリ)に対するアクセス許可レベルが付与されます。
SharePoint グループ | サイトに対して付与されるアクセス許可レベル |
---|---|
Limited Access System Group For List <GUID> | 制限付きアクセス |
Limited Access System Group | 制限付きアクセス |
アイテムやファイル単位でのアクセス権限の状態を取得するには次の PnP PowerShell コマンド (Get-PnPListItemPermission) を実行します。ちなみに -Identity で指定するのはアイテムIDです。
次のような結果を得ました。注目すべきは SharingLinks グループであり、共有リンク作成時には「表示可能」に指定していました。SharePoint のアイテム側での実質の権限が “閲覧” になっていることがわかります。つまり共有リンク経由では “閲覧” 権限相当でアクセスすることになるということです。
すでに説明した通り SharingLinks.<GUID> グループは共有リンクごとに自動生成されますが、グループ名に権限を表す名称も含まれているのがわかります。たとえば上記の場合は SharingLinks.<GUID>.OrganiztionView.<GUID>です。組織のユーザーに対して表示可能な設定をしたので、OrganizationView という名称がついているわけです。
ここで共有リンクの権限との対比でまとめておきます。
共有リンクの権限 | 実質のアクセス許可レベル | 生成されるグループ名 |
---|---|---|
編集可能 | 投稿 |
・すべてのユーザーの場合は、SharingLinks.<ID>.AnonymousEdit.<ID>というグループ名になる ・組織内のすべてのユーザーの場合は、SharingLinks.<ID>.OrganizationEdit.<ID> というグループ名になる ・選択したユーザーの場合は、SharingLinks.<ID>.Flexible.<ID>というグループ名になる |
表示可能 | 閲覧 |
・すべてのユーザーの場合は、SharingLinks.<ID>.AnonymousView<ID>というグループ名になる ・組織内のすべてのユーザーの場合は、SharingLinks.<ID>.OrganizationView.<ID> というグループ名になる ・選択したユーザーの場合は、SharingLinks.<ID>.Flexible.<ID>というグループ名になる |
レビュー | レビュー | 必ず、SharingLinks.<ID>.Flexible.<ID> というグループ名になる |
ダウンロードできません | 制限付きビュー | 必ず、SharingLinks.<ID>.Flexible.<ID> というグループ名になる |
サイトの外部共有設定が「すべて」になっていれば、組織内外問わずにサイト内のコンテンツを共有できます。この「すべてのユーザー」を指定すると、これまでと少し状況が変わります。
「すべてのユーザー」を指定すると必ずアイテム単位で次のグループも追加されます。
プリンシパル名 | アクセス許可レベル | プリンシパルタイプ |
---|---|---|
Limited Access System Group for List <GUID> | 制限付きアクセス | SharePoint グループ |
SharingLinks.<GUID> |
編集可能 … 投稿 表示可能 … 閲覧 レビュー…レビュー ダウンロード不可 … 制限付きビュー |
SharePointグループ |
c:0u.c|tenant|<GUID> |
編集可能 … System.LimitedEdit 表示可能 … System.LimitedView レビュー…レビュー ダウンロード不可 … 制限付きビュー |
セキュリティグループ |
表でわかるように、従来と大きく変わるのがc:0u.c|tenant|で始まるセキュリティ グループが新規に作成されて追加される権限が付与されるということです。権限の異なる共有リンクを複数作成すると、作成した数だけグループも作成されます。
「すべてのユーザー」を対象にする場合に作成される c:0u.c|tenant| で始まるセキュリティ グループが持つ SharePoint 側のアクセス許可レベルは次のとおりです。通常だと SharePoint では見慣れない特殊な権限として System.LimitedEdit と System.LimitedView が追加されていることがわかります。
共有リンクの権限 | 実質のアクセス許可レベル |
---|---|
編集可能 | System.LimitedEdit |
表示可能 | System.LimitedView |
レビュー | レビュー |
ダウンロードできません | 制限付きビュー |
ここまででいったん、各レベルの固有の権限の設定状況をまとめます。
さて、再びここから c:0u.c|tenant|で始まるセキュリティ グループ を詳しく調べてみましょう。
PnP PowerShell 上では c:0u.c|tenant| で始まるものは PrincipalType が SecurityGroup と表示されますが、c で始まるアカウントであるため特殊グループであり、組織外部からアクセスされるときにはこのアカウントがマッピングされるのだろうと推測できます。ちなみに、ほかにも c で始まるこのタイプのアカウントには次のものがあります。
- すべてのユーザー … c:\0(.s|true
- すべてのユーザー (windows) … c:0!.s|windows
- 外部ユーザー以外のすべてのユーザー … c:0-.f|rolemanager|spo-grid-all-users/<GUID>
詳細を知るにはサイト内のユーザー一覧を取得する Get-PnPUser コマンドを実行する必要があります。
上記の結果を見るとこのタイプは名前は SLinkClaim で始まるいうアカウントです。名前から察するに共有リンク用のクレーム認証のアカウントだということですね。
このアカウントの IsHiddenInUI プロパティは True になっているため、SharePoint の Web UI 上には非表示だということです。Entra ID ポータル上でも非表示です。そのため PowerShell コマンドなど利用しないと気づきにくいことがわかります。
所属グループも確認しておきましょう。
c:0u.c|tenant|で始まるセキュリティ グループが所属するグループが 上記では13 番と 14番となっています。Get-PnPGroup コマンドで確認すると次の通りです。
- 13 … Limited Access System Group For List
- 14 … Limited Access System Group For Web
つまり、サイトやリストレベルでアクセスが可能なように制限付きアクセス権限が付与されるようになっているわけです。
共有リンクによって作成されるサイト内の各 SharePoint グループのメンバーシップですが、実際にリンク経由でアクセスすることでユーザーが追加される仕組みになっています。
これはどういう理屈なのかということなのですが下記の Microsoft Learn に共有リンクの仕組みについての情報が公開されています。
How shareable links work in OneDrive and SharePoint in Microsoft 365
内容を整理してみましょう。主要な3つの共有リンクの特徴をまとめると次の通りです。
共有リンクの種類 | 特徴 | 利用できるユーザー範囲 | 備考 |
すべてのユーザー | 転送可能で取り消し可能な秘密キー |
そのリンクを持つユーザーは誰でもアクセスできる。 ユーザー認証が不要。 |
アクセスは監査できない。 Teams共有チャネルサイト内のファイルではすべてのユーザーリンクは使用できない。 |
組織のユーザー | 転送可能で取り消し可能な秘密キー |
Microsoft 365 組織内のユーザーのみ利用できる。 ユーザー認証が必要 |
ただ、共有リンクを作成しただけではユーザーに対してアクセス権は付与されない。ユーザーはリンクを実際にクリックすることでアクセス権と引き換える必要がある。リンクをクリックした後は、アクセス権限がユーザーに対して付与されるため、検索や Copilot 経由でのアクセスが可能になる。 |
特定のユーザー | 転送不可能で取り消し可能な秘密キー |
共有リンク作成時に指定したユーザー ユーザー認証が必要 |
共有リンク作成時にアクセス権限も付与されるため、検索や Copilot 経由でのアクセスが可能。 Teams 共有チャネルサイト内のファイルの場合、特定のユーザーリンクはチャネル内のユーザーに対してのみ送信できる。 |
- 転送可能…他のユーザーに転送できる
- 取り消し可能…リンクを削除することでリンクを介してアクセスしたすべてのユーザーのアクセスを取り消せる
- 秘密キー…推測したり派生させることはできない。
以上のことから「組織のユーザー」に対する共有リンクの作成は、アクセス権限を引き換えるための引換証のようなもので、これをクリックすることで SharePoint としてのアクセス権限を付与することになるということです。一度アクセス権限を付与されれば、共有リンク経由でなくともファイルやフォルダーにアクセスできるようになるということです。
メンバーシップの確認
以上を踏まえて、SharePoint グループのメンバーシップを確認しみましょう。各 SharePoint グループのメンバーシップ状況は Get-PnPSiteGroup コマンドで確認できます。
下記はまだ共有リンク経由で誰もコンテンツにアクセスしていない状態であるため、Limited Access System Group および SharingLinks の各グループにメンバーがいません。
ですが、共有リンク経由で実際にアクセスすると各グループにユーザーが追加されます。まずは組織内のユーザー alice@office-i-learning.jp がアクセスします。これにより次の4つのグループに追加されます。
- Limited Access System Group
- Limited Access System Group For List
- Limited Access System Group For Web
- アクセスした共有リンクが紐づく SharingLinks.<GUID>
逆にいえば、実際にアクセスするまでグループのメンバーとして追加されることはありません。
では、ここで「すべてのユーザー」の共有リンクを作成します。ユーザーが直接アクセスしなくても、組織外のユーザーが紐づけられる匿名アクセス用のアカウント(下図のbe80e~ではじまるもの)が最初に次のグループに追加されます。
- Limited Access System Group For List
- Limited Access System Group Fo Web
- Limited Access System Group
- Limited Access System Group For List
- Limited Access System Group For Web
- SharingLinks.<GUID>.AnonymousView.<GUID>
Limited Access System Groupと SharingLinks のグループは組織内のアカウントのみがアクセス時に追加されるということがわかります。
なお、共有リンクを作成するときに「選択したユーザー」を指定している場合は、最初から SharingLinks~グループにユーザーが追加されます。例えば、次の手順では組織内の support@office-i-learning.jp と組織外の Adele.Vance@officeidev.onmicrosoft.com を名指ししています。
- SharingLinks.<GUID>
- Limited Access System Group
- Limited Access System Group For List
- Limited Access System Group For Web
SharePoint グループのメンバーはWebブラウザー上で確認できます。ただし、グループIDがわかっている必要があります。PnP PowerShell コマンドの Get-PnPGroup コマンドなどで確認できます。
IDがわかれば次のURLで確認できます。
- https://<サイトのURL>/_layouts/15/people.aspx?MembershipGroupId=<グループID>
Microsoft 365 の検索は SharePoint のアクセス権限に依存しており、ログインユーザーにとって権限のあるコンテンツのみが検索結果に表示されます。したがって共有リンクが作成されたとはいえ実質アクセスしたことのないコンテンツは検索結果ではヒットしないということです(選択したユーザー指定を除く)。
Tips: 共有リンクが作成されているコンテンツを洗い出す
サイト内の共有リンクの一覧を取得する方法として一般的なのは「サイトの利用状況」ページの「外部ユーザーと共有」セクションで “レポートを実行” することです。ちなみに、レポートの保存先はライブラリ直下は指定できないため必ずフォルダーを用意しておく必要があります。
生成されたファイルを開くとサイト、リスト(ライブラリ)、アイテムレベルでリソースのパスとアクセス権限が一覧できます。
これともう一つ、PnP PowerShell コマンドの Get-PnPGroup を利用して SharingLinks グループの「説明(Description)」を確認すると共有リンクのソースパスが確認できます。
実行結果は次の通りであり、共有リンク単位でグループは作成されるためどのくらいの数の共有リンクがあるのかを確認するのには便利ではないかと思います。
まとめ
とりあえず、一通りまとめてみましたが、なかなか難しく感じる方も多いのではないでしょうか? これをしっかり理解するには、SharePoint の権限管理の仕組みの基本がわかっている必要があります。
※文書だけで理解しにくいという方はぜひ、弊社のファイル管理の研修などにご参加ください♪
また、やみくもにライブラリ内にフォルダーを山のように作成して個別に権限管理している場合は、より複雑になってきます。研修やコンサルでも繰り返しお伝えしていますが、サイトの権限管理はシンプルになるように事前にいかに設計しておくかが非常に重要なカギを握ります。フォルダー以前に、サイトの分け方をしっかり考えておくことで機密情報保護やドキュメントのライフサイクル管理ができるようになります。
これから Microsoft 365 を導入する方はもちろん、すでに導入済みの方も情報管理の在り方を今一度、しっかりと見直してみてはいかがでしょうか?