監査ログについて

このページでは、Cloud Audit Logs のログエントリの構造、読み取り方法、解釈方法など、Cloud Audit Logs ログエントリの詳細について説明します。

Cloud Audit Logs では、 Trusted Cloud プロジェクト、フォルダ、組織ごとに以下の監査ログが保存されます。

  • 管理アクティビティ監査ログ
  • データアクセス監査ログ
  • システム イベント監査ログ
  • ポリシー拒否監査ログ

Cloud Audit Logs の概要については、Cloud Audit Logs をご覧ください。

監査ログエントリの形式

監査ログエントリは、Cloud Logging ログエントリの一種です。すべての Logging ログエントリと同様に、監査ログエントリは LogEntry オブジェクトに格納されます。監査ログエントリと他のログエントリを区別するのが protoPayload フィールドです。監査ログエントリには、ログエントリの protoPayload フィールドに AuditLog 監査ログデータを格納するオブジェクトが含まれています。

つまり、すべての監査ログエントリには次の情報が保存されます。

  • ログエントリを所有するプロジェクト、フォルダ、または組織。
  • ログエントリが適用されるリソース。この情報は、モニタリング対象リソースリストのリソースタイプと、特定のインスタンスを表す値で構成されます。たとえば、単一の Compute Engine VM インスタンスまたはすべての VM インスタンスからの監査ログエントリを表示できます。
  • タイムスタンプ
  • サービス: サービスは、Compute Engine、Cloud SQL、Pub/Sub などの個々の Trusted Cloud プロダクトです。各サービスは名前で識別されます。Compute Engine は compute.googleapis.com、Cloud SQL は cloudsql.googleapis.com などです。この情報は、監査ログエントリの protoPayload.serviceName フィールドにリストされます。

    リソースタイプは単一のサービスに属しますが、サービスは複数のリソースタイプを持つことができます。サービスとリソースのリストについては、サービスとリソースのマッピングをご覧ください。

  • ペイロード。protoPayload 型になります。各監査ログエントリのペイロードは、AuditLog タイプのオブジェクトで、serviceNameauthenticationInfo といった、Cloud Audit Logs に固有の一連のフィールドを定義します。また、 Trusted Cloud by S3NS サービスで監査ログエントリ内のサービス固有情報をリストするために使用される、オプション フィールドの metadata も含まれています。一部の Trusted Cloud by S3NS サービスでは、古い serviceData フィールドを引き続き使用してサービス固有の情報を一覧表示します。serviceData フィールドを使用するサービスのリストについては、サービス固有の監査データをご覧ください。

  • ログ名: 監査ログエントリは、請求先アカウント、プロジェクト、フォルダ、組織内のログに属します。次の表にログ名を示します。

   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

課金アカウント、プロジェクト、フォルダ、組織内では、これらのログ名は通常、activitydata_accesssystem_eventpolicy と省略されます。

監査ログエントリの例

ここではサンプルの監査ログエントリを使用して、監査ログエントリに記述されている最も重要な情報を見つける方法について説明します。

次のサンプルは、PROJECT_ID my-gcp-project-id で Identity and Access Management(IAM)ポリシーの変更を記録する管理アクティビティの監査ログエントリです。serviceName フィールドは、監査ログを書き込むサービスです。わかりやすくするため、一部のログエントリは省略し、一部のフィールドはハイライト表示してあります。

    {
      protoPayload: {
        @type: "type.googleapis.com/google.cloud.audit.AuditLog",
        status: {},
        authenticationInfo: {
          principalEmail: "user@example.com"
        },
        serviceName: "appengine.googleapis.com",
        methodName: "SetIamPolicy",
        authorizationInfo: [...],
        serviceData: {
          @type: "type.googleapis.com/google.appengine.legacy.AuditData",
          policyDelta: { bindingDeltas: [
              action: "ADD",
              role: "roles/logging.privateLogViewer",
              member: "user:user@example.com"
          ], }
        },
        request: {
          resource: "my-gcp-project-id",
          policy: { bindings: [...], }
        },
        response: {
          bindings: [
            {
              role: "roles/logging.privateLogViewer",
              members: [ "user:user@example.com" ]
            }
          ],
        }
      },
      insertId: "53179D9A9B559.AD6ACC7.B40604EF",
      resource: {
        type: "gae_app",
        labels: { project_id: "my-gcp-project-id" }
      },
      timestamp: "2019-05-27T16:24:56.135Z",
      severity: "NOTICE",
      logName: "projects/my-gcp-project-id/logs/cloudaudit.googleapis.com%2Factivity",
    }

次に、上記の監査ログエントリのサンプルを選択するために使用されたクエリを示します。このクエリはログ エクスプローラ、Logging API、または Google Cloud CLI で使用できます。プロジェクト識別子がログの名前に含まれています。

    resource.type = "gae_app"
    logName = "projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"

gce_instance のようにリソースタイプの単一インスタンスから監査ログを検索する場合は、インスタンス修飾子を追加します。

    resource.type = "gce_instance"
    resource.instance_id = "INSTANCE_ID"
    logName = "projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"

サンプル監査ログエントリの解釈

上記の監査ログエントリの例に示されている protoPayloadinsertIdresourcetimestampseveritylogName のフィールドは LogEntry オブジェクトの一部です。protoPayload フィールドの値は AuditLog オブジェクトです。これは監査ログデータをカプセル化しています。

