Spanner の監査ロギング情報

このドキュメントでは、Cloud Audit Logsの一部として Spanner によって作成される監査ログについて説明します。

概要

Google Cloud サービスにより監査ログが書き込まれ、Google Cloud リソース内で「誰が、いつ、どこで、何をしたか」を確認できます。

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

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

利用可能な監査ログ

Spanner では、次の種類の監査ログを使用できます。

  • 管理アクティビティ監査ログ

    メタデータまたは構成情報を書き込む「管理書き込み」オペレーションが含まれます。

    管理アクティビティ監査ログは無効にできません。

  • データアクセス監査ログ

    メタデータまたは構成情報を読み取る「管理読み取り」オペレーションが含まれます。ユーザー提供データの読み取りまたは書き込みを行う「データ読み取り」オペレーションと「データ書き込み」オペレーションも含まれます。

    データアクセス監査ログを受信するには、監査ログを明示的に有効にする必要があります。

  • システム イベント監査ログ

    リソースの構成を変更する自動化された Google Cloud アクションを特定します。

    システム イベント監査ログは無効にできません。

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

監査対象のオペレーション

次の表は、Spanner の各監査ログタイプに対応する API オペレーションをまとめたものです。

監査ログのカテゴリ Spanner のオペレーション
管理アクティビティ ログ

インスタンス オペレーション:

  • CreateInstance
  • DeleteInstance
  • UpdateInstance

データベース オペレーション:

  • CreateDatabase
  • DropDatabase
  • RestoreDatabase[1] [2]
  • UpdateDatabaseDdl

バックアップ オペレーション

  • CreateBackup[2]
  • DeleteBackup
  • UpdateBackup
データアクセス ログ(ADMIN_READ

インスタンス オペレーション:

  • GetInstance
  • GetInstanceConfig
  • ListInstanceConfigs
  • ListInstances

データベース オペレーション:

  • GetDatabase
  • GetDatabaseDdl
  • ListDatabases

バックアップ オペレーション

  • GetBackup
  • ListBackups
データアクセス ログ(DATA_READ
  • BeginTransactionReadOnly トランザクション)
  • ExecuteSql[3]
  • ExecuteStreamingSql[3]
  • GetSession
  • ListSessions
  • Read[3](リクエストされたキーはログに記録されません)
  • StreamingRead[3](リクエストされたキーはログに記録されません)
データアクセス ログ(DATA_WRITE
  • BeginTransactionReadWrite トランザクション)
  • ExecuteSql[3]
  • ExecuteStreamingSql[3]
  • Commit
  • CreateSession
  • DeleteSession
  • Read[3](リクエストされたキーはログに記録されません)
  • Rollback
  • StreamingRead[3](リクエストされたキーはログに記録されません)
システム イベント ログ
  • OptimizeRestoredDatabase

[1] データベースの復元には 2 つのリソース(バックアップと復元されたデータベース、異なるインスタンスに存在する可能性があります)に対する承認が必要ですが、RestoreDatabase イベントは復元されたデータベースのインスタンスの単一のエントリとして一度だけ記録されます。このエントリ内には、2 つの authorizationInfo エントリがあります。1 つはデータベース用の、spanner.databases.create 権限のチェック、もう 1 つはバックアップ用(spanner.backups.restoreDatabase 権限)のチェックです。

[2] RestoreDatabaseCreateBackup の場合、オペレーション終了時にログに記録されるエントリに認証情報や認可情報は含まれません。認証と承認の情報は、オペレーションの開始時にログに記録された一致するエントリ内にあります。一致するログエントリをログ エクスプローラで見つけるには、ログエントリの operation.id フィールドをクリックし、メニューの [一致エントリを表示] を選択します。

[3] メソッドの TransactionSelector に指定された場合は、読み取りオペレーションを実行するデータアクセス メソッド ReadStreamingReadExecuteSqlExecuteStreamingSql も読み取り / 書き込みトランザクションを開始します。このような場合、オペレーションは DATA_READDATA_WRITE の両方のアクセスタイプに一致します。

処理期間

DATA_READ リクエストまたは DATA_WRITE リクエストの処理に要した時間を確認するには、AuditLogmetadata オブジェクト内に存在する processingDurationSeconds フィールドをご覧ください。processingDurationSeconds は、リクエストのレイテンシをモニタリングするのに役立ちます。

processingDurationSeconds は、Spanner API リクエストのレイテンシを表します。これは、Spanner API フロントエンドがリクエストの最初のバイトを受信してからレスポンスの最後のバイトを送信するまでの時間(秒)です。Spanner バックエンドと API レイヤの両方で API リクエストの処理に必要な時間はレイテンシです。ただし、このレイテンシには、Spanner クライアントとサーバー間のネットワークまたは Google Front End のオーバーヘッドは含まれません。Spanner API リクエストに関連する高レベルのコンポーネントを可視化するには、Spanner のエンドツーエンドのレイテンシ ガイドをご覧ください。

たとえば、processingDurationSeconds 情報を含む監査ログは次のようになります。

{
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {...},
    "requestMetadata": {...},
    "serviceName": "spanner.googleapis.com",
    "methodName": "google.spanner.v1.Spanner.Commit",
    "authorizationInfo": [{...}],
    "resourceName": "projects/example-project/instances/example-instance/databases/example-database/sessions/example-session",
    "request": {
      "transactionId": "example-transactionId",
      "@type": "type.googleapis.com/google.spanner.v1.CommitRequest",
      "session": "projects/example-project/instances/example-instance/databases/example-database/sessions/example-session"
    },
    "response": {
      "@type": "type.googleapis.com/google.spanner.v1.CommitResponse",
      "commitTimestamp": "2023-02-13T17:11:10.106602Z"
    },
    "metadata": {
      "@type": "type.googleapis.com/spanner.cloud.instance_v1.QueryPerformanceMetadata",
      "processingDurationSeconds": 0.1932541
    }
  },
  "insertId": "p9ju4gdi7j0",
  "resource": {...},
  "timestamp": "2023-02-13T17:11:10.000093953Z",
  "severity": "INFO",
  "logName": "projects/example-project/logs/cloudaudit.googleapis.com%2Fdata_access",
  "receiveTimestamp": "2023-02-13T17:11:11.170517524Z"
}

