BigQuery を使用して監査ログを分析する

Cloud 監査ログは、Google Cloud Platform が提供するログのコレクションであり、Google Cloud プロジェクトの使用に関する行動記録を確立できます。BigQuery の監査ログは管理活動とデータアクセスの 2 つのログから構成され、どちらも自動的に有効化されます。

監査ログは Google Cloud Logging を介して提供されます。Google Cloud Logging では、監査ログを即時にフィルタリングして特定のジョブやクエリに関するインサイトを獲得したり、監査ログを Google Cloud Pub/Sub、Google Cloud Storage、BigQuery にエクスポートしたりできます。

Cloud Logging を使用して BigQuery の大規模なクエリを検索する

Cloud Logging を利用して監査ログをフィルタリングし、コストの高いクエリ、特定の障害モード、予期しないアクセス パターンなど、ユーザー独自の基準に一致する特定のジョブを見つけることができます。

次の例では、大規模で複雑なクエリのフィルタリング方法を説明します。

  1. GCP Console のログビューアに移動します。

  2. [Stackdriver Logging] ページの [リソースの選択] で [選択] をクリックし、該当するプロジェクトを選択します。

  3. 必要に応じて、フィルタリングするリソースのリストから BigQuery を選択します。

    ログビューアのスクリーンショット - BigQuery の選択

  4. [フィルタ] ボックスのプルダウン矢印をクリックし、[高度なフィルタに変換] を選択して、高度なフィルタに切り替えます。 ログビューアのスクリーンショット - 高度なフィルタの選択

  5. フィルタ ステートメントを入力して、特定の使用パターンを探します。

    1. 例 1: 5 GB を超えるクエリを実行したユーザーからのイベントを表示します。

      [フィルタ条件] ボックスに次のフィルタ ステートメントを入力し、[フィルタを送信] をクリックします。

      resource.type="bigquery_resource"
      protoPayload.serviceData.jobCompletedEvent.job.jobStatistics.totalBilledBytes > 5000000000
      

      ログビューアのスクリーンショット - フィルタ ステートメントの例

    2. 例 2: 複雑なクエリ(より上位の課金階層が必要)に関連するイベントを表示します。

      [フィルタ条件] ボックスに次のフィルタ ステートメントを入力し、[フィルタを送信] をクリックします。

      resource.type="bigquery_resource"
      protoPayload.serviceData.jobCompletedEvent.job.jobStatistics.billingTier > 1
      

BigQuery を使用して監査ログをクエリする

SQL を使用して集計された使用状況データを分析するには、監査ログを BigQuery にストリーミングします。Cloud Logging からのエクスポートの設定の詳細については、Cloud Logging のドキュメントでログ エクスポートの概要をご覧ください。

BigQuery への監査ログのストリーミングを設定する

  1. GCP Console のログビューアに移動します。

  2. [エクスポートを作成] をクリックします。

  3. [エクスポートの編集] ウィンドウで、次のようにします。

    1. [シンク名] には、bigquery_audit_logs などの値を入力します。
    2. [シンクサービス] で [BigQuery] を選択します。
    3. [シンクのエクスポート先] で、監査ログを格納するデータセットを選択します。また、[新しい BigQuery データセットを作成] を選択して、監査ログを格納するデータセットを作成することもできます。
    4. [シンクを作成] をクリックします。

      シンクページの作成

  4. プロンプトが表示されたら、[閉じる] をクリックして確認ダイアログを閉じます。

  5. BigQuery ウェブ UI のデータセットに移動し、監査ログに対してクエリを実行します。BigQuery での以降のアクティビティでは、選択したデータセットに監査ログテーブルが生成されます。テーブルは次のように命名されます。

    • cloudaudit_googleapis_com_activity_[DATE]
    • cloudaudit_googleapis_com_data_access_[DATE]

    各項目の説明は次のとおりです。

    • [DATE] はアクティビティが発生した日付です。

    監査ログテーブル

BigQuery の監査クエリ サンプル

次のサンプルクエリは、データアクセスの使用状況を取得してコストデータをクエリする方法を示しています。

例 1: クエリコストの時間別内訳

#standardSQL
SELECT
  TIMESTAMP_TRUNC(protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.job.jobStatistics.endTime, HOUR) as time_window,
  FORMAT('%9.2f',5.0 * (SUM(protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.job.jobStatistics.totalBilledBytes)/POWER(2, 40))) as Estimated_USD_Cost
FROM
  `AuditLogsDataSet.cloudaudit_googleapis_com_data_access_YYYYMMDD`
WHERE
  protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.eventName = 'query_job_completed'
GROUP BY time_window
ORDER BY time_window DESC

クエリ結果の例を次に示します。

BigQuery ウェブ UI のスクリーンショット - 時間別クエリ結果の例

例 2: ユーザー別のコスト内訳

#standardSQL
WITH data as
(
  SELECT
    protopayload_auditlog.authenticationInfo.principalEmail as principalEmail,
    protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent as jobCompletedEvent
  FROM
    `AuditLogsDataSet.cloudaudit_googleapis_com_data_access_YYYYMMDD`
)
SELECT
  principalEmail,
  FORMAT('%9.2f',5.0 * (SUM(jobCompletedEvent.job.jobStatistics.totalBilledBytes)/POWER(2, 40))) as Estimated_USD_Cost
FROM
  data
WHERE
  jobCompletedEvent.eventName = 'query_job_completed'
GROUP BY principalEmail
ORDER BY Estimated_USD_Cost DESC

監査ログでクエリできる要素について詳しくは、Cloud Logging のドキュメントで AuditData をご覧ください。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。