BigQuery の監査ログの概要

ログは、特定のイベントまたはアクションに応じて生成されるテキスト レコードです。たとえば BigQuery は、テーブルの作成や削除、スロットの購入、読み込みジョブの実行などのアクションのログエントリを作成します。

Google Cloud は、Google Cloud サービスの使用に関連する運用上の問題についての分析情報を提供する監査ログなど、ログも書き込みます。Google Cloud によるロギングの処理方法の詳細については、Cloud Logging のドキュメントと Cloud Audit Logs の概要をご覧ください。

監査ログと INFORMATION_SCHEMA ビュー

Google Cloud プロジェクトで記録される監査ログは、その Google Cloud プロジェクト内に直接存在するリソースに関するもののみです。フォルダ、組織、請求先アカウントなど、その他の Google Cloud リソースには、それぞれ独自の監査ログが記録されます。

監査ログを使用すると、Google Cloud リソースに対して「いつ誰がどこで何をしたか」を調べることができます。監査ログは、ユーザー別およびアクセス パターン別のシステム アクティビティについての信頼できる情報源であり、監査やセキュリティに関する質問の主な情報源となります。

BigQuery の INFORMATION_SCHEMA ビューは、指標やログとともに使用できる分析情報のもう 1 つのソースです。このビューには、ジョブ、データセット、テーブル、その他の BigQuery エンティティに関するメタデータが含まれます。たとえば、指定した期間中に実行された BigQuery ジョブに関するリアルタイムのメタデータを取得できます。その結果を、プロジェクト、ユーザー、参照するテーブルなどの項目でグループ化またはフィルタリングすることもできます。

INFORMATION_SCHEMA ビューは、BigQuery ワークロードについて、次のような詳細な分析を実行するための情報を提供します。

  • 特定のプロジェクトにおける過去 7 日間のすべてのクエリの平均スロット使用率
  • 過去 30 分間に発生したストリーミング エラーを、エラーコード別にグループ化したもの

BigQuery 監査ログには、API 呼び出しのログエントリが含まれますが、API 呼び出しの影響については説明されません。API 呼び出しのサブセットは、情報が INFORMATION_SCHEMA ビューによってキャプチャされるジョブ(クエリや読み込みなど)を作成します。たとえば、INFORMATION_SCHEMA ビューでは特定のクエリで使用された時間とスロットに関する情報を確認できますが、監査ログでは確認できません。

特に BigQuery ワークロードのパフォーマンスに関する分析情報を取得するには、ジョブ メタデータストリーミング メタデータ予約メタデータをご覧ください。

Google Cloud サービスで記録する監査ログの種類の詳細については、監査ログの種類をご覧ください。

監査ログ形式

Google Cloud サービスは、構造化 JSON 形式で監査ログを記録します。Google Cloud ログエントリの基本データ型は LogEntry 構造です。この構造体には、ログの名前、ログエントリを生成したリソース、タイムスタンプ、その他の基本情報が含まれています。

ログには、ペイロード フィールドと呼ばれるサブフィールドで記録されたイベントの詳細が含まれます。監査ログの場合、ペイロード フィールドは protoPayload という名前になります。このフィールドのタイプ(protoPayload.@type)は type.googleapis.com/google.cloud.audit.AuditLog に設定されており、このフィールドが AuditLog ログ構造を使用していることを示します。

BigQuery は、データセット、テーブル、ジョブのオペレーションに対して監査ログを 2 つの異なる形式で書き込みますが、どちらもベースタイプは AuditLog です。

古い形式には次のフィールドと値が含まれます。

  • resource.type フィールドの値は bigquery_resource です。
  • BigQuery は、オペレーションの詳細を protoPayload.serviceData フィールドに書き込みます。このフィールドの値には、AuditData ログ構造が使用されます。

新しい形式には次のフィールドと値が含まれます。

  • resource.type フィールドの値は bigquery_project または bigquery_dataset です。bigquery_project リソースにはジョブに関するログエントリがあり、bigquery_dataset リソースにはストレージに関するログエントリがあります。
  • BigQuery は、オペレーションの詳細を protoPayload.metadata フィールドに書き込みます。このフィールドの値には、BigQueryAuditMetadata 構造が使用されます。

新しい形式のログを使用することをおすすめします。詳細については、監査ログ移行ガイドをご覧ください。

失敗したオペレーションを示すログエントリの簡単な例を、以下に示します。

{
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "status": {
      "code": 5,
      "message": "Not found: Dataset myproject:mydataset was not found in location US"
    },
    "authenticationInfo": { ... },
    "requestMetadata":  { ... },
    "serviceName": "bigquery.googleapis.com",
    "methodName": "google.cloud.bigquery.v2.JobService.InsertJob",
    "metadata": {
  },
  "resource": {
    "type": "bigquery_project",
    "labels": { .. },
  },
  "severity": "ERROR",
  "logName": "projects/myproject/logs/cloudaudit.googleapis.com%2Fdata_access",
  ...
}

BigQuery Reservations のオペレーションでは、protoPayload フィールドに AuditLog 構造が使用され、protoPayload.request フィールドと protoPayload.response フィールドに詳細情報が格納されます。フィールドの定義は BigQuery Reservation API で確認できます。詳細については、BigQuery の予約のモニタリングをご覧ください。

監査ログ形式の詳細については、監査ログについてをご覧ください。

制限事項

ログメッセージのサイズ上限は 100,000 バイトです。詳しくは、ログエントリの切り捨てをご覧ください。

可視化とアクセス制御

BigQuery 監査ログには、ユーザーが機密とみなすような情報(SQL テキスト、スキーマ定義、テーブルやデータセットといったリソースの識別子など)が含まれている可能性があります。この情報へのアクセスの管理については、Cloud Logging のアクセス制御ドキュメントをご覧ください。

次のステップ

  • Cloud Logging を使用してポリシータグに関連するアクティビティを監査する方法については、監査ポリシータグをご覧ください。
  • BigQuery を使用してログに記録されたアクティビティを分析する方法については、BigQuery 監査ログの概要をご覧ください。