Google Workspaceで安全に外部とファイルを共有する方法
企業で外部のお客様とファイルのやり取りをする共有用ストレージが必要なケースが結構あったりします。しかし、通常企業でGoogle Workspaceを運用する場合は、Admin Consoleで外部共有不可で運用してるのが定石です。しかし外部共有用としてBoxなどの別のソリューションを導入するのも、管理手間の増大や何よりも追加コストが必要となります。
そこで、2020年8月31日公開されたGoogle Workspaceのビジター共有機能とGoogle Apps Scriptでのアプリを使って安全な運用を維持しつつ外部公開用ストレージを用意してみたいと思います。
今回利用する機能
- ビジター共有機能
- 組織部門の追加
- ホワイトリスト機能
- GAS Uploader - Google Spreadsheet
ビジター共有機能を使う事で、外部のメンバーとファイルの共有が出来るだけではなく、Googleアカウントを持たないユーザとGoogleスプレッドシートで同時に作業といったことも可能となる為、賢く使えるようにしておくのがベストです。利用するにあたっては管理コンソールから変更と、情報流出に関する注意点があるので、気をつけて運用する必要があります。
本機能はBusiness Standard以上で利用できるため、Business Starterでは利用する事が出来ません。
注意点
概要
ビジター共有機能を利用する事で、以下のようなことが可能となります。
- 相手がGoogleアカウントを持っていなくとも、Google SpreadsheetやDocument, Siteなどの協業が可能になります。
- Googleアカウント同様に、そのメアドに対して編集や閲覧などの権限付与をコントロール可能
- こちらは相手にわざわざファイルをダウンロードや変換して、メールベースで渡し合いの手間を掛ける必要がなくなる
- PINコードは連絡用メアドがあれば発行して通知まで一括で行えます
- ファイルのダウンロード、アップロードが可能になります。
相手との共有の為に、外部の怪しいファイルアップローダを使う等ビジネスの世界では論外であり、一方でこのためだけに高コストなBoxなどを追加で導入するのは、相手がGoogle Driveを封じてる場合を除いては経営上単なるコスト増大にしかなりません。
また、素の状態で外部共有をすることは、情報漏洩に確実に繋がります。現場のレベルで「リンクを知っている全員」で外部共有できるような環境は非常に危険な運用方法です。以前も3年間に渡ってアクセス出来る状態にあったということで、性善説に則っての運用は同じ問題を繰り返すことになります。
注意点
きちんと仕組みを構築し、情シスが厳格に管理運用する事で今回のビジター共有を安全に運用することが可能ですが、潜在的な注意点としては
- 外部共有されたままファイルの管理が放置され、外部流出の可能性が高まる
- 無関係のファイルまで外部共有オッケーになってしまうため、意図せず外部共有してしまい流出の可能性が高まる
- 第三者にPINコードが漏れることで、協業相手以外にファイルを改竄される可能性もある
- ビジター共有機能はドライブのファイルやフォルダに対してだけで、GASのウェブアプリでは適用されないので公開時は要注意。
ユーザのリテラシーに応じてどのレベルまでを許可するかといった匙加減が必要になります。その匙加減が次項の課題となります。また、アプリをGoogle Sitesに埋め込む場合、Google Pickerのoriginがデフォルトではhttps://script.google.comとなっているので、apikeyget関数の該当箇所をhttps://sites.google.comに変更しないとPickerがエラーとなり表示されません。
課題
前述にもあるように、このビジター共有機能は全ユーザに開放して自由に好き放題使わせるには正直問題があります。特に日本の場合ITリテラシーに問題のある社員が多数いる為、開放するには課題があり、企業によってそのレベル感が変わってきます。主な課題は以下の通り。
- 特に組織部門を分けておらず、一本のルールで運用してる場合、外部共有は完全なオフで運用するのが定石となってる
- 外部共有しっぱなしで、ファイルや権限を放置したままにする愚か者が後を絶えない。
- また、それが故にストレージ容量を圧迫したままとなっていて、整理するにも誰がどのファイルをどう扱ってるかが全く分からず手出しができない。
- 一次的なファイル共有場所として提供してるにも関わらず、ルールを守らず恒久的に相手と共有する場所として利用する者が出てくる。
- 相手へ渡すだけとしてるにも関わらず、相手からのアップロードを許可してるケースがある。
- 指定のフォルダに内部の色々なメンバーを勝手に共有相手として追加し続けた結果、権限管理が全く為されていない(人事異動で見えるべきではない人が見えたままの状態にしてるケースが非常に散見される)
- 全員に開放してしまうと全く管理が出来なくなってしまう。
- 開発などに於いて外部と恒久的なやり取りが必要な場合には、Google Driveを使わずGithubをオンプレ運用する、Gitlabで構築するなど別の手段を考えましょう。
という事で、これらを踏まえた上で、外部共有の手段を提供しつつ、これまで通りの安全なGoogle Workspace環境を維持する為には、一工夫が必要になります。
外部ソリューション
どうしても自身で今回の設定が難しいといった場合には、Cmocyという今回の仕組みおよびGoogle Cloud Storageを使ったソリューションも用意されています。一人500円/月〜という設定となっており、導入しやすいものになっています。外部共有するような人は全体のうち限られているので、全員に使用許可を与えず限定的に利用すると良いでしょう。
また、今回は利用していませんが、Cmocyの単発ファイルの外部共有で使われてるCloud StorageはGASでも操作が可能です。以下のエントリーを参考に装備してみるのも良いでしょう。
事前準備
今回の前提条件や注意事項を踏まえた上で、外部共有用の環境を作るにはそれなりに制限を強めの状態で、運用範囲も絞った状態で構築する必要があります。但し、正直なところ、この事前準備では前述の課題の一部しか満たせない為、追加でGASでアップロード専用アプリを入れる事で、ユーザの行動に制限を持たせて自分は運用しています。
外部共有用組織OUを作成する
全ユーザに機能開放をするのはあまりにも高リスクであるので、通常は特定アカウントに対してだけ有効にする組織部門(OUと呼ぶ)を作成し、そこにユーザを所属させるようにします。以下の手順で外部共有用の組織部門を作成します。
- Admin Consoleにログインする
- 左サイドバーからディレクトリ=>組織部門を開く
- 起点となる親組織部門にぶら下げる形にするので、親組織部門のレコードにある+アイコンをクリック
- ダイアログが表示されるので、組織部門の名前を入力し作成をクリックする。
これで親組織部門の設定を継承した子組織部門が作成されました。対象のユーザアカウントやアップロード公開専用のアカウントを作成し、この作成した組織部門に所属させます。
ユーザ一覧から対象のユーザのレコードにある「その他のオプション」をクリックすると、「組織部門を変更」という項目が出てくるので、選んで続行をクリックすると組織部門所属を変更できます。
図:専用の組織部門をまず作るのが重要
図:所属組織部門を変更する
ホワイトリスト
前述の状態でビジター共有対象は特定の組織部門に絞られましたので、一般ユーザがどう頑張ろうと外部共有は出来ませんのでだいぶ安全に運用可能な状態になりました。しかし、ビジター共有機能はアカウントを持たない相手と自動発行されるPINコードでのみ共有を許可するものとなるため、PINコードが漏れ出た場合には、リスクにさらされることになります。
そこでそもそも共有先をドメインで絞る事でPINコード送信先を絞るようにしましょう。
- Admin Consoleの左サイドバーからアカウント=>ドメイン=>許可リスト登録済みドメインを開く
- ドメインを追加をクリックする
- ドメインを入力して追加をクリックする
- 保存をクリックすると、外部共有許可のPINコード送信先としてドメインが登録されました。
但し、企業ドメインではないgmail.comやonmicrosoft.comなどの汎用ドメインは登録してはなりません。ホワイトリスト運用上これはただのリスクにしかならない為、自社ドメインを持たない企業との取引まで含めて一考すべきでしょう。
社内用に外部共有申請用のフォームなどを用意しておいて、申請に基づいてホワイトリストを追加していくようにしましょう。
図:汎用ドメインは登録しないこと
特定OUに対してのみ外部共有を許可する
ここまで準備が出来たらいよいよ特定の組織部門に対してのみ、外部共有を許可する設定を行います。
- 管理コンソールに入る
- アプリ⇒Google Workspace⇒ドライブとドキュメントの設定に入る
- 共有設定を開く
- 組織部門のサイドバーの中から作成した「特定の組織部門」をクリックします。ここが重要です。
- 共有オプションをクリックする
- 「許可リスト登録済みドメイン」をチェックします。オンにするとホワイトリストを使う設定になる。
- 「ビジター共有 のユーザーまたは共有ドライブがオーナーとなっているファイルが許可リスト登録済みドメインのユーザーと共有されたときに警告する」にチェックを入れる
- 「許可リスト登録済みドメイン以外のユーザーまたは共有ドライブからのファイル受信を ビジター共有 のユーザーに許可する」にチェックを入れる。相手側からの共有を受け入れる必要がないならオフでも可。
- 「ビジター共有 のユーザーまたは共有ドライブが、Google アカウントを使用していない ドメイン外のユーザーとアイテムを共有することを許可する」にチェックを入れる。(Googleアカウント無で共有ファイルにアクセスが可能になります)
- また、下のほうにあるアクセスチェッカーに於いて、「受信者のみ、または候補の対象グループ」を選択する
- ドメイン外へのコンテンツの配信については、「誰にも許可しない」とします。
- 同じ項目内にある「共有ドライブの作成」を開く
- 「ビジター共有 のユーザーが新しい共有ドライブを作成できないようにする」についてはチェックをオンにする
- 「新しい共有ドライブの組織部門」については、選択した組織部門で特定OUを指定しておく
- それ以外の設定項目についてはチェックを入れておく。
図:ホワイトリスト運用にしておきましょう
図:アクセスチェッカー等のオプションも設定しておく
図:共有ドライブ作成についての設定
共有ドライブの作成と設定変更
フォルダを共有して外部の人にもアップロードを許可するといった事を行う場合は、マイドライブ以下のフォルダでは出来ない為、共有ドライブを作成し色々と設定変更を加えなければなりません。複雑な設定になるので、1つずつ丁寧に設定を変更して構築しましょう。
- まずはGoogle Workspaceの管理者が共有ドライブを1つ作成し、特定OUに属するユーザを「管理者」としてメンバー追加します。
- その共有ドライブ内にアップロード先として1つフォルダを作成する
- Admin Consoleに入り、共有ドライブの管理に入る
- 1.で作成した共有ドライブにチェックを入れて、組織部門を変更をクリックする
- 作成済み特定OUを選択して続行をクリックすると、共有ドライブの所属が特定OUに変更される。(これがとても重要)
- そのまま特定OUをクリックし、移動した共有ドライブのレコードを触ると、設定があるのでクリックする
- 「コンテンツ管理者にフォルダの共有を許可する」以外にチェックを入れて完了をクリックして保存する(特定OU所属のメンバー以外に外部共有設定変更の権限は渡しません)
- 1.に戻って共有ドライブ上のフォルダを右クリック=>共有をクリック
- 適当にGoogle Workspaceアカウント以外のアカウント(onmicrosoft.com等)を追加して、投稿者権限で追加してみる。
- 通知のチェックは外せないのでそのまま「送信」を実行する
- 共有しますか?のメッセージが出たら「このまま共有」をクリックする
- 相手先のメールに通知が飛べば設定変更成功です。
※なおこの共有ドライブはメンバーとして追加された人以外は共有ドライブ一覧には出てきません。アップロードフォルダ以下に個別に社内のメンバーを閲覧者として追加した場合には、共有アイテム一覧には対象のファイルだけが出てくるようになります。
※共有ドライブの場合、共有ドライブが特定OU所属であるとメンバーとして追加されてる人が「管理者」の場合に限り、そのメンバーが特定OU所属でなくとも、外部共有が実行可能です。
図:組織部門を変更し他から直接見えないようにする。
図:共有ドライブの設定
実際の使い方
特定組織に所属させた専用のアカウントにログインし、ファイルやフォルダを共有してみます。今回自分は自分自身のMicrosoftアカウントに対してテストで共有を仕掛けてみています。相手がGoogleアカウントを持ってる場合には、通常外部共有と変わらない挙動となります。
ファイルに対して共有設定
作成したGoogleスプレッドシートを右クリックして共有を実行したら
- 一般的なアクセスは「制限付き」とする
- ユーザのメールアドレスを入力欄に入れて、編集者として共有をクリックする
- 共有しますか?については「このまま共有」をクリックする
- 相手にファイルへのリンクが通知されます。
図:制限付きでアクセス可能として指定する
フォルダに対して共有設定
相手にアップロードもしてもらいたい場合には、フォルダで共有する必要性があります。前述のファイルの場合同様に共有を掛けます。但し、このフォルダ共有は嵌りポイントがあります。
- マイドライブ以下に作ったフォルダを共有しても、読み取り専用で相手からアップロードは出来ません。「このフォルダにアップロードする権限がありません」と出てしまいます(閲覧者と編集者の権限しか無い為)
- 相手からのアップロードを許可したい場合には共有ドライブを利用する必要があります。
- その共有ドライブに対する自身の権限は「管理者」である必要があります(コンテンツ管理者ではNG:共有相手を追加出来ません。)
- 但し、共有ドライブもドライブのメンバー管理で相手のメアドを入れても「現在のところ、Google アカウントのないメールアドレスと共有することはできません。」とエラーが出て、メンバー追加は出来ません。
では、どのようにして、フォルダアップロードを可能にするか?といったら
- ファイルを格納する共有ドライブの下にフォルダを1個作成する(ルートにはアクセスできません)
- そのフォルダを右クリック=>共有をクリックする
- 制限付きとして、相手のメアドを入れて権限を「投稿者」として設定する
- 完了をクリックする
すると、このフォルダの場合は共有ドライブにも関わらず、一部を外部との共有用として設定することが出来、相手からの投稿を受け付ける事が可能です。コンテンツ管理者の権限は設定する事が出来ません。
図:投稿者権限にしておくのがポイントです。
相手側の処理
今回はMicrosoftアカウントなので相手方のOutlookにメール通知が送られてるハズです。共有された側は受信したメールに基づいて処理を行うと、対象のファイルにアクセスする事が可能になります。
- メールの中の「開く」をクリックします。この動作は7日に1度必要となります。
- メールアドレスの確認画面が出るので、「送信」をクリックする
- 6桁の確認コード(PINコードと言う)が自分自身に送られるので、この値を2.の画面に入力して、次へをクリック。
- すると、Googleアカウントではないにもかかわらず、Googleスプレッドシートの画面が出てきて、編集する事が可能になります。もちろん変換してダウンロードする事も可能です。
- 通常のファイルの場合はプレビューのみでダウンロードボタンが付いてるだけの状態になります。
- 共有ドライブ配下のフォルダ共有で、投稿者権限が付いてる場合は、アップロードする事も可能になります。
図:セキュリティの為7日に1度はPINコードが変わる
図:ビジターなのにスプレッドシートを編集できる
図:相手からアップロードも行わせることが可能
GASでアップロード専用アプリを作る
注意点
自分がやってしまったミスですが、ビジター共有OUに対して以下の許可をしておく必要があります。
- ビジター共有の組織に対して、「Google Cloud Platform」の使用をオンにしておく必要があります。
- ビジター共有に属するアカウント上でGCP上でDrive APIを利用可能にしておく必要があります(GASでDrive APIが使えなくなってしまう)
- ビジター共有に属するアカウントでデプロイすると、そのアカウントから通知のメッセージが外部に飛ぶので要注意(アプリの権限がデプロイしたユーザで動かす場合)
図:厳しくしすぎてアプリが動作しなくなってしまった
共有設定について
単純にファイルを渡したいだけの場合
この場合、相手からのアップロードはあり得ないので、単純にファイルに対して相手のアドレスを共有設定に追加するだけで問題ありません。但しこちら側は一部のアカウントのみ許可をしてる状態である為、やりがちなのが「1アカウントを複数名で共有して使う」という方法。これは明確なライセンス違反ですので止めましょう。
また、フォルダを作ってそのフォルダに対してこちら側のメンバーを共有設定に追加する場合も、前述の注意点にあるように共有メンバー管理が必要となる為注意が必要となります。基本、この特定のアカウントはフォルダについても他者とは一切共有せず、ファイルの追加もアプリを通じてのみ追加可能にしておきます。
相互にファイルのアップロードが必要な場合
こちらからのファイルの共有だけでなく、相手側からのファイルのアップロードも必要な場合は、前述のように共有ドライブとフォルダを設けて、そのフォルダに対して相手側のアドレスを登録する事になります。こちら側のメンバーは共有ドライブのメンバー管理にて「閲覧者」の権限のみでグループアドレスにて追加すると良いでしょう。メンバーはGoogle Groupの側で管理をするべきです。
前述同様、好き勝手に追加されても困るので、ファイルの追加に関してはアプリを通じてのみ追加可能としておきます。このケースだけ共有ドライブメンバー管理が必要なのは相手からのアップロードされたファイルのダウンロードは必要となる為、権限無だと誰もそのファイルを見られないということになるため。ダウンロードのみ許可する為、閲覧者権限としているわけです。
前述の事前準備に於ける共有ドライブの作成と設定変更をよく読んで設定を施してあげてください。
共有ドライブのメンバー
特権管理者および特定OUに属するメンバーのみを共有ドライブのメンバーとして追加してる為、他の社内のメンバーには共有ドライブが見えません。但し、ファイルやフォルダを共有するとそのフォルダだけ、「共有アイテム欄」に出てくるのでアクセスする事が可能です。そのほかの社内メンバーは基本を「閲覧者」とし、つけても「編集者・投稿者」までとしましょう。
コンテンツ管理者とする場合、コンテンツ管理者が他に自由きままに共有は出来ないようにしておきます。あくまでも特定OUのメンバーのみが外部共有を追加できるように制限しておくのがコツです。
GASアプリの実行権限
マイドライブ以下でファイルを共有する場合には、作成した特殊UOのアカウントの権限でアプリをデプロイする必要があります(そうでないと、外部共有が行えません)。共有ドライブの場合はドライブに登録したメンバーの権限があれば実行が出来るので、デプロイする場合の権限はメンバーの誰かであれば問題なく実行することが可能です。
但し、共有時の相手先に飛ぶメールのFromは、デプロイした人のアカウントで飛ぶことになるので、特殊UOのアカウントの権限でデプロイしておいたほうが良いでしょう。
アップローダアプリ
概要
これまでの外部共有設定や共有ドライブの設定、アクセス権限などを考慮し、特殊OUの特定アカウントの権限でだけ動作し、このアプリからだけアップと削除を行う為のアプリを作成しています。フォルダや共有ドライブは他社には共有せず、アップした対象のファイルはアップロード者と相手の人のみアクセス可能とし、特殊OUの人はこれを管理するポジションとなります。
アプリの仕様
このアプリの仕様は以下のような形にしてあります。
- 単発のファイルだけをアップロードし、外部の人間と共有する仕組みです。
- Drive APIおよびPicker APIを利用してアップロードを行い、1カ月を超過したファイルは自動的にトリガーの実行で削除される仕組みです(アップロード者に通知が飛びます)。
- 外部共有可の特殊OUの人間がウェブアプリのデプロイを行う必要があります。
- 共有先にはメッセージを同時に送る事が可能で、ファイルはアップロード者と相手先、特殊OUの人間以外見えません。
- アップロード先は前述の準備で用意した共有ドライブ以下のフォルダを指定するのを推奨します(特殊OUに属する共有ドライブとして)
- ビジター共有機能を利用した仕組みなので、相手側はリクエストで送信されてくるPINコードでログインします。
- 相手側へ付与されるアクセス権限は閲覧者権限で、ファイルのアップロードは行えません(フォルダを共有してるわけではない為)
- ウェブアプリの画面には自分がアップロードしたファイルのリストのみが表示されます。
- 2023/8/31:ダイアログにダウンロード不可のチェックボックスを追加。チェックを入れると閲覧のみで相手はダウンロードや印刷が出来ない状態で共有が出来ます。はDrive.Files.UpdateにてcopyRequiresWriterPermissionを trueにするような処理を実装したものになります。
※ダウンロード不可といっても、irfanviewなどでキャプチャは出来てしまうのは防ぎようがないのですが、Chrome自体からの印刷等は出来なくなっています。
図:アップローダダイアログの様子
図:ダウンロード不可なので見るしかない
セットアップ
本アプリを利用する為には、以下の事前のセットアップが必要です。
- スプレッドシートを開き、メニューより「アプリの設定」=> 初期セットアップを実行します。初回は認証が必要なので、この作業を2回行います。
- 自動削除トリガーをクリックすると、毎日0時にアップロードから1カ月を経過したファイルとリストを削除します。
- アプリの設定を開き、GCPから取得しておいたPicker APIのAPI Keyを入力して保存します。
- 同じく、アプリの設定を開き、アップロード先指定のフォルダ選択をクリックし、共有ドライブ以下に作成したフォルダを指定します。
- スクリプトエディタを開き、adminaccの変数に管理者のメールアドレスを記入して保存します。
ウェブアプリのデプロイ
ここまで準備が出来たら、いよいよウェブアプリケーションのデプロイを行います。
- 座席表アプリの拡張機能→Apps Scriptをクリックしてスクリプトエディタを開く
- 右上のデプロイをクリック
- 新しいデプロイをクリック
- 種類の選択ではウェブアプリを選択し、次のユーザとして実行は自分にしておきます。
- アクセスできるユーザは、ドメイン名内のユーザとして起きます
- 末尾がexecで終わるURLが発行されるのでこれがアップローダアプリのページとなります。
- Google Siteの埋め込みなどで6.をページ全体の埋め込みなどにすると便利です。
- 次回以降コードを編集して再デプロイ時はデプロイを管理から同じURLにて、新しいバージョンを指定して発行することが出来ます。
共有ドライブもフォルダも他の人とは共有しない上に、特殊OUの人のアカウントも共有せず、ウェブアプリを介してだけアップし、ファイルにだけアクセスできる環境をこれで構築可能です。単純に社内メンバーと共有をするとアクセス権限管理が非常に面倒な事になるので、なるべくなるべくこのように制限を厳し目で運用するのが定石です。
図:これでアップローダが使える