ExecuteStreamingSqlStreamingReadPartitionReadPartitionQuery リクエストの場合、processingDurationSeconds フィールドは設定されていません。ストリーミングとパーティションのリクエスト レイテンシを計算するには、ストリーミング リクエストとパーティション リクエストのレイテンシの計算をご覧ください。

監査ログ形式

監査ログエントリには、次のオブジェクトが含まれます。

  • ログエントリ自体。LogEntry タイプのオブジェクトです。よく使用されるフィールドは次のとおりです。

    • logName には、リソース ID と監査ログの種類が含まれます。
    • resource には、監査対象オペレーションのターゲットが含まれます。
    • timeStamp には、監査対象オペレーションの時間が含まれます。
    • protoPayload には、監査対象の情報が含まれます。
  • 監査ロギングデータ。ログエントリの protoPayload フィールドに保持される AuditLog オブジェクトです。

  • 任意のサービス固有の監査情報。サービス固有のオブジェクトです。前のインテグレーションでは、このオブジェクトは AuditLog オブジェクトの serviceData フィールドに保持されています。後のインテグレーションでは、metadata フィールドを使用します。

これらのオブジェクトのその他のフィールドと、その解釈方法については、監査ログについてをご覧ください。

ログ名

Cloud Audit Logs のログ名には、監査ログを所有する Google Cloud プロジェクトまたは他の Google Cloud エンティティ、およびログに管理アクティビティ、データアクセス、ポリシーの拒否、システム イベントの監査ログデータが含まれているかどうかを示すリソース識別子が含まれます。

リソース識別子の変数を含む監査ログ名は次のとおりです。

   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity
   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access
   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event
   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fpolicy

   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Factivity
   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fdata_access
   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fsystem_event
   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fpolicy

   billingAccounts/BILLING_ACCOUNT_ID/logs/cloudaudit.googleapis.com%2Factivity
   billingAccounts/BILLING_ACCOUNT_ID/logs/cloudaudit.googleapis.com%2Fdata_access
   billingAccounts/BILLING_ACCOUNT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event
   billingAccounts/BILLING_ACCOUNT_ID/logs/cloudaudit.googleapis.com%2Fpolicy

   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Factivity
   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fdata_access
   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fsystem_event
   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fpolicy

