インベントリレポートを使ったGoogle ドライブのセキュリティリスク管理

記事タイトルとURLをコピーする

G-gen の三浦です。当記事では、Google ドライブのインベントリレポート機能を使ったセキュリティリスクの管理方法を紹介します。

概要

ドライブインベントリとは

Google ドライブのインベントリレポート機能は、組織内の Google ドライブや共有ドライブの利用状況を把握し、管理者がデータを監査・管理するための機能です。

この機能を使えば、ドライブ内のファイル情報やアクセス権、更新日時を週次で 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] を選択します。

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;          -- ドメイン、ファイル名でソート

実行結果

上記以外にも公式ドキュメントにサンプルクエリがありますので、ご確認ください。

三浦 健斗(記事一覧)

クラウドソリューション部

2023年10月よりG-genにジョイン。元オンプレ中心のネットワークエンジニア。ネットワーク・セキュリティ・唐揚げ・辛いものが好き。