💻

Deep Dive: Microsoft 365 Apps 共有リンクの有効期限の仕組み

2024/07/20に公開

Deep Dive on SharePoint/OneDrive Shared links expiration feature

最近、Microsoft 365 Apps にて、共有リンクに有効期限を設定できるアップデート (MC799277) がリリースされました。

https://admin.microsoft.com/?source=applauncher&ref=MessageCenter/:/messages/MC799277

本機能は、先行して すべてのユーザー 種別の共有リンクでのみでリリースされていたものですが、この度、他の共有種別でも利用できるようになったものです。

https://support.microsoft.com/ja-jp/office/ファイル-フォルダー-リスト-アイテムの共有-e923c4f0-89f5-4cf0-8948-391e31fc0b30#bkmk_link-settings

共有リンクの有効期限機能についての解説はググればいくつか出てくると思うのですが、私が気になるのは 有効期限内に共有リンクにアクセスした後、有効期限が過ぎたら共有リンク経由で付与されたアクセス権限はどうなるのか という部分です。
エンプラ企業で Microsoft 365 を管理していたり、実際に社外ユーザーをゲストとして招待して共有リンクで資料を共有していたりするユーザーは、共有リンクの有効期限が切れたらアクセス権限も自動で削除されるの?という感じで、この辺りの動作が気になってくるんじゃないかと思います。
なので今回は、有効期限が切れた後の権限周りに付いて深掘りしてみようと思います。

共有リンクによるアクセス権付与の流れ

この部分については、会社の Advent Calendar にて私の上司が deep dive 的な記事を投稿しているので、ぜひそれを見てください。
思った以上に各所に反響をいただき、同じような部分でいくつか検証記事や解説記事などもその後出てきているのを観測しているので、興味がある方はググってみると他にもいくつか記事を見つけられるかもしれません。

https://techblog.recruit.co.jp/article-262

ざっくり言うと、共有リンクは

  • SharePoint サイト権限からの継承を解除して固有の権限設定ができる状態にし
  • 共有リンクを作成した際に (裏で自動的に) 専用 SharePoint グループ (制限付きアクセスグループ) を作成して共有下のファイル/フォルダに対して権限を付与し
  • 共有リンク経由でアクセスしてきたユーザーを自動的に専用 SharePoint グループに追加し
  • 共有下のファイルへのアクセス権限を共有リンク経由でアクセスしてきたユーザーに付与する (制限付きアクセスグループにユーザーを追加する)

という動きをしているものになります。

確認できた挙動から、共有リンクでやっていることは「SharePoint グループを作成してファイルに対するアクセス権を付与する。アクセス権を付与するユーザーを SharePoint グループのメンバーとして追加する」ということが分かります。
アクセス権管理の基本的な仕組みが変更されているわけではなく、「このリンク経由でアクセスしてきた場合はグループのメンバーとして自動的に追加しますよ」という機能が追加されただけで、それ以外は従来からある権限管理の仕組みと同じと考えてよさそうです。
一度共有リンク経由でアクセスしてしまえばその後は共有リンクでなく「既存のアクセス権を持つユーザー」向けのリンクであってもアクセスできるようになります。

  • 共有リンクを作成すると対応するグループが作成され権限が付与される
  • ユーザーが共有リンク経由でアクセスすると、共有リンクと対応するグループのメンバーとして追加される

共有リンクがアクセス権限を意味するものでは無いのなら、どこまで共有リンクの有効期限機能には意義があるのか

つまり、共有リンク自体はアクセス権限を意味するものではなく、アクセス権を付与する処理を起動するためのトリガー的な存在なため、共有リンクの 有効期限機能は果たしてどこまで有意義なものなのか? という疑問が生まれるわけです。
共有リンクは単なるアクセス権付与のための一時リンクみたいなものなので、共有リンクの有効期限が切れても、それまでに設定された実際のアクセス権限はそのままなんじゃないの? って思ったので、その認識に齟齬がないか、改めて確認してみたくなったわけです。

共有リンクの仕組みは、多くの人が共有リンク=アクセス権限と勘違いしていると思うので、ここをしっかり押さえておきたく、検証をしてみようと思います。