サービス名

Spanner 監査ログでは、サービス名 spanner.googleapis.com が使用されます。

すべての Cloud Logging API サービス名とそれに対応するモニタリング対象リソースタイプの一覧については、サービスとリソースのマッピングをご覧ください。

リソースタイプ

Spanner の監査ログは、すべての監査ログにリソースタイプ spanner_instance を使用します。

Cloud Logging でモニタリングされるすべてのリソースタイプのリストと記述情報については、モニタリング対象リソースタイプをご覧ください。

呼び出し元の ID

呼び出し元の IP アドレスは、AuditLog オブジェクトの RequestMetadata.caller_ip フィールドに保持されます。Logging は、特定の呼び出し元の ID と IP アドレスを秘匿化する場合があります。

監査ログで秘匿化される情報については、監査ログの呼び出し元の ID をご覧ください。

監査ロギングの有効化

システム イベント監査ログは常に有効になっています。無効にすることはできません。

管理アクティビティ監査ログは常に有効になっています。無効にすることはできません。

データアクセス監査ログはデフォルトで無効になっており、明示的に有効にしない限り書き込まれません(例外は BigQuery のデータアクセス監査ログで、これは無効にすることができません)。

データアクセス監査ログの一部またはすべてを有効にする方法については、データアクセス監査ログを有効にするをご覧ください。

権限とロール

IAM の権限とロールにより、Google Cloud リソース内の監査ログデータにアクセス可能かどうか判断されます。

