SharePointで外部の人とファイルを共有

# はじめに
PPAPを無くしたいな、という思いから記事を作成しました。PPAPを知りたい方は↓を参照してください。
[機密情報が大拡散!? 「パスワード後送します」はなぜ“ダサく”なったのか？](https://headlines.yahoo.co.jp/article?a=20190718-00010001-php_s-bus_all)
上記の記事では解決策がかかれていませんが、ファイル共有サービスがその一つかと思います。ただ「宅ふぁいる便」のように情報漏洩してしまうとかでは困ります。当社ではOffice365を使っているので、それで何か出来ないかと調査した結果、いい感じに出来るようになりました。ところで、宅ふぁいる便はサービス終了してしまったんですね。

# 全体設定
Microsoft365管理センターからSharePointの管理センターを開きます。
<img width="861" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245365/7c481181-e731-04a8-e170-7396c139eb0d.png">
左メニューの「共有」をクリックします。さらに画面最下部の「外部共有を特定の・・・」リンクをクリックします。
<img width="491" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245365/1300ad87-ccc7-bcb4-cf45-ce55624ef144.png">

外部共有の設定画面が表示されます。一つずつ設定を見ていきましょう。
SharePointでは外部と共有するためのリンクのことを「匿名リンク」と呼ぶようです。
<img width="504" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245365/5b408279-5eda-b87e-83c8-dd6cb52f2231.png">
匿名リンクを許可するためには「認証済み外部ユーザーとの共有と匿名アクセス リンクの使用を許可する」にチェックを入れます。匿名リンクの有効期限を設定できますので、任意の日数を入力しておきます。実際にユーザが使用する場合は、この有効期限以上の日数を設定出来ません。有効期限以下なら設定できます（最短当日+1日。当日だけっていうのは出来ない)。画像だと3日に設定しているので、共有先の方は本日+3日間だけアクセスすることが出来ます。
共有先の権限を設定できます。ファイル、フォルダそれぞれで振る舞いが設定できます。ファイルについては表示or表示+編集、フォルダについては表示or表示+編集+アップロードが選択できます。例では表示のみ許可するようにしています。この設定は実際のユーザは変更できません。
アップロードを出来るようにすると、自社→外部だけではなく、外部⇔自社双方向のファイル共有が出来そうです。当社では許可していませんが。

<img width="775" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245365/99189c51-ecf4-be1a-dded-3aca9a9359e6.png">
匿名リンクを作成できるグループを指定できます。ユーザbyNameは出来ないようです。

<img width="677" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245365/d7609673-da96-3f9d-6a52-bcc3630507e9.png">
残りの設定です。共有する際のデフォルトの振る舞いを設定できます。そこは良しなに。匿名リンクの共有先のドメインを指定できるようです。
設定が終わったら画面最下部の「OK」をクリックします。

<img width="564" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245365/0cd34420-1f11-7aec-ae0b-6cdc38db5cc4.png">
「匿名リンク」の作成を許可してしまうと、自動的にSharePointの制限が緩くなってしまうようです（最も制限が少ない）。この設定になると、SharePointを新規に作成した際の共有先が、「新規および既存のゲスト」になってしまいます。「すべてのユーザー」ではないので特に問題無いと思います。組織によってはそれすらも許可していない場合があるので、その場合は匿名リンクを諦めるしかありません。
当社の場合は「新規および既存のゲスト」で問題無いですが、定期的に各SharePointの設定を変更しています。

# (余談)PowerShellでSharePointの共有設定変更
SharePointに管理者モードでログインします。

```
$adminUPN="<<管理者アカウント>>"
$orgName="<<組織名>>"
$userCredential = Get-Credential -UserName $adminUPN -Message "Type the password."
Connect-SPOService -Url https://$orgName-admin.sharepoint.com -Credential $userCredential
```

初回だけ以下を実行します。

```
Install-Module -Name Microsoft.Online.SharePoint.PowerShell
```

まずは各サイトの外部共有の設定状態を見てみます。

```
Get-SPOSite |ft Title,SharingCapability
Title                                              SharingCapability
-----                                              -----------------
xxxxx                                              Disabled
xxxxx                                              Disabled
xxxxx                                              ExternalUserSharingOnly
(以下、省略)
```

SharingCapabilityプロパティの意味が何となくわかるとは思いますが以下です。

| 設定値 | 意味 |
|:--|:--|
| Disabled  | 自分の組織内のユーザのみ  |
| ExternalUserSharingOnly  |  新規および既存のゲスト |
| ExternalUserAndGuestSharing  | すべてのユーザー |

サイトの共有設定を変更するには以下のコマンドを実行します。SharePoint管理センターでも変更できます。

```
Set-SPOSite -Identity <<SharePointのURL>> -SharingCapability Disabled
```

一気に全サイトの設定を変更したいのであれば、こんな感じ。

```
$sites = Get-SPOSite
foreach($site in $sites) {
	if ($site.SharingCapability -ne "Disabled") {
		echo $site.Title
		Set-SPOSite -Identity $site.Url -SharingCapability Disabled
	}
}
```

# 外部共有するSharePointの設定
SharePointの管理センターからアクティブなサイトの一覧を表示して、外部共有の設定を変更したいサイト名をクリックします。右側にサイトのプロパティが表示されるので、外部共有の「編集」をクリックします。
<img width="595" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245365/354f70d9-8346-9c07-38fc-56fe625965fd.png">
ここで「すべてのユーザー」にチェックを入れると、このサイトでは匿名リンクが作られるようになります。

# 匿名リンクのつくりかた
SharePointのドキュメントライブラリで共有したいファイルをチェックして「共有」をクリックします。
<img width="325" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245365/f863ecef-1913-b0c5-ec0d-12f06d60731c.png">
「指定したユーザーが・・」をクリックします。
<img width="327" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245365/63de3d94-c8f8-3f2c-508b-ae1ddda23e63.png">
「リンクを知っている・・」をクリックすると、有効期限やパスワードを設定する項目が表示されます。あとは良しなに設定して、「適用」をクリックします。その後は共有先のメールアドレスを入力すれば、共有先に匿名リンクが記載されたメールが送信されます。
こんな感じです。
<img width="603" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245365/98a8b40d-92d9-742a-012f-b6dba1e7cb92.png">

あとは別プロトコルで設定したパスワードを共有先に伝えれば終わりです。