有効期限が切れる前に共有リンク経由でアクセス権を追加されている場合の動作

有効期限付きの共有リンクをドキュメントライブラリ配下のファイルに設定し、SharePoint サイトにアクセス権を持たないテナント内のメンバーにアクセス権を付与します。
ファイルの階層は以下の通りです。

サイト  
|- ドキュメントライブラリ  
  |- フォルダ  
    |- ファイル  

ファイルに対しては {テナント} のユーザー を使用し、実際に検証するには、以下のユーザーおよび状態とします。

  • テストユーザー01 : 有効期限内に共有リンクへアクセス
  • テストユーザー02 : 有効期限内に共有リンクへアクセス
  • テストユーザー03 : 有効期限内に共有リンクへ未アクセス

有効期限内に共有リンクにアクセスし権限付与

テストユーザー01 と テストユーザー02 で共有リンクにアクセスした後、内部で自動追加されるグループ権限を確認しておきます。
権限情報はブラウザ画面からは確認が難しい (サイトの利用状況とか見れば確認はできるけど直感的にわかりにくい) ので、PnP PowerShell で確認します。(詳細は先述のブログを参照)

Connect-PnPOnline -Url {SharePoint サイト URL} -DeviceLogin
$web = Get-PnPWeb -Includes RoleAssignments
$web.RoleAssignments | ForEach-Object { Get-PnPProperty -ClientObject $_ -Property RoleDefinitionBindings, Member }
$web.RoleAssignments | ForEach-Object { $permission = $_.RoleDefinitionBindings.Name; $_.Member | select Title,PrincipalType,@{ Name = "Permission"; Expression = { $permission }}}
実行結果(サイト権限)
Title                                                                      PrincipalType Permission
-----                                                                      ------------- ----------
テスト_ 有効期限付き共有リンク 所有者                                    SharePointGroup Full Control
テスト_ 有効期限付き共有リンク 閲覧者                                    SharePointGroup Read
テスト_ 有効期限付き共有リンク メンバー                                  SharePointGroup Edit
Limited Access System Group For Web 412903fd-e966-45dc-92c9-39d21c29bddb SharePointGroup Web-Only Limited Access
$list = Get-PnPList -Identity "{ドキュメントライブラリ名}" -Includes RoleAssignments
$list.RoleAssignments | ForEach-Object { Get-PnPProperty -ClientObject $_ -Property RoleDefinitionBindings, Member}
$list.RoleAssignments | ForEach-Object { $permission = $_.RoleDefinitionBindings.Name; $_.Member | select Title,PrincipalType,@{ Name = "Permission"; Expression = { $permission }}}
実行結果(ドキュメントライブラリ権限)
Title                                                                       PrincipalType Permission
-----                                                                       ------------- ----------
テスト_ 有効期限付き共有リンク 所有者                                     SharePointGroup Full Control
テスト_ 有効期限付き共有リンク 閲覧者                                     SharePointGroup Read
テスト_ 有効期限付き共有リンク メンバー                                   SharePointGroup Edit
Limited Access System Group For List 8585c860-ba8e-493c-ac6a-bc223793db92 SharePointGroup Limited Access
$list = Get-PnPList -Identity "{ドキュメントライブラリ名}"
$folder = Get-PnPListItem -List $list -Id 1 # 作成したフォルダの内部 Id が 1 のため 1 を指定
Get-PnPListItemPermission -List $list -Identity $folder | select -ExpandProperty Permissions
実行結果(フォルダ権限)
PermissionLevels PrincipalName                                                               PrincipalType PrincipalId
---------------- -------------                                                               ------------- -----------
{Full Control}   テスト_ 有効期限付き共有リンク 所有者                                     SharePointGroup           3
{Read}           テスト_ 有効期限付き共有リンク 閲覧者                                     SharePointGroup           4
{Edit}           テスト_ 有効期限付き共有リンク メンバー                                   SharePointGroup           5
{Limited Access} Limited Access System Group For List 8585c860-ba8e-493c-ac6a-bc223793db92 SharePointGroup          13
$list = Get-PnPList -Identity "{ドキュメントライブラリ名}"
$file = Get-PnPListItem -List $list -Id 2 # 作成したファイルの内部 Id が 2 のため 2 を指定
Get-PnPListItemPermission -List $list -Identity $file | select -ExpandProperty Permissions
実行結果(ファイル権限)
PermissionLevels PrincipalName                                                                                             PrincipalType PrincipalId
---------------- -------------                                                                                             ------------- -----------
{Full Control}   テスト_ 有効期限付き共有リンク 所有者                                                                   SharePointGroup           3
{Read}           テスト_ 有効期限付き共有リンク 閲覧者                                                                   SharePointGroup           4
{Edit}           テスト_ 有効期限付き共有リンク メンバー                                                                 SharePointGroup           5
{Contribute}     SharingLinks.836fe09c-4fce-44b8-85a7-8e242ff05bd7.OrganizationEdit.09c0f6f7-b592-4c51-940f-08d541f46282 SharePointGroup          12
{Limited Access} Limited Access System Group For List 8585c860-ba8e-493c-ac6a-bc223793db92                               SharePointGroup          13
Get-PnPGroup
実行結果(SharePointグループ情報)
Id Title                                                                                                   LoginName
-- -----                                                                                                   ---------
13 Limited Access System Group For List 8585c860-ba8e-493c-ac6a-bc223793db92                               Limited Access System Group For List 8585c860-ba8e-493c-ac6a-bc223793d…
14 Limited Access System Group For Web 412903fd-e966-45dc-92c9-39d21c29bddb                                Limited Access System Group For Web 412903fd-e966-45dc-92c9-39d21c29bd…
12 SharingLinks.836fe09c-4fce-44b8-85a7-8e242ff05bd7.OrganizationEdit.09c0f6f7-b592-4c51-940f-08d541f46282 SharingLinks.836fe09c-4fce-44b8-85a7-8e242ff05bd7.OrganizationEdit.09c…
5  テスト_ 有効期限付き共有リンク メンバー                                                                 テスト_ 有効期限付き共有リンク メンバー
4  テスト_ 有効期限付き共有リンク 閲覧者                                                                   テスト_ 有効期限付き共有リンク 閲覧者
3  テスト_ 有効期限付き共有リンク 所有者                                                                   テスト_ 有効期限付き共有リンク 所有者
12,13,14 | ForEach-Object { Get-PnPGroup -Identity $_ } | select Title,Users
実行結果(制限付きアクセスグループ一覧)
Title                                                                                                   Users
-----                                                                                                   -----
SharingLinks.836fe09c-4fce-44b8-85a7-8e242ff05bd7.OrganizationEdit.09c0f6f7-b592-4c51-940f-08d541f46282 {17, 15}
Limited Access System Group For List 8585c860-ba8e-493c-ac6a-bc223793db92                               {17, 15}
Limited Access System Group For Web 412903fd-e966-45dc-92c9-39d21c29bddb                                {17, 15}
15,17 | ForEach-Object { Get-PnPUser -Identity $_ } | select Id,Title,LoginName,Email
実行結果(制限付きアクセスグループのメンバー情報)
Id Title            LoginName                                         Email
-- -----            ---------                                         -----
15 テストユーザー02 i:0#.f|membership|test02@jcdugdev.onmicrosoft.com test02@jcdugdev.onmicrosoft.com
17 テストユーザー01 i:0#.f|membership|test01@jcdugdev.onmicrosoft.com test01@jcdugdev.onmicrosoft.com

