これまで、Box API関係に於いて、ファイル監視(Webhook v2)や権限変更の記事を書いてきました。Google DriveやBoxなどのクラウドストレージは非常に大きな括りでのアクセス権限の管理は、例えばActive Directoryなどを利用する事で切り分けることが可能ですが、外部のメンバーの招待や、内部でも他の子会社などのメンバー招致などを重ねていった場合、時間と共に色々な問題が出て、管理することが困難になっていきます。
また、Box Webhook v2に関しては、GUIではなくBox APIからでないと設置が出来ないので、別途管理プログラムが必要です。今回、この所々の問題の解決と管理の為のプログラムを作成しました。使用は自己責任ですが、自由に利用可能です。
ファイルのダウンロード
- Boxadmin.exe - インストーラ形式
本プログラムは、Windows10 64bit版で動作します。動作はBox for Businessにて確認しています。
インストール自体は簡単です。管理者権限を不要にするため、インストール先はドキュメントフォルダ直下のboxadmin-win32-x64フォルダにインストールされます。プログラムはElectron 13で作成されており、利用するには事前準備が必要です。
図:インストールは簡単に終わります
Boxメンバー管理上の問題点
前項の通り、Boxでは権限やメンバー管理をする上で以下のような問題点があります。
- 外部のメンバーの管理は基本手動。そのため、異動・退職や交代が生じた場合それらは招待された側が管理をしなければならない
- 前述のような人のイベントが発生した場合、古いメンバーが残ったままの状態になる可能性がある。
- また、担当者交代の場合、旧担当者がどのフォルダにどんなアクセス権限で付与されていたかを一意に把握する事が難しい。
- メンバーやフォルダの共有期限がいつ到来するのかを一意に把握する事が難しい。
- またそれらメンバーの共有期限を一括で変更する作業もなかなかの手間である(メンバー数が多ければ多いほど)
- Box WebhookはAPIを利用して設置が必要であるため、管理プログラムが必要(フォルダを削除すればWebhookは解除されるものの、普段の管理はそのままではGUIで確認が出来ない)
- Box Driveなどを利用していると意図せずフォルダを移動したり削除してしまったりするケースがあるので、Webhookはそうした操作アクションを拾って外部に送信することが可能。これで異常を検知します。
今回のアプリではこれらの問題点をBox APIを用いて管理し、管理情報はアプリ付属のdb.sqlite3ファイルに格納されます。
事前準備
Box APIの準備
Box APIを使うために必要なクライアントIDとシークレットを生成します。以下の手順で作成します。
- Box Developer Consoleにて新規アプリをカスタムアプリで作る。ユーザ認証はOAuth2.0を選び、名前をつけて、アプリの作成をクリック
- すでにクライアントIDとシークレットが生成されてるので、コピーする
- リダイレクトURLには今回は「http://127.0.0.1:4501/auth/box/callback」を入力する
- スコープでは読み書きと、ユーザ・グループの管理にチェックを入れる(必要ならばWebhook管理やリテンションポリシーの管理などにもチェックを入れる)
- 最後に変更を保存をクリック
※リダイレクトURLのPort番号は今回は4501を利用していますが、変更したい場合には、インストールした管理プログラムの以下の場所にあるapp.jsやindex.jsの中に「redirecturi」やexpress.listen、oauthWindow.loadURLにPort番号の記載があるので変更をする必要があります。
図:クライアント情報とリダイレクトURL
図:スコープを設定
プログラムの設定
前項でクライアントIDおよびシークレットが手に入りました。以下の手順で、これらの値および社内で利用するようなケースの場合は、プロキシーを超える必要があるため、その為の設定も合わせて行います。
- プログラムを起動すると初期に設定を促すダイアログが表示されます。また、プログラムの右上のアイコンより、アプリの設定をクリックすることでも表示出来ます。
- Box初期表示フォルダのIDは、基本は0を指定(ルートフォルダ)。これは、権限リサーチ機能でPickerを開く時に最初に開くフォルダのIDの指定になります。
- クライアントIDおよびクライアントシークレットを入力する
- プロキシサーバがある場合には、http://hogehoge.com:8888のスタイルでプロキシーサーバのURLとポート番号を指定します。ない場合には空のままでOKです。
- 最後に設定保存をクリックします。
- プログラムを一旦閉じてもう一度、アプリを起動してください。
図:設定画面でセットしてから利用します。
Box認証の実行
セットした値を持って、Boxの認証を実行する必要があります。以下の手順で認証しAccess Tokenを取得します。Access Tokenファイルは暗号化され保存されます。
- プログラムの右上にあるBox認証実行をクリックする
- ダイアログのサインインをクリックする
- 自身が使っているアカウントでログインする
- Boxへのアクセスを許可をクリックする
- Access Token取得成功のメッセージが出たら完了。プログラムを再度再起動します。
図:認証画面
バックアップと復元
v3.6より設定や追加したWebhook、権限一覧のデータをバックアップ・復元できるようにしました。
- 右上のボタンよりバックアップと復元をクリック
- バックアップもしくは復元を選ぶ
- バックアップの場合はフォルダを指定。ファイル名は自動で暗号化ZIPで保存されます。
- 復元の場合は、3.でバックアップしたファイルを指定。データが復元されます。
図:バックアップして他人に設定を渡せます
使い方
権限リサーチ
権限管理を行うフォルダを登録する為の一番最初に利用する画面です。この画面では、Box Content Pickerを利用しておりBoxの画面が出てきます。以下の手順でフォルダの登録を行います。
- プログラム左上の≡をクリックし、権限リサーチを開きます。
- フォルダの指定をクリックする
- 設定で指定した初期表示フォルダが表示されるので、管理に追加したいフォルダが表示されるまで、クリックして進めます。
- 右端のラジオボタンでフォルダを選択します。
- 「アクセス:このフォルダ内のユーザ」が表示されたら、右下の✔のついたボタン(選択)をクリック
- アクセス権限のついたユーザ一覧と権限名・期限などが取得されて表示されます。
- リストに追加をクリックすると、権限管理一覧・ユーザ一覧に登録が完了します。
同一IDのフォルダの登録は出来ません。また、この画面からはWebhookの追加管理も可能になっています。この手順は後述します。
図:権限追加を行い、リストに追加する
ユーザ一覧
権限管理で登録した全ユーザのユニークな一覧が表示されています。ここでは対象ユーザに対して共有されてるフォルダ数なども表示されています。この画面では以下の処理を行うことが可能です。
図:ユーザ個別の情報をまとめて変更可能
ユーザ検索
登録ユーザが多数ある場合、探し出すのが大変です。アプリの右上に🔍のアイコンがあるので、個々からユーザの絞り込みが可能です。
- 🔍のアイコンをクリックする
- 名前、ID、ドメイン、メアドなど表示項目のすべてが対象になります。
- 検索をするとヒットしたレコードだけに絞り込まれます。
- 絞り込みを解除する場合、検索ダイアログを再度表示して、検索ワードを空にして検索を実行すると、全表示になります。
図:検索用ダイアログ
共有期限の変更
各個人の個別のフォルダに対しての共有期限の変更が可能です。以下の手順で共有期限の変更が可能です。
- 各個人のレコードのアクションにあるアイコンをクリックする
- そのディレクトリに関する詳細情報が出てくる。アクションにある時計のアイコンをクリックする
- ダイアログにて、新共有期限の横のアイコンをクリックする
- カレンダーより日付を選択する
- 変更をクリックすると、共有期限が変更される。
- 権限から選び、変更をクリックすると権限を変えることも可能です。
図:共有期限と権限を一括で変更可能
コラボレータ全解除
この機能は対象のユーザに対して共有されてる全フォルダから一括で共有を解除する機能です。特定の外部ユーザなどに複数のフォルダに対して共有をしている場合、管理をしていない場合、解除が必要になった際に解除漏れが発生する恐れがあります。これらを防ぐ為の機能で、共有割当を解除します(但し、権限管理で登録されてるフォルダに対してのみ。なので、権限管理に対象のフォルダは予めすべて登録しておく必要があります)
- 各個人のレコードのアクションにあるアイコンをクリックする
- そのディレクトリに関する詳細情報が出てくる。
- 右上の「コラボレータ全解除」ボタンをクリックする。
- 確認ダイアログが出てくるので、削除をクリックすると全解除が開始されます。
- 終了メッセージが出たら完了です。
コラボレータ入れ替え
前述のコラボレータ解除同様、特定の外部ユーザが異動や担当者変更などで入れ替えるケースがあります。しかし、フォルダひとつずつに対して入れ替え作業を行うのは非常に大変です。これを一括で行う機能がコラボレータ入れ替え機能です。Aユーザに対して同じフォルダ群に対して一括で共有割当を行い、同時にBユーザの共有割当を一括解除します。
- 各個人のレコードのアクションにあるアイコンをクリックする
- そのディレクトリに関する詳細情報が出てくる。
- 右上の「コラボレータ入替え」ボタンをクリックする。
- メールアドレスを入力して、入れ替えをクリックする
- 現ユーザの各フォルダの共有権限と同じ権限で、入力したメアドのユーザに対して同一の権限で割り当てます。
- 次に削除確認ダイアログが出るので、削除を実行すると現ユーザの共有登録をすべて解除します。
- これで入れ替えが完了します。
但し、相手のメアドがBoxにアカウント登録されていない場合には、登録は出来てもユーザIDが存在しない為、不具合が起きてしまいますので、登録しないようにしましょう。
図:メンバー入れ替えが簡単に可能です
権限管理一覧
本アプリケーションでは最も利用する機能です。ここには権限リサーチで追加したフォルダの一覧が表示されています。このセクションで行える機能は以下の通りです。
管理情報一括出力
現在の権限管理一覧に表示されているフォルダおよび各フォルダに属しているメンバー一覧の情報をExcel形式でエクスポートします。
- アプリの右上の「管理情報を一括出力」をクリックする
- 保存場所を指定する
- 全管理権限リスト.xlsxというファイル名でExcel形式で出力される
- Boxmasterシートはフォルダの一覧、boxsubにはメンバーの一覧。Boxsubの親IDはBoxmaster側のIDが記載されて連結可能です。
図:Excelで権限管理情報を取っておける
Box情報と同期
Box上で他の管理者が権限変更やメンバー追加などを行った場合、本アプリで管理してる情報との間に乖離が生じます。これを是正する為の機能です。Box側に存在してる情報を取得し、現在の権限管理情報と同期させます。
- アプリ右上の「Box情報と同期」をクリックする
- 確認ダイアログが出るので、「はい」をクリックするとフォルダの共有期限やメンバー情報が最新の状態になります
フォルダやメンバー数が多い場合には同期に時間が掛かります。
管理解除
権限管理一覧に表示されている各レコードのアクションにあるゴミ箱のアイコンをクリックすることで、本アプリの管理対象から除外します。但し、除外するだけで共有解除やBox上からフォルダを削除したわけではないので、注意してください。
共有期限の変更
前項にもあったフォルダに対しての共有期限の変更や共有解除が可能です。
- 各フォルダのレコードのアクションにある時計のアイコンをクリックする
- ダイアログにて、新共有期限の横のアイコンをクリックする
- カレンダーより日付を選択する
- 変更をクリックすると、共有期限が変更される。
- 共有解除をクリックすると、そのフォルダの共有が全解除されて誰とも共有されていない状態になります。
図:フォルダの共有期限の変更ダイアログ
メンバー追加
権限管理にて追加したフォルダに対して、ユーザをこの画面上に追加する事が可能です。
- 各フォルダのレコードのアクションにある鉛筆のアイコンをクリックする
- フォルダのメンバー一覧画面が出るので、右上にある+アイコンをクリックする
- メンバー追加ダイアログが出てくるので、メアドと権限を選択する(但し、相手のメアドがBoxにアカウント登録があるものでなければならない)
- 追加をクリックすると、Boxの対象フォルダにメンバーが追加されます(共有期限はデフォルトで追加日の1年後がセットされます)
図:新規メンバー追加ダイアログ
一括期限更新
対象のディレクトリに追加されているメンバーの共有期限は基本的には初期値で追加日の1年後などの期日がセットされています。しかし、追加した日が異なったり変更を掛けた日が異なればその期日は一律ではありません。また、共有期限の変更を一人ずつ行うのは非常に手間です。これをメンバー全員に対して同一日付で共有期限を変更します。
- 各フォルダのレコードのアクションにある鉛筆のアイコンをクリックする
- フォルダのメンバー一覧画面が出るので、エイリアンのアイコンの一括期限更新をクリックする
- 新共有期限の隣のアイコンをクリックし、カレンダーから日付を選択する
- 全員の対象のフォルダに対する共有期限が一括で変更されます。
図:全員の共有期限を一発で変更掛けます
メンバーリストエクスポート
対象のフォルダのメンバーリストだけをExcel形式で一括エクスポートする機能です。
- 各フォルダのレコードのアクションにある鉛筆のアイコンをクリックする
- フォルダのメンバー一覧画面が出るので、右上の⇒アイコンであるリストエクスポートをクリックする
- 保存先を指定する
- フォルダ名にてExcel形式でメンバー一覧が出力されます。
図:フォルダのメンバーリストをエクスポート出来ます
管理解除
権限リサーチにて追加したフォルダやメンバーの情報を管理対象から除外します。除外するだけで、Boxから共有解除やメンバー削除をしたわけではないので、注意が必要です。
- 各フォルダのレコードのアクションにゴミ箱のアイコンをクリックする
- 確認ダイアログが出るので、「はい」をクリックする
- 管理対象から除外される
期限切れ間近
フォルダおよびユーザの共有期限到来してる登録データの一覧を表示します。共有期限日および残りの日数がステータス列で表示されています。アクションから対象のフォルダ・ユーザの共有期限の変更が可能です。
- 一覧のレコードのアクションの中にあるアイコンをクリック
- 対象のデータが出てくるので、新共有期限の隣のアイコンをクリックして、カレンダーから日付を選択。
- 変更をクリックすれば、共有期限が変更される(自身に権限がある場合)
- また、共有解除をクリックすると、ユーザの場合共有対象から除外され、フォルダの場合は誰とも共有されない状態になる
図:共有期限の一覧表示
図:共有期限変更ダイアログ
Webhook管理
前項の権限リサーチ画面にて、Webhookの追加が可能です。6.までの手順は同じです。但しこの機能は、こちらの記事に基づいて実装された機能であるため、Power Automate + Excel Onlineに向けてWebhookを送信する機能になります。
- 6.の手順まで実行する。
- 次にWebhook設定をクリックする
- 送信先URL(Webhook受信先)および書き込み先ExcelファイルのURL(書き込み先ファイル)を入力します
- 送信トリガーを選びます。Power Automateの場合あまり多くのトリガーを設置して送り込むと、リミットを超えてしまうので、必要最低限のトリガーだけにしましょう(目安は1日1000回程度)。
- セットをクリックするとトリガーガセットされて作動開始します。
Webhook管理画面からセットしたトリガーを削除することや、トリガーの修正が可能です。
図:トリガーは少なめに設定する
作成に使用したライブラリ等
- Vue.js
- Vuetify
- Node.js v14.x
- Electron v12.x
- SQLite3
- keytar 7.x
- Box Content Picker
- express 4.x
- passport & passport-box
- archiver & archiver-zip-encryptable
- node-7z & 7zip-bin
- inno Setup
改訂履歴
- 2022/04/01 - Version 3.7
- vueのCDNが変わっていたので修正した(Box認証画面が出なくなっていた)
- Box APIのログオン・ログアウトのメソッド変更
- 設定の保存時にエラーが発生するケースがあるのを修正
- サインアウト時のクッキー削除と次回起動時のJSON Parseエラーを修正
- Electron 13.xに変更
- 2021/10/08 - Version 3.6
- ファーストリリース