「SharePoint Online」でできる脱PPAP:外部共有のサイト限定

セキュリティ

昨今、PPAP【Password付きzipファイルを送ります、Passwordを送ります、An号化(暗号化)Protocol(プロトコル)】が問題視されています。そこで、脱PPAPの観点から Microsoft 365のSharePoint Online で特定サイトだけを有効化して外部共有する方法をご紹介します。

SharePoint Online の外部共有の設定は、全体とサイト別の設定が存在していますが、サイト別の設定を全体の設定よりも弱いセキュリティレベルにすることができません。

例えば、全体設定を「自分の組織内のユーザーのみ」にすると、サイト設定で外部共有はできません。

サイト別に外部共有を許可したい場合は、全体設定をサイト設定よりも弱いセキュリティレベルにしておく必要があります。

しかし、Teams などでグループを作成した際にできるサイトも全体設定と同じレベルになってしまうため、セキュリティレベルが低下してしまいます。ファイアウォールなどのルールの考え方「既定は拒否して個別に許可」と同じように、できればサイトを作るときは、外部共有をさせないようにして、個別に外部共有を許可するサイトを決定したいです。

こういうときは、サイト スクリプトというものが使えます。

サイト スクリプトは、サイトを作成する際に利用するサイト テンプレートをカスタマイズして独自の構成にすることができます。詳しくは以下のサイトをご確認ください。

サイト テンプレートの確認

サイト テンプレートにサイト スクリプトを紐づけるため、まずは、どのサイト テンプレートに適用するかを考えます。SharePoint Onlineには、数多くのテンプレートが用意されていますが、PowerShell を利用して確認します。

※PnP PowerShell や SharePointOnlinePowerShell のコマンドでは、すべてのテンプレートが表示されませんでしたので、今回は SharePoint .NET クライアント オブジェクト モデル(CSOM)を利用して表示してみます。

$User="<access-user>"
$Pass="<access-user-password>"
$URL="<sharepoint-site-url>"
$Secure = ConvertTo-SecureString -AsPlainText $Pass -Force
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"

$Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($URL)
$Ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($User,$Secure)

$site = $Ctx.Web
$Ctx.Load($site)
$Ctx.ExecuteQuery()
$templates = $Ctx.Web.GetAvailableWebTemplates(1041, 15);
$Ctx.Load($templates);
$Ctx.ExecuteQuery();
foreach($temp in $templates){
    $temp.Id.ToString() + "`t"  +   $temp.Name.ToString() + "`t" + $temp.Title.ToString()
}

$Ctx.Dispose()
0       GLOBAL#0        グローバル テンプレート
1       STS#3   チーム サイト (Microsoft 365 グループなし)
1       STS#0   チーム サイト (クラシック表示)
1       STS#1   空のサイト
1       STS#2   ドキュメント ワークスペース
2       MPS#0   一般的な会議ワークスペース
2       MPS#1   空の会議ワークスペース
2       MPS#2   意思決定の会議ワークスペース
2       MPS#3   イベントの会議ワークスペース
2       MPS#4   複数ページの会議ワークスペース
3       CENTRALADMIN#0  サーバーの全体管理サイト
4       WIKI#0  Wiki サイト
7       BDR#0   ドキュメント センター
9       BLOG#0  ブログ
15      SGS#0   グループ ワーク サイト
16      TENANTADMIN#0   テナント管理サイト
17      APP#0   アプリのテンプレート
18      APPCATALOG#0    アプリ カタログ サイト
20      SPS#0   SharePoint Portal Server サイト
21      SPSPERS#0       SharePoint Portal Server 個人用スペース
21      SPSPERS#2       SharePoint Portal Server 個人用スペース (ストレージとソーシャル)
21      SPSPERS#3       SharePoint Portal Server 個人用スペース (ストレージのみ)
21      SPSPERS#4       SharePoint Portal Server 個人用スペース (ソーシャルのみ)
21      SPSPERS#5       SharePoint Portal Server 個人用スペース (空)
21      SPSPERS#6       SharePoint Portal Server 個人用スペース (ストレージとソーシャル)
21      SPSPERS#7       SharePoint Portal Server 個人用スペース (ストレージとソーシャル)
21      SPSPERS#8       SharePoint Portal Server 個人用スペース (ストレージとソーシャル)
21      SPSPERS#9       SharePoint Portal Server 個人用スペース (ストレージとソーシャル)
21      SPSPERS#10      SharePoint Portal Server 個人用スペース (ストレージとソーシャル)
21      SPSPERS#11      コンシューマー OneDrive
21      SPSPERS#12      JIT OneDrive Business
22      SPSMSITE#0      個人用設定サイト
30      SPSTOC#0        コンテンツ エリアのテンプレート
31      SPSTOPIC#0      トピック エリアのテンプレート
32      SPSNEWS#0       ニュース サイト
33      SPSNHOME#0      ニュース サイト
34      SPSSITES#0      サイト ディレクトリ
36      SPSCOMMU#0      コミュニティ エリアのテンプレート
38      SPSREPORTCENTER#0       レポート センター
39      CMSPUBLISHING#0 発行サイト
40      OSRV#0  共有サービス管理サイト
47      SPSPORTAL#0     グループ作業ポータル
50      SRCHCEN#0       エンタープライズ検索センター
51      PROFILES#0      プロファイル
52      BLANKINTERNETCONTAINER#0        発行ポータル
53      BLANKINTERNET#0 発行サイト
53      BLANKINTERNET#1 プレス リリース サイト
53      BLANKINTERNET#2 ワークフロー付き発行サイト
54      SPSMSITEHOST#0  個人用サイトのホスト
56      ENTERWIKI#0     エンタープライズ Wiki
62      COMMUNITY#0     コミュニティ サイト
63      COMMUNITYPORTAL#0       コミュニティ ポータル
64      GROUP#0 チーム サイト
65      POINTPUBLISHINGHUB#0    PointPublishing ハブ
66      POINTPUBLISHINGPERSONAL#0       個人のブログ
66      POINTPUBLISHINGPERSONAL#1       個人のブログ
67      POINTPUBLISHINGTOPIC#0  PointPublishing のトピック
68      SITEPAGEPUBLISHING#0    コミュニケーション サイト
69      TEAMCHANNEL#0   チーム チャネル
69      TEAMCHANNEL#1   チーム チャネル
90      SRCHCENTERLITE#0        基本検索センター
90      SRCHCENTERLITE#1        基本検索センター
95      DEV#0   開発者向けサイト
1015    SAPWorkflowSite#0       SAP ワークフロー サイト
1611    EXPRESS#0       Express チーム サイト
2009    EHS#0   Express ホスト サイト
2009    EHS#2   公開発行ポータル
2009    EHS#1   チーム サイト - SharePoint Online の構成
2757    ACCSVC#0        Access Services サイト
2757    ACCSVC#1        Access Services サイト
2764    ACCSRV#0        Access Services サイト
3100    PPSMASite#0     PerformancePoint
3300    EDISC#0 電子情報開示センター
3300    EDISC#1 電子情報開示ケース
3400    TBH#0   インプレース ホールド ポリシー センター
3500    POLICYCTR#0     コンプライアンス ポリシー センター
6000    REVIEWCTR#0     レビュー センター
6001    CONTENTCTR#0    コンテンツ センター
6115    PROJECTSITE#0   プロジェクト サイト
6221    PWA#0   Project Web App サイト
6215    PWS#0   Microsoft Project サイト
14483   OFFILE#0        (現在未使用) レコード センター
14483   OFFILE#1        レコード センター