テストユーザー01 と テストユーザー02 が制限付きアクセスグループにメンバーとして追加されているため、問題なくアクセス権が付与されていることを確認できました。

有効期限外に共有リンクにアクセス

共有リンクの有効期限が切れたことを確認して、テストユーザー03 を使って共有リンクにアクセスしてみます。

共有リンクが切れ、アクセスができないことを確認しました。

有効期限切れ後の SharePoint グループ情報はどうなっているのか

念の為、裏側の SharePoint グループの情報も確認してみます。

Connect-PnPOnline -Url {SharePoint サイト URL} -DeviceLogin
Get-PnPGroup
実行結果
Id Title                                                                                                   LoginName
-- -----                                                                                                   ---------
16 Limited Access System Group                                                                             Limited Access System Group
13 Limited Access System Group For List 8585c860-ba8e-493c-ac6a-bc223793db92                               Limited Access System Group For Lis…
14 Limited Access System Group For Web 412903fd-e966-45dc-92c9-39d21c29bddb                                Limited Access System Group For Web…
12 SharingLinks.836fe09c-4fce-44b8-85a7-8e242ff05bd7.OrganizationEdit.09c0f6f7-b592-4c51-940f-08d541f46282 SharingLinks.836fe09c-4fce-44b8-85a…
5  テスト_ 有効期限付き共有リンク メンバー                                                                 テスト_ 有効期限付き共有リンク メンバー…
4  テスト_ 有効期限付き共有リンク 閲覧者                                                                   テスト_ 有効期限付き共有リンク 閲覧者…
3  テスト_ 有効期限付き共有リンク 所有者                                                                   テスト_ 有効期限付き共有リンク 所有者…
12,13,14,16 | ForEach-Object { Get-PnPGroup -Identity $_ } | select Title,Users
実行結果
Title                                                                                                   Users
-----                                                                                                   -----
SharingLinks.836fe09c-4fce-44b8-85a7-8e242ff05bd7.OrganizationEdit.09c0f6f7-b592-4c51-940f-08d541f46282 {17, 15}
Limited Access System Group For List 8585c860-ba8e-493c-ac6a-bc223793db92                               {17, 15}
Limited Access System Group For Web 412903fd-e966-45dc-92c9-39d21c29bddb                                {17, 15}
Limited Access System Group                                                                             {17, 15}
Get-PnPUser | select id,Title,LoginName,Email
実行結果
        Id Title                                   LoginName                                                                     Email
        -- -----                                   ---------                                                                     -----
         7 Masaoka Yuji                            i:0#.f|membership|●●●●●@jcdugdev.onmicrosoft.com                          ●●●●●@jcdugdev.onmicrosoft.com
        10 NT Service\spsearch                     i:0#.w|nt service\spsearch                                                    
