G-gen の三浦です。当記事では、Google ドライブのインベントリレポート機能を使ったセキュリティリスクの管理方法を紹介します。
概要
ドライブインベントリとは
Google ドライブのインベントリレポート機能は、組織内の Google ドライブや共有ドライブの利用状況を把握し、管理者がデータを監査・管理するための機能です。
この機能を使えば、ドライブ内のファイル情報やアクセス権、更新日時を週次で BigQuery にエクスポートできます。これにより、データ漏洩リスクの軽減や利用状況の可視化が可能です。
- 参考 : BigQuery のドライブ インベントリ
- 参考 : ドライブのインベントリのエクスポート スキーマ
前提条件
ドライブインベントリレポート機能は、以下の Google Workspace エディションで使用できます。
- Enterprise Standard
- Enterprise Plus
- Education Standard
- Education Plus
- Enterprise Essentials Plus
- Cloud Identity Premium
詳細は以下のドキュメントをご参照ください。
設定の概要
以下の手順でインベントリレポートを設定し、動作を確認します。
順番 | 作業場所 | 作業名 | 内容 |
---|---|---|---|
1 | Google Cloud | BigQuery データセット作成 | インベントリレポートをエクスポートする BigQuery データセットを作成します。 |
2 | Google Workspace | インベントリレポートの有効化 | インベントリレポートを有効化します。 |
3 | Google Cloud | レポートデータの確認 | BigQuery にエクスポートされたデータを確認します。 |
設定手順
[Google Cloud] BigQuery データセットの作成
BigQuery のデータセットを作成します。Google Workspace でデータ リージョン ポリシーを使用している場合は、BigQuery のリージョンをポリシーで指定したリージョンと同一にします。
- 参考 : データの地理的な場所を選択する
# 環境変数を設定 PROJECT_ID="my_project" # Google Cloud プロジェクト ID を設定 BQ_DATASET="my_dataset" # BigQuery のデータセット名を設定 BQ_LOCATION="US" # BigQuery のリージョンを設定 GWS_USER="admin@example.com" # Google Workspace 管理者アカウントを設定 # BigQuery データセットを作成 bq --project_id=$PROJECT_ID \ mk --location=$BQ_LOCATION \ $BQ_DATASET # Google Workspace 管理者アカウントに BigQuery の編集権限を付与 gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="user:$GWS_USER" \ --role="roles/bigquery.dataEditor" # Google Workspace 管理者アカウントに IAM の管理権限を付与 gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="user:$GWS_USER" \ --role="roles/resourcemanager.projectIamAdmin"
[Google Workspace] インベントリレポートの有効化
Google Workspace の管理コンソール(https://admin.google.com)にログインします。
- 参考 : 管理コンソールにログインする
[レポート] > [データ統合] へ移動し、[ドライブのインベントリのエクスポート] を選択します。
以下を設定し、[保存] を選択します。
- ドライブのインベントリ レポートの Google BigQuery へのエクスポートを有効にする:
有効化
- BigQuery のプロジェクト ID:
プロジェクト ID
- プロジェクト内の既存のデータセット:
データセット名
エクスポートの有効化から初回のエクスポートまでは1~2週間かかります。2回目以降は週次でデータが更新されます。
エクスポートが完了しない場合、管理者のログイベントを確認し、エラーの有無をご確認ください。
[Google Cloud] レポートデータの確認
Google Cloud コンソールからログインし、検索バーにBigQuery
と入力し、[BigQuery] を選択します。
データセットアイコンを選択し、[inventory]
という名前のテーブルが表示されることを確認します。
データ抽出例
サンプルクエリ①:アクセス権が「リンクを知っているインターネット上の誰もがアクセスできる」ファイルの抽出
- 想定ユースケース
- 誤って外部共有されているファイルの検出
- データ漏洩リスクの高いファイルの特定
- 監査対応のための外部共有ファイルの一覧作成
SELECT id AS file_id, CONCAT('https://drive.google.com/file/d/', id, '/view') AS file_url, -- ファイルのURLを生成 title AS file_name, -- ファイル名 owner.user.email AS owner_email, -- オーナーのメールアドレス perm.email AS shared_with_email, -- 共有相手のメールアドレス(anyone の場合は null) perm.role AS shared_role, -- 共有役割(anyone の場合は null) perm.type AS shared_type -- 共有タイプ FROM `my_project.my_dataset.inventory`, -- データセットを指定 UNNEST(access.permissions) AS perm -- permissions を展開 WHERE perm.type = 'ANYONE' -- 共有タイプが anyone のファイルを抽出 ORDER BY id; -- file_id でソート
サンプルクエリ②:特定のユーザーがオーナーとなっているファイルを抽出(マイドライブも含む)
- 想定ユースケース
- 退職者のデータ整理と引継ぎ
- 特定ユーザーのファイルアクセス状況の確認
- 重要データのユーザー単位での管理
SELECT child.id AS file_id, -- ファイルID child.title AS file_name, -- ファイル名 child.owner.user.email AS owner_email, -- オーナーのメールアドレス child.org_unit_path AS org_unit, -- 所属組織単位 parent.title AS parent_folder_name, -- 親フォルダ名 child.trashed AS is_trashed, -- ゴミ箱に入っているか (true:ゴミ箱入り) child.mime_type, -- MIMEタイプ child.size_bytes / (1024 * 1024) AS file_size_mb, -- ファイルサイズ(MB) child.create_time_micros AS created_time, -- 作成日時(マイクロ秒) child.last_modified_time_micros AS last_modified_time -- 最終更新日時(マイクロ秒) FROM `my_project.my_dataset.inventory` AS child -- データセットを指定 LEFT JOIN `my_project.my_dataset.inventory` AS parent -- 親フォルダ情報を取得するために自己結合 ON child.parent = parent.id -- 親フォルダのIDで結合 WHERE child.owner.user.email = 'user@example.com' -- 抽出したいユーザーのメールアドレスを指定 ORDER BY child.last_modified_time_micros DESC; -- 最終更新日時で降順ソート
サンプルクエリ③:組織外のドメインと共有されているファイルを抽出
- 想定ユースケース
- 組織外とのファイル共有状況の把握
- ファイル共有ポリシー違反の検出
- 外部ドメインとのデータ共有範囲の監視
SELECT id AS file_id, -- ファイルID title AS file_name, -- ファイル名 owner.user.email AS owner_email, -- オーナーのメールアドレス perm.email AS shared_with_email, -- 共有相手のメールアドレス perm.domain AS shared_with_domain, -- 共有相手のドメイン perm.role AS shared_role -- 共有役割 FROM `my_project.my_dataset.inventory`, -- データセットを指定 UNNEST(access.permissions) AS perm -- permissions を展開 WHERE perm.domain NOT IN ('example.com') -- 自社ドメイン以外と共有されているファイルを抽出 ORDER BY shared_with_domain, file_name; -- ドメイン、ファイル名でソート
上記以外にも公式ドキュメントにサンプルクエリがありますので、ご確認ください。
- 参考 : クエリの例