デフォルトのテンプレート設定を変更

ここからは、SharePointOnlinePowerShell を利用します。

管理者接続

最初に管理者として SharePointOnlinePowerShell を利用して SharePoint Online に接続します。

$User="<access-user>"
$Pass="<access-user-password>"
$URL="<sharepoint-admin-site-url>"
$credential = New-Object -TypeName System.Management.Automation.PSCredential -argumentlist $User, $(convertto-securestring $Pass -asplaintext -force)
Connect-SPOService -Url $URL -Credential $credential

サイト スクリプトの作成

外部共有を無効にするサイト スクリプトを作成します。
実行すると、Id が表示されます。後ほど使用しますので、忘れずにメモしておいてください。

$script = @'
{
     "$schema": "schema.json",
         "actions": [
 {
    "verb": "setSiteExternalSharingCapability",
    "capability": "Disabled"
 }
         ],
         "bindata": { },
         "version": 1
 };
'@

Add-SPOSiteScript -Title "Disable External Users and Guest Sharing" -Content $script
Id                  : 3cb3ae68-7cae-4f78-b46b-751e2ef27e01
Title               : Disable External Users and Guest Sharing
Description         :
Content             :
Version             : 0
IsSiteScriptPackage : False

テンプレートへのサイト スクリプト割当て

今回は、WebTemplate 「64 」(GROUP#0 チーム サイト)に割当て、既定のテンプレートとして登録します。

Add-SPOSiteDesign -Title "Team Site without External Users and Guest Sharing" -WebTemplate "64" -SiteScripts "3cb3ae68-7cae-4f78-b46b-751e2ef27e01" -IsDefault
Id                  : 5e768051-f03d-421f-b012-7bcb6236fa63
Title               : Team Site without External Users and Guest Sharing
WebTemplate         : 64
SiteScriptIds       : {3cb3ae68-7cae-4f78-b46b-751e2ef27e01}
Description         :
ThumbnailUrl        :
PreviewImageUrl     :
PreviewImageAltText :
IsDefault           : True
Version             : 1
DesignPackageId     : 00000000-0000-0000-0000-000000000000
DesignType          : Site

管理者接続の切断

最後に管理者接続を切断します。

Disconnect-SPOService

最後に

今回は、SharePoint Online のサイト スクリプトを利用して新規サイトの外部共有を自動で無効にする方法をご紹介しました。

PNCでは Microsoft 365 の導入サービスをご提供しております。「Microsoft 365を導入してみたが、もっと良い使い方を知りたい」などお客様の疑問や課題を経験豊富なエンジニアが解決に向けてご支援いたします。お困りごとなどございましたらお問合せからお気軽にお申し付けください。

タイトルとURLをコピーしました