監査ログエントリのサンプルについて、次のような疑問が生じるかもしれません。

  • これは監査ログエントリなのか?次の 2 つのことから、監査ログエントリであることがわかります。

    • protoPayload.@type フィールドは type.googleapis.com/google.cloud.audit.AuditLog です。

    • logName フィールドにはドメイン cloudaudit.googleapis.com が含まれています。

  • 監査ログを書き込んだサービスは何なのか?ログは App Engine によって書き込まれます。この情報は、監査ログエントリの protoPayload.serviceName フィールドにリストされます。

  • 監査対象オペレーションは何なのか?監査対象は protoPayload.methodName フィールドで指定されている SetIamPolicy です。監査されるオペレーションの詳細については、protoPayload.serviceDataAuditData オブジェクトをご覧ください。

  • 監査対象のリソースは何なのか? Trusted Cloud プロジェクト my-gcp-project-id に関連付けられている App Engine で実行中のアプリケーションが監査対象になります。これは、リソースタイプ gae_app とプロジェクト識別子 my-gcp-project-id を指定する resource フィールドから判断できます。この例では、モニタリング対象リソース項目リストでリソースタイプの詳細を確認できます。

詳細については、LogEntry タイプAuditLog タイプIAM AuditData タイプをご覧ください。

長時間実行オペレーションの監査ログ

長時間実行オペレーションの API は、監査ログを 2 回出力します。1 回は API が呼び出されてオペレーションが開始されたときで、もう 1 回はオペレーションが完了したときです。

この場合、LogEntry オブジェクトに operation フィールドが含まれています。同じオペレーションのログエントリでは、LogEntry.operation.idLogEntry.operation.producer の両方に同じ値が設定されます。最初に書き込まれたログエントリには LogEntry.operation.first=true、完了のログエントリには LogEntry.operation.last=true が含まれます。

オペレーションがすぐに完了するか失敗した場合、LogEntry.operation.first=trueLogEntry.operation.last=true の両方を含むログエントリは 1 つだけです。

一部のサービスでは、オペレーションが失敗しても LogEntry.operation フィールドに値が入力されません。ただし、サービスの監査ロギングに関するドキュメントを参照すると、長時間実行オペレーションを特定できます。

これらの API にはオペレーション サービスが実装されています。通常、このサービスは呼び出されたときに監査ログエントリを出力します。呼び出される API に応じて、protoPayload.methodName は次のいずれかになります。

  • google.longrunning.Operations.ListOperations
  • google.longrunning.Operations.GetOperation
  • google.longrunning.Operations.CancelOperation
  • google.longrunning.Operations.WaitOperation
  • google.longrunning.Operations.DeleteOperation

この API は長時間実行オペレーションに関するメタデータを返しますが、長時間実行オペレーション自体ではありません。この場合は LogEntry.operation は指定されません。

監査対象の API の詳細については、監査ログを備えたTrusted Cloud by S3NS サービスをご覧ください。サービスによって異なる場合があります。

ストリーミング API の監査ログ

長時間実行オペレーションと同様に、ストリーミング API では監査ログエントリが 2 回出力されます。1 回は API が最初に呼び出されたときで、もう 1 回はストリーミング接続が終了したときです。

この場合、LogEntry オブジェクトには operation フィールドが含まれ、同じオペレーションのログエントリの LogEntry.operation.idLogEntry.operation.producer の両方に同じ値が設定されます。最初に書き込まれるログには LogEntry.operation.first=true、完了ログには LogEntry.operation.last=true が含まれます。

この API では、ストリームが開始している状態であることを示すために、LogEntry.operation.firstLogEntry.operation.last のどちらも設定されていない継続ログエントリが出力される場合もあります。

サービス固有の監査データ

一部のサービスでは、監査ログエントリの serviceData フィールドに補足データ構造を配置することにより、AuditLog に格納されている情報を拡張します。次の表は、serviceData フィールドを使用するサービスをリストし、それらの AuditData タイプへのリンクを示しています。

サービスサービスのデータ型
BigQuery type.googleapis.com/google.cloud.bigquery.logging.v1.AuditData
IAM type.googleapis.com/google.iam.v1.logging.AuditData

監査ログの表示

すべての監査ログに対してクエリを実行することも、監査ログ名でログをクエリすることもできます。監査ログ名には、監査ロギング情報を表示する Trusted Cloud プロジェクト、フォルダ、請求先アカウント、または組織のリソース識別子が含まれています。クエリでは、インデックス付きの LogEntry フィールドを指定できます。ログのクエリの詳細については、ログ エクスプローラでクエリを作成するをご覧ください。

ほとんどの監査ログは、Trusted Cloud コンソール、Google Cloud CLI、または Logging API を使用して Cloud Logging で表示できます。ただし、課金に関連する監査ログの場合は、Google Cloud CLI または Logging API のみを使用できます。

コンソール

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

  1. Trusted Cloud コンソールで [ログ エクスプローラ] ページに移動します。

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

    このページを検索バーで検索する場合は、小見出しが「Logging」の結果を選択します。

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

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

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

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

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

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

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

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

    ログ エクスプローラを使用したクエリの詳細については、ログ エクスプローラでクエリを作成するをご覧ください。

gcloud

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

Trusted 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 をご覧ください。

REST

Cloud Logging API を使用してログデータをクエリするには、entries.list メソッドを使用します。