ユースケースに適用する Logging 固有の権限とロールを決定する際は、次の点を考慮してください。

  • ログ閲覧者のロール(roles/logging.viewer)は、管理アクティビティ、ポリシー拒否、システム イベントの監査ログに対する読み取り専用権限を付与します。このロールしかない場合は、_Default バケット内のデータアクセス監査ログを閲覧できません。

  • プライベート ログ閲覧者のロール((roles/logging.privateLogViewer)には、roles/logging.viewer に含まれる権限に加えて、_Default バケット内のデータアクセス監査ログの読み取り権限が含まれます。

    これらのプライベート ログがユーザー定義バケットに保存されている場合、それらのバケット内のログを読み取る権限を持つユーザーは、プライベート ログを読み取ることができます。ログバケットの詳細については、転送とストレージの概要をご覧ください。

監査ログデータに適用される IAM の権限とロールの詳細については、IAM を使用したアクセス制御をご覧ください。

ログを表示

すべての監査ログに対してクエリを実行することも、監査ログ名でログをクエリすることもできます。監査ログ名には、Google Cloud プロジェクト、フォルダ、請求先アカウント、または監査ロギング情報を表示する組織のリソース識別子が含まれています。クエリでは、インデックス付きの LogEntry フィールドを指定できます。SQL クエリをサポートする [ログ分析] ページを使用する場合は、クエリ結果をグラフとして表示できます。

ログのクエリの詳細については、次のページをご覧ください。

Google Cloud コンソール、Google Cloud CLI、または Logging API を使用して、Cloud Logging で監査ログを表示できます。

コンソール

Google Cloud コンソールでは、ログ エクスプローラを使用して、Google Cloud プロジェクト、フォルダ、または組織の監査ログエントリを取得できます。

  1. Google Cloud コンソールのナビゲーション パネルで、[ロギング] を選択してから、[ログ エクスプローラ] を選択します。

    [ログ エクスプローラ] に移動

  2. 既存の Google Cloud プロジェクト、フォルダ、または組織を選択します。

  3. すべての監査ログを表示するには、次のいずれかのクエリを [クエリエディタ] フィールドに入力し、[クエリを実行] をクリックします。

    logName:"cloudaudit.googleapis.com"
    
    protoPayload."@type"="type.googleapis.com/google.cloud.audit.AuditLog"
    
  4. 特定のリソースと監査ログタイプの監査ログを表示するには、[クエリビルダー] ペインで次の操作を行います。

    • リソースタイプに、表示する監査ログを含む Google Cloud リソースを選択します。

    • [ログ名] で、表示する監査ログタイプを選択します。

      • 管理アクティビティ監査ログの場合は、[activity] を選択します。
      • データアクセス監査ログの場合は、[data_access] を選択します。
      • システム イベント監査ログの場合は、[system_event] を選択します。
      • ポリシー拒否監査ログの場合は、[policy] を選択します。
    • [クエリを実行] をクリックします。

    これらのオプションが表示されない場合、Google Cloud プロジェクト、フォルダ、または組織で利用可能なその種類の監査ログは存在しないことを意味します。

    ログ エクスプローラでログを表示する際に問題が発生した場合は、トラブルシューティングの情報をご覧ください。

    ログ エクスプローラを使用したクエリの詳細については、ログ エクスプローラでクエリを作成するをご覧ください。 Gemini を使用してログ エクスプローラでログエントリを要約する方法については、Gemini のアシスト機能を使用してログエントリを要約するをご覧ください。

gcloud

Google Cloud CLI は、Logging API へのコマンドライン インターフェースを提供します。ログ名ごとに有効なリソース識別子を指定します。たとえば、クエリに PROJECT_ID が含まれている場合、指定するプロジェクト ID は、現在選択された Google Cloud プロジェクトを参照している必要があります。

Google Cloud プロジェクト レベルの監査ログエントリを読み取るには、次のコマンドを実行します。

gcloud logging read "logName : projects/PROJECT_ID/logs/cloudaudit.googleapis.com" \
    --project=PROJECT_ID

フォルダレベルの監査ログエントリを読み取るには、次のコマンドを実行します。

gcloud logging read "logName : folders/FOLDER_ID/logs/cloudaudit.googleapis.com" \
    --folder=FOLDER_ID

組織レベルの監査ログエントリを読み取るには、次のコマンドを実行します。

gcloud logging read "logName : organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com" \
    --organization=ORGANIZATION_ID

Cloud 請求先アカウント レベルの監査ログエントリを読み取るには、次のコマンドを実行します。

gcloud logging read "logName : billingAccounts/BILLING_ACCOUNT_ID/logs/cloudaudit.googleapis.com" \
    --billing-account=BILLING_ACCOUNT_ID

1 日以上経過したログを読み取るには、コマンドに --freshness フラグを追加します。

gcloud CLI の使用方法に関する詳細については、gcloud logging read をご覧ください。

API

クエリを作成するときは、ログ名ごとに有効なリソース識別子を指定します。たとえば、クエリに PROJECT_ID が含まれている場合、指定するプロジェクト ID は、現在選択された Google Cloud プロジェクトを参照している必要があります。

たとえば、Logging API を使用してプロジェクト レベルの監査ログエントリを表示する手順は次のとおりです。

  1. entries.list メソッドのドキュメント内の [Try this API] セクションに移動します。

  2. [Try this API] フォームのリクエストの本文に、次のコードを入力します。この事前入力されたフォームをクリックすると、リクエストの本文が自動的に入力されますが、それぞれのログ名に有効な PROJECT_ID を指定する必要があります。

    {
      "resourceNames": [
        "projects/PROJECT_ID"
      ],
      "pageSize": 5,
      "filter": "logName : projects/PROJECT_ID/logs/cloudaudit.googleapis.com"
    }
    
  3. [実行] をクリックします。

監査ログの転送

他の種類のログと同様に、サポートされている宛先に監査ログを転送できます。監査ログを転送する理由を以下に示します。

  • 監査ログを長期間保持する場合や、より強力な検索機能を使用する場合は、監査ログのコピーを Cloud Storage、BigQuery、または Pub/Sub に転送します。Pub/Sub を使用すると、他のアプリケーション、他のリポジトリ、サードパーティ製品に転送できます。

  • 組織全体の監査ログを管理するには、組織内の一部またはすべての Google Cloud プロジェクトからログを転送できる集約シンクを作成します。

  • 有効にしたデータアクセス監査ログが原因で Google Cloud プロジェクト数がログ割り当てを超過している場合は、データアクセス監査ログを Logging から除外するシンクを作成できます。

ログの転送手順については、サポートされている宛先にログを転送するをご覧ください。

料金

料金の詳細については、Cloud Logging の料金概要をご覧ください。

次のステップ