からめもぶろぐ。

俺たちは雰囲気で OAuth をやっている

SharePoint Online でダウンロードを禁止する方法まとめ

SharePoint Online を使っていると「ダウンロードを禁止したい」というご要望を聞くことがよくあります。個人的には、システムで制限するよりも、そうさせない組織づくりをするほうが大事だと思うのですが、そうはいっても要望は要望としてあるので、いくつかの方法を考えてみたいと思います。

Azure Active Directory の条件付きアクセスで制御する

Microsoft 365 または単体での EMS の契約をしている場合に限りますが、SharePoint 管理センターから条件付きアクセス ポリシーを有効にすることで、テナント全体に対してダウンロードを禁止することができます。

f:id:karamem0:20200819141719p:plain

実際にダウンロードをしてみると以下のようにブロックされます。

f:id:karamem0:20200819141915p:plain

注意点として、テナント全体に適用されるため、サイト コレクションを指定しての禁止はできないという点です。本来は、社内アクセスの場合のみにダウンロードを許可する、というような使い方をするので、サイトやライブラリを指定しての禁止をしたい場合は他の方法を取る必要があります。
なお画像ファイルは右クリックからの [名前を付けて保存] は防止できないみたいです。

RMS を有効にする

これはダウンロードを禁止する仕組みではありませんが、ドキュメント ライブラリに対して RMS を有効にすることで、万が一ファイルが流出してしまった場合でも情報の漏洩を防ぐことができます。対象となるファイルが Office ファイルと PDF ファイルに限られてしまうのが難点ですが、本来の目的を達成する意味では最適な方法です。

f:id:karamem0:20200819142504p:plain

ちなみに対象外のファイルをアップロードさせないように構成することもできます。

f:id:karamem0:20200819143216p:plain

アクセス許可レベルの [アイテムを開く] を除外する

アクセス許可レベルから [アイテムを開く] の権限を除外することでファイルをダウンロードすることができなくなります。

f:id:karamem0:20200819143344p:plain

ただ、Office ファイルを PDF としてエクスポートできてしまったり、印刷ができてしまったりするようなので、完全な防止とはならないかもしれません。画像ファイルも条件付きアクセスと同じで保存できてしまいます。

まとめ

まとめるとこんな感じです。

方法 ライセンス 範囲 セキュリティ
条件付きアクセス 必要 テナント 強い
RMS 不要 ライブラリ 強い
アクセス許可レベル 不要 サイトまたはライブラリ 弱い

結論としては「ダウンロードは禁止できないけど RMS で本来の目的は達成できるんだから RMS にしましょう!」と言いたいです。実はどの場合でも割と困るのが画像と動画なんですよね。突き詰めるとキリがないので「どこまでなら許されるのか」をちゃんと考えておいたほうがいいです。

.NET ラボ勉強会 2020 年 7 月に登壇しました

2020/07/25 に行われた .NET ラボ勉強会 2020 年 7 月に「Azure AD でセキュリティ保護された Web アプリケーションで Microsoft Graph を使用する」という内容で登壇しました。

dotnetlab.connpass.com

当日のスライドはこちら。

セッションは de:code 2020 の MVP パーソナル スポンサーとして提供したサンプル コードをデモを交えて解説するという内容でした。特に Easy Auth については、使ったことはあっても内部のアーキテクチャまでは知らない方が多いと思いますので、今回ご紹介できてよかったです。これ単体でも使う価値は十分ある機能なのでぜひお試しいただければと思います。

これが私のおすすめリモート開発事例 by Startup/MVP - MSTechNight #11 に登壇しました

2020/07/20 に開催された Microsoft Open Tech Night 主催の MSTechNight #11 に「Microsoft Teams と Azure DevOps でリモート スクラム開発を実現する」という内容で登壇しました。

msdevjp.connpass.com

お気づきの方はたぶんいらっしゃらないと思いますが、これは以前に Microsoft MVP ブログ企画として書いた記事について、ブログでは伝えきれないところをお伝えするという内容になっていました。

blog.karamem0.jp

当日のスライドはこちら。

コミュニティとしては本業ではない Azure DevOps の話なので、ちゃんとお伝えできたか不安なところもありますが、ひとつの事例として参考にしていただければと思います。

de:code 夏まつり ~よりコミュニティを楽しくするためのコミュニティのすすめ #3 に登壇しました

2020/07/08 に行われた Microsoft Open Tech Night 主催の de:code 夏まつり ~よりコミュニティを楽しくするためのコミュニティのすすめ #3 に Microsoft 365 開発者コミュニティの代表として登壇しました。今回の登壇に関しては今年の 5 月に立ち上げた Japan M365 Dev User Group をきっかけにお声がけいただいたという経緯があります。

msdevjp.connpass.com

内容としては、今回の de:code での Microsoft 365 開発者としておすすめセッションと、Microsoft 365 開発者に関連するコミュニティの最新情報をお届けしました。

スライドでも書いていますが、Microsoft 365 開発者のコミュニティについては海外発のものが非常に多く、日本はこれに乗っかるということがほとんどでした。日本からも Microsoft 365 開発者を盛り上げたいよね、という思いで Japan M365 Dev User Group を立ち上げたわけですが、実は潜在的には Microsoft 365 開発者がたくさんいるのは事実なので、これを機に皆さん参加していただければと強く思っています。

.NET Standard に対応した CSOM で注意するべき点について

少し前の話題になってしまいますが、ついに CSOM が .NET Standard 2.0 に対応したとアナウンスがありました。

developer.microsoft.com

.NET Standard 1.0 がリリースされたのが 2016 年、.NET Standard 2.0 がリリースされたのが 2017 年ということなので、対応にかなり時間がかかったことになります。

.NET Standard 版の CSOM は単なる移植ではありません。これまでの .NET Framework 版と比べて大きな変更があります。それはほぼ必ずお世話になっていたであろう SharePointOnlineCredentials クラスがなくなってしまったという点です。SharePointOnlineCredentials クラスは WS-Security 認証を使っていました。これが廃止され、OAuth による認証に統一されました。といっても、それをサポートするクラスがあるわけではなく、自前で ExecutingWebRequest イベントで Authorization ヘッダーに Access Token を詰め込んでね、ということのようです。

docs.microsoft.com

上記の docs では AuthenticationManager というクラスが紹介されていますが、Access Token の取得は MSAL を使うのがいいと思います。いずれにせよ Password Credentials は非推奨なので使わないほうがいいでしょう。対話式ならば特に問題ありませんが非対話式だとアプリのトークンを使うかみたいな話になってそれはそれで困りますね。

これまでサクッと書けていたところが途端に難しくなってしまったので、よほど .NET Standard 版を使いたい理由があるのでなければ、当面は .NET Framework 版を使ったほうが簡単です。うっかり .NET Core でプロジェクトを作ってしまって SharePointOnlineCredentials クラスがなくて頭を抱えることがないことを祈ります。