1073741822 SharePoint アプリ                       i:0i.t|00000003-0000-0ff1-ce00-000000000000|app@sharepoint                    
1073741823 システム アカウント                     SHAREPOINT\system                                                             
        11 すべてのユーザー                        c:0(.s|true                                                                   
        17 テストユーザー01                        i:0#.f|membership|test01@jcdugdev.onmicrosoft.com                             test01@jcdugdev.onmicrosoft.com
        15 テストユーザー02                        i:0#.f|membership|test02@jcdugdev.onmicrosoft.com                             test02@jcdugdev.onmicrosoft.com
         8 テスト: 有効期限付き共有リンク メンバー c:0o.c|federateddirectoryclaimprovider|70381c06-4d9b-442a-9bc6-b4813abf7fd3   test-shared-link-expiration@jcdugdev.onmic…
         6 テスト: 有効期限付き共有リンク 所有者   c:0o.c|federateddirectoryclaimprovider|70381c06-4d9b-442a-9bc6-b4813abf7fd3_o test-shared-link-expiration@jcdugdev.onmic…
         9 外部ユーザー以外のすべてのユーザー      c:0-.f|rolemanager|spo-grid-all-users/558a54b8-22d4-450b-a674-fa0fd5ceb578

特に変化はないようです。(グループの Id 16 は前回の実行結果では表示されていませんが、共有リンクからアクセス権付与された際に裏で SharePoint が作成する権限なので問題ありません)
制限付きアクセスグループも、共有リンクが有効の時に付与した テストユーザー01 と テストユーザー02 しか登録されていませんでした。
SharePoint サイト自体にも、テストユーザー03 が登録されることはないようです。期待通りというか、正しい動作ですね。

念の為、サイト権限なども確認してみます。

$list = Get-PnPList -Identity "{ドキュメントライブラリ名}" -Includes RoleAssignments
$list.RoleAssignments | ForEach-Object { Get-PnPProperty -ClientObject $_ -Property RoleDefinitionBindings, Member}
$list.RoleAssignments | ForEach-Object { $permission = $_.RoleDefinitionBindings.Name; $_.Member | select Title,PrincipalType,@{ Name = "Permission"; Expression = { $permission }}}

$folder = Get-PnPListItem -List $list -Id 1 # 作成したフォルダの内部 Id が 1 のため 1 を指定
Get-PnPListItemPermission -List $list -Identity $folder | select -ExpandProperty Permissions

$file = Get-PnPListItem -List $list -Id 2 # 作成したファイルの内部 Id が 2 のため 2 を指定
Get-PnPListItemPermission -List $list -Identity $file | select -ExpandProperty Permissions
実行結果
Title                                                                       PrincipalType Permission
-----                                                                       ------------- ----------
テスト_ 有効期限付き共有リンク 所有者                                     SharePointGroup Full Control
テスト_ 有効期限付き共有リンク 閲覧者                                     SharePointGroup Read
テスト_ 有効期限付き共有リンク メンバー                                   SharePointGroup Edit
Limited Access System Group For List 8585c860-ba8e-493c-ac6a-bc223793db92 SharePointGroup Limited Access
Limited Access System Group                                               SharePointGroup Limited Access


Title                                                                       PrincipalType Permission
-----                                                                       ------------- ----------
テスト_ 有効期限付き共有リンク 所有者                                     SharePointGroup Full Control
テスト_ 有効期限付き共有リンク 閲覧者                                     SharePointGroup Read
テスト_ 有効期限付き共有リンク メンバー                                   SharePointGroup Edit
Limited Access System Group For List 8585c860-ba8e-493c-ac6a-bc223793db92 SharePointGroup Limited Access
Limited Access System Group                                               SharePointGroup Limited Access


PermissionLevels PrincipalName                                                                                             PrincipalType Princi
                                                                                                                                          palId
---------------- -------------                                                                                             ------------- ------
{Full Control}   テスト_ 有効期限付き共有リンク 所有者                                                                   SharePointGroup      3
{Read}           テスト_ 有効期限付き共有リンク 閲覧者                                                                   SharePointGroup      4
{Edit}           テスト_ 有効期限付き共有リンク メンバー                                                                 SharePointGroup      5
{Contribute}     SharingLinks.836fe09c-4fce-44b8-85a7-8e242ff05bd7.OrganizationEdit.09c0f6f7-b592-4c51-940f-08d541f46282 SharePointGroup     12
{Limited Access} Limited Access System Group For List 8585c860-ba8e-493c-ac6a-bc223793db92                               SharePointGroup     13
{Limited Access} Limited Access System Group                                                                             SharePointGroup     16

サイト、フォルダ、ファイルについても、権限の変化はありませんでした。
つまり、共有リンクの有効期限が切れたとしても、SharePoint 内に登録されているユーザー権限情報に変化はないということがわかります。

有効期限が切れる前にアクセス済みのユーザーによる再アクセス

では、有効期限が切れる前にアクセスしたユーザーが有効期限切れの共有リンクを使用するとどうなるのかを見てみたんですが、結果、有効期限が切れた共有リンクは、すでにアクセス権限が付与されていようと、機能しないものになっていました。
まあ、これは共有リンクがアクセス権そのものではなく、アクセス権付与のための一時リンクという存在であることを鑑みれば、理解できます。

では、共有リンク経由でアクセス権が付与されたファイルを有効期限後はどう見れば良いのか

これは簡単な話です。共有リンクを使わずにアクセスすれば良いのです。
権限が付与されたファイル/フォルダの URL に直接アクセスするか、既存のアクセス権を持つユーザー の共有リンクを使用すれば、SharePoint 権限グループの設定はそのままになっているので、アクセスできます。
あるいは、一度アクセスしたファイルであれば、Microsoft 365 の検索結果でも表示されるので、検索一覧からもアクセスできるはずです。(詳細は先述のブログ)

共有リンクで権限付与されたファイルは検索結果に表示されるか?

検索については、

  • 「すべてのユーザー」や「リンクを知っている組織のユーザー」の共有リンクを作成したからと言ってすべてのユーザーの検索結果に表示されるわけではない(共有リンク作成時点では SharePoint グループに権限を付与しただけのため)
  • 共有リンク経由でアクセスしたり、共有リンク作成時に明示的に選択されたユーザーについては、グループのメンバーとなりファイルのアクセス権を持つことになるため、検索結果にもファイルが表示される

という挙動になりました。「自分に権限が付与されたファイルだけが検索できる」のが SharePoint の仕組みなので、内部の仕様が分かっていれば自然な結果ですね。

検索結果に表示されるファイル

  • 「すべてのユーザー」または「組織のユーザー」に共有されて1度でもユーザーがアクセスしたことがあるファイル
  • 「すべてのユーザー」「組織のユーザー」「特定のユーザー」に共有する際に共有するユーザーとして指定されたファイル

検索結果に表示されないファイル

  • 「すべてのユーザー」または「組織のユーザー」に共有されているがユーザーがアクセスしたことがないファイル

実際に共有リンク自体の情報も見てみる

SharePoint グループの権限自体は共有リンクの有効期限が切れようと変化は起きない、ということがわかリました。
では最後に、新しく共有リンクに追加された有効期限について 共有リンクの有効期限を再設定したらどうなるのか の部分を確認して、この deep dive を締めくくっていきたいと思います。

共有リンク自体の情報についても、PnP PowerShell で取得し確認することができるので、取得してみます。

$sharedLink = Get-PnPFileSharingLink -FileUrl "/ALL/test/Document.docx" # 対象ファイルの絶対パスを指定
$sharedLink
$sharedLink.Link
実行結果
Id                    : 09c0f6f7-b592-4c51-940f-08d541f46282
GrantedToV2           : 
GrantedToIdentitiesV2 : {PnP.Core.Model.Security.SharePointIdentitySet, PnP.Core.Model.Security.SharePointIdentitySet}
Invitation            : 
Link                  : PnP.Core.Model.Security.SharingLink
Roles                 : {Write}
ShareId               : 
ExpirationDateTime    : 2024/07/18 15:00:00
HasPassword           : False
Key                   : 09c0f6f7-b592-4c51-940f-08d541f46282
Metadata              : {}
PnPContext            : PnP.Core.Services.PnPContext
Parent                : PnP.Core.Model.SharePoint.File
Requested             : False
MappingHandler        : 
PostMappingHandler    : 
HasChanges            : True

PreventsDownload : False
Type             : Edit
Scope            : Organization
WebHtml          : 
WebUrl           : https://jcdugdev.sharepoint.com/:w:/s/test-shared-link-expiration/EZzgb4POT7hEhaeOJC_wW9cB8nyC7XKOpHqcJL_ph8k1nQ

はい、ちゃんと ExpirationDateTime という形で有効期限が共有リンクの中に含まれていますね。
なので、挙動としては、

  1. 共有リンク URL から共有リンク Id を引き当てた後、
  2. ExpirationDateTime の値 (UTC) を参照し有効期限を判断

ということをしてそうですね。
ちなみに、この共有リンク情報の中に GrantedToIdentitiesV2 というのがあります。この中には、この共有リンク経由でアクセスし権限を付与されたユーザーの一覧情報が含まれていました。

$sharedLink.GrantedToIdentitiesV2 | ForEach-Object { $_.User }
実行結果
Id                 : 3c0761e6-4417-4066-9360-2abb7ab405cc
DisplayName        : テストユーザー02
Email              : test02@jcdugdev.onmicrosoft.com
TenantId           : 
UserIdentityType   : 
Key                : 3c0761e6-4417-4066-9360-2abb7ab405cc
Metadata           : {}
PnPContext         : 
Parent             : 
Requested          : False
MappingHandler     : 
PostMappingHandler : 
HasChanges         : False

Id                 : 112fbd4d-1abf-41fa-8e33-141ac300668c
DisplayName        : テストユーザー01
Email              : test01@jcdugdev.onmicrosoft.com
TenantId           : 
UserIdentityType   : 
Key                : 112fbd4d-1abf-41fa-8e33-141ac300668c
Metadata           : {}
PnPContext         : 
Parent             : 
Requested          : False
MappingHandler     : 
PostMappingHandler : 
HasChanges         : False

同じ期限で有効期限を再設定した共有リンクを払い出すと、共有リンク情報はどうなるのか

共有リンクの有効期限が切れた状態で、同じ権限の共有リンクを今度は有効期限を 2024/07/21 JST に設定して再度作成してみました。
ブラウザ上では、同じ共有リンク URL で有効期限だけが上書きされたように見えますが、これが裏側でもちゃんと反映されているのかを念の為確認してみたところ、

$replacedSharedLink = Get-PnPFileSharingLink -FileUrl "/ALL/test/Document.docx"
$replacedSharedLink
$replacedSharedLink.Link
実行結果
Id                    : 09c0f6f7-b592-4c51-940f-08d541f46282
GrantedToV2           : 
GrantedToIdentitiesV2 : {PnP.Core.Model.Security.SharePointIdentitySet, PnP.Core.Model.Security.SharePointIdentitySet}
Invitation            : 
Link                  : PnP.Core.Model.Security.SharingLink
Roles                 : {Write}
ShareId               : 
ExpirationDateTime    : 2024/07/20 15:00:00
HasPassword           : False
Key                   : 09c0f6f7-b592-4c51-940f-08d541f46282
Metadata              : {}
PnPContext            : PnP.Core.Services.PnPContext
Parent                : PnP.Core.Model.SharePoint.File
Requested             : False
MappingHandler        : 
PostMappingHandler    : 
HasChanges            : True

PreventsDownload : False
Type             : Edit
Scope            : Organization
WebHtml          : 
WebUrl           : https://jcdugdev.sharepoint.com/:w:/s/test-shared-link-expiration/EZzgb4POT7hEhaeOJC_wW9cB8nyC7XKOpHqcJL_ph8k1nQ

有効期限 ExpirationDateTime の値がちゃんと変わることを確認できました。

さいごに

当初の予想であった

共有リンクの有効期限が切れても、それまでに設定された実際のアクセス権限はそのままなんじゃないの?

これは想定通りということが確認できました。

うーん、個人的には、共有リンクの有効期限は、テナント外の匿名ユーザーとかに対して共有リンクを公開する際はある程度のメリットがありそうですが、社内 (テナント内) のユーザーに対して使うときは、正直そこまでメリットを享受できそうになさそうですね。
社内で共有リンクを有効期限付きで使いたい時のユースケースって、

  • 本来は特定の部署内のメンバーだけがみれる SharePoint サイト内に資料を配置して
  • 一定の期間において一時的に、全社とか一部の部署外メンバーに同資料を公開/閲覧できるようにし
  • 期間が過ぎたら、また権限をもとに戻す (権限クリーニング)

ってことをやりたくて使うことになると思うんです。
で、結局の部分、一番社内ユーザーが求めるのは最後の 権限クリーニング の部分だと思うので、それができないとなると、社内での活用の幅というのが狭まるんじゃないかな、と思いました。

個々のファイルに付与された共有リンク経由で付与されたユーザー権限のクリーニングが現状、PnP PowerShell などを使わないとめんどくさいことを考えると、共有リンクの有効期限機能というのは、この権限クリーニング部分も含む形での機能として実装をしてもらうよう、製品チームには改善を希望したいところです。(有効期限が切れたタイミングで GrantedToIdentitiesV2 内にあるユーザー情報を消せばいいだけのはずです)

フィードバックポータルにはこのことを投稿したので、よければ皆さんも Vote していただけると幸いです。

https://feedbackportal.microsoft.com/feedback/idea/0f216521-f445-ef11-b4ad-0022484d3ecc

参考文献

※どんなブログ、どんな人格であっても、誰かの記事をもとに自分のブログを書いたなら、出典はきちんと明記して、あたかも全部自分の功績みたいにするのはやめよう。

Discussion