データ保護と検査/ Data Protection
外に出さない・持ち込ませない・失っても取り戻せる
松葉が守るものは 2 方向あります。1 つは、Box の中のファイルが関係のない人の手に渡らないこと。もう 1 つは、外から持ち込まれたファイルで社内が汚染されないことです。前者は画面・データベース・ストレージの三層で、後者はアップロードの全量検査と隔離で受け止めます。この章では、その仕組みと、管理者が異常時に取れる手立て、そして失ったときの取り戻し方を説明します。
三層の守りThree Layers
「Box の外に出さない」という決まりを、画面だけで守らせていません。画面の出し分け・データベース側の範囲制限・ファイル実体への期限付きの入口という 3 つの層で、それぞれ独立に同じ判定を行います。1 つの層をすり抜けても、次の層で止まる構図です。稼働中
色の役割 — Teal:アプリの層とファイルの実体 / 金茶:データベースの層 / 赤:最も内側の層と、すり抜けを止める位置。3 つの層はそれぞれ独立に判定するため、どれか 1 つの実装ミスが即座に情報漏洩につながることはありません。
| 層 | 何をしているか | すり抜けたとき |
|---|---|---|
| ① 画面の出し分け アプリ | ロールと公開範囲に応じて、ボタンやメニュー、一覧の項目を出し分けます。利用者にとっての「できること」の見た目を作る層です | ② が止めます |
| ② データベース側の範囲制限 Row Level Security | データを保管している PostgreSQL 自身が、要求してきた人ごとに取り出せる範囲を絞ります。画面を通さずに直接問い合わせても、自分に関係のない Box の行は 1 件も返りません | ③ が止めます |
| ③ 期限付きの署名付き URL Cloud Storage | ファイルの実体はバケットに置かれ、外から直接は読めません。読み書きのたびに、その 1 ファイル・その 1 回だけに効く期限付きの URL を発行します(ダウンロード用・アップロード用とも短時間で失効) | ここで止まります |
アップロードの全量検査Scan Pipeline
松葉に上がってくるファイルは、社内・社外を問わずすべてウイルス検査を通ります。検査の前と後で置き場(バケット)を分けており、検査を通ったものだけが Box に現れます。稼働中
色の役割 — Teal:検査を通った経路 / 赤:検出と隔離 / 金茶:検査前の保管と、結果が確定しなかった経路。3 つのバケットを物理的に分けているため、検査前のファイルと検査済みのファイルが同じ場所に混ざることがありません。
ファイルの状態表示Status Labels
検査の結果は、ファイルごとの状態として画面に出ます。日常的に目にするのは次の 6 つです。「クリーン」だけが利用者に開示され、Google Drive への複製と共有リンクへの掲載が許されます。
| 表示 | 意味 | 利用者から見た状態 | 管理者の手立て |
|---|---|---|---|
| スキャン待ち | 受け取り済みで、検査の順番を待っています | ダウンロード・共有はできません | 長く滞留していれば管理コンソールから再検査 |
| スキャン中 | 検査を行っています | 同上 | 同上 |
| クリーン | 問題は見つかりませんでした | 通常どおり使えます。Drive にも複製されます | — |
| 隔離済み | 検出されたため隔離しました | 一覧から消えます | 一覧・取り出し・恒久削除(次章) |
| スキャン失敗 | 検査そのものが完了しませんでした | 使えません | 管理コンソールから再検査 |
| スキャンできません | 暗号化されている、または大きすぎて中身を確かめられませんでした | 使えません | 相手に確認のうえ、上げ直しを依頼するか判断 |
このほかに「整合性エラー(取り消し)」という終端の状態があります。アップロード時に申告されたファイルの指紋と、検査サービスが実測した指紋が食い違ったことを意味し、通信の途中で内容が入れ替わったか壊れたことを表します。再検査では直らないため、その版を破棄して上げ直してもらう扱いです。
検査の前に断る形式Denied Extensions
検査に回す前の入口で、そもそも受け付けない拡張子を決めています。既定は 22 種です。内訳は実行ファイル系(.exe .dll .bat .ps1 .jar など)と、マクロを含められる Office 形式(.docm .xlsm .pptm)、およびマクロが混ざりうる旧形式の Office(.doc .xls .ppt)です。この一覧は全社設定として変更できます(設定画面は実装予定 · Step 4b)。
検出パターンの鮮度と訓練Freshness & Drill
ウイルス検査は、検出パターンの定義が古くなった瞬間に「動いているのに見つけられない」状態へ静かに変わります。これは画面には何も現れません。そこで、定義の鮮度と、検査が本当に反応するかどうかを、それぞれ別の仕組みで見張っています。稼働中
| 仕組み | 頻度 | 内容 | 失敗したとき |
|---|---|---|---|
| 定義の更新 | 6 時間ごと | 専用のジョブ clamav-mirror-updater が最新の定義を取り寄せて ミラーバケット(ウイルス定義) に置き、時間をおいて検査サービスへ読み込みを指示します。取り寄せと読み込みを分けているのは、置いただけで反映されていない状態を作らないためです | 連続して 3 回失敗するとアラートが起票されます |
| 検出の訓練 | 毎月 | EICAR(ウイルス対策の動作確認のために世界共通で使われている、無害な検査用ファイル)を実際に流し込み、検査が反応するかを確かめます | 検出できなかった場合は緊急のアラートになります |
隔離ファイルの運用Quarantine
検出されたファイルは削除せず、専用の 隔離バケット へ移して保管します。取引先から届いたファイルが検出された場合、何が届いたのかを確かめなければ相手への連絡もできないためです。ここから先の操作はすべてシステム管理者だけが行えます。稼働中
| 操作 | できること | 付いている制約 |
|---|---|---|
| 一覧・参照 | 隔離されたファイルの一覧を、検出名・元の Box・アップロードした方・隔離された日時つきで確認できます | 件数・合計サイズ・90 日を過ぎた件数が計器として出ます |
| 取り出し | 中身を確かめるために、その場で 1 回だけダウンロードできます | 理由の入力が必須(10〜256 字)+ 危険性を理解した旨の確認。発行される URL は短時間で切れ、URL 自体は記録に残しません。実行と同時に全システム管理者へ即時メールが飛びます |
| 恒久削除 | 隔離したファイルを完全に消します | 理由の入力が必須(10〜256 字)。実行の記録は監査ログに残ります |
| 古い隔離の整理 | 90 日を過ぎた隔離ファイルは削除候補として件数が出て、その条件で絞り込めます | まとめての削除を自動で提案する仕組みは実装予定 · Step 4bです |
社外との受け渡しの防御Sharing Boundaries
アカウントを持たない相手にファイルを渡す共有リンクと、逆に受け取るファイルリクエストは、URL さえ知られれば誰でも到達できる入口です。ここには、受け渡し専用のホストを分けたうえで、期限・本人確認・回数の 3 方向から制限をかけています。稼働中
受け渡しは別のホストで受けるHost Separation
共有リンクとファイルリクエストの URL は、本体とは別の inbox.portal.example.com というホストで受けます。このホストが受け付けるのは受け渡しに必要な 4 つの経路だけ(共有リンクの受取ページとその処理、ファイルリクエストの受取ページとその処理)で、Box やファイルの一覧といった本体の機能は一切公開していません。さらに手前に Cloud Armor を置き、1 つの接続元からの要求数に上限を設け、超えた要求は遮ります(既定・変更可)。受け渡しページの内容は検索エンジンに載せない設定にしており、ファイル名やフォルダ名が検索エンジンに控えられることもありません。
渡すとき・受け取るときの制限Limits
| 項目 | 共有リンク(渡す) | ファイルリクエスト(受け取る) |
|---|---|---|
| 期限 | 24 時間 / 7 日 / 14 日 / 日付指定。最長 14 日 | 同じく最長 14 日 |
| 本人確認 | 受取人のメールアドレスを指定すると、確認コードでの本人確認が必須になります(最大 10 宛先) | 常に必須。提出者のメールアドレスの指定と、確認コードの通過が要ります |
| パスワード | 任意で設定できます | 持ちません。本人確認を必ず通るため、二重にはしていません |
| 回数・量の上限 | ダウンロード回数の上限を設定できます | 累計 100 件まで、合計容量にも上限あり(既定・変更可) |
| 中身 | クリーンなファイルだけ | 受け取ったファイルも全量が検査を通ります |
総当たりと大量アクセスの検知Abuse Detection
- 確認コードの総当たり:1 つの URL に対して 1 分間に 20 件の認証失敗が起きると、緊急のアラートを起票し、そのリンクを発行した方にもメールが飛びます稼働中
- 同じ接続元からの大量アクセス:同じ接続元から 5 分間に 100 回のアクセスがあると警告のアラートになります(共有リンクとファイルリクエストの合算・既定・変更可)
- 全社横断の一覧:発行済みの共有リンクとファイルリクエストは、管理コンソールから全社まとめて一覧でき、必要なものをその場で強制失効できます(詳しくは管理コンソール)
しきい値は「気づける程度に低く、日常の利用では鳴らない程度に高く」を狙って置いた既定値で、運用の実態に合わせて調整できます。
保存データとバックアップAt Rest & Backup
守りの最後は「失っても取り戻せること」です。データベースとストレージはそれぞれ別の方法で控えを持ち、Google Drive 側にも複製が残ります。取り戻す速さの目標も決めてあります。稼働中
保存時の暗号化Encryption
データベースに保管されたデータも、ストレージに置かれたファイルも、ディスク上では暗号化されています。利用者のブラウザとの間の通信はすべて TLS 1.2 以上で、暗号化されていない経路は開いていません。氏名やメールアドレスといった項目単位でのさらなる暗号化は行っていません。
控えの取り方と、取り戻す速さBackup & Recovery
| 対象 | 控えの取り方 | どこまで戻せるか |
|---|---|---|
| データベース PostgreSQL(Supabase) | 日次のスナップショット + ポイントインタイムリカバリ(PITR) | 過去の一定期間の範囲で任意の時点の状態へ復元できます |
| ファイル Cloud Storage | バケットの世代管理(Object Versioning) | 上書き・削除された内容を一定期間さかのぼって取り出せます |
| Google Drive 側の複製 | Drive 同期を有効にした Box のファイルが複製されています | Drive 側で消えたものは Google Workspace の管理者機能で一定期間復元できます |
| 鍵・接続情報 | 秘密情報の保管庫が過去の版を保持します | 一定の世代前まで戻せます |