アクティビティ ログから監査ログへの移行


アクティビティ ログを使用して Compute Engine 管理アクティビティとシステム イベントを確認する場合は、このガイドを読み、監査ログで同様のログエントリを見つける方法を確認してください。

Compute Engine アクティビティ ログは非推奨になりました。ログ名でアクティビティ ログのエントリを識別できます。

logName: "projects/PROJECT_ID/logs/compute.googleapis.com%2Factivity_log"

Compute Engine の監査ログには、アクティビティ ログなどから入手できる情報が含まれています。ただし、監査ログには、アクティビティ ログと異なる情報も含まれます。したがって、クエリの調整が必要になります。

アクティビティ ログから監査ログに移行する方法

アクティビティ ログの代わりに監査ログを使用するには、クエリを調整します。方法は次のとおりです。

  1. 古いクエリを検索します。たとえば、ログ エクスプローラの保存済み検索に古いクエリを保存していたり、API または SDK を使用してスクリプトを作成していたりしていることが考えられます。リソースをモニタリングする方法の詳細については、Logging のドキュメントをご覧ください。

  2. アクティビティ ログのフィールドを適切な監査ログのフィールドに置き換えます。各フィールドの対応関係については、をご覧ください。

    たとえば、以前のアクティビティ ログのクエリで jsonPayload.resource.name というフィールドを検索した場合、新しい監査ログのクエリでは、代わりに protoPayload.resourceName を検索する必要があります。

  3. 新しい監査ログクエリを保存して使用します。たとえば、Cloud Logging で保存済み検索を作成するか、スクリプトを更新します。

変換されたクエリの例を次に示します。

特定のリソースに関連するアクティビティのクエリ実行

クエリの例
以前のアクティビティ ログgcloud logging read jsonPayload.resource.name="VM_NAME"
監査ログ

以下のいずれかの方法を選択します。

  1. gcloud logging read protoPayload.resourceName:"VM_NAME"
  2. gcloud logging read protoPayload.resourceName="projects/PROJECT_ID/zones/ZONE/instances/VM_NAME"

オプション 1 では、「内包」(:)演算子を使用して、VM_NAME を含む名前を持つプロジェクト内のすべてのリソースを照会します。オプション 2 では、「等号」演算子(=)を使用して、該当の名前を持つ特定の完全修飾リソースのみを照会します。

最新の管理アクティビティ ログのエントリのクエリ

クエリの例
以前のアクティビティ ログgcloud logging read logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Factivity_log"
監査ログgcloud logging read logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"

最新のインスタンス作成ログのエントリのクエリ

クエリの例
以前のアクティビティ ログgcloud logging read 'logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Factivity_log" AND jsonPayload.event_subtype="compute.instances.insert"'
監査ログgcloud logging read 'logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity" AND protoPayload.methodName:"compute.instances.insert"'

すべてのインスタンス作成オペレーションの開始のクエリ

クエリの例
以前のアクティビティ ログgcloud logging read 'jsonPayload.event_type="GCE_API_CALL" AND jsonPayload.event_subtype="compute.instances.insert"'
監査ログgcloud logging read 'operation.first="true" AND protoPayload.methodName:"compute.instances.insert"'

任意のオペレーションの完了のクエリ

クエリの例
以前のアクティビティ ログgcloud logging read jsonPayload.event_type="GCE_OPERATION_DONE"
監査ログgcloud logging read operation.last="true"

アクティビティ ログと監査ログの違い

このセクションでは、監査ログとアクティビティ ログの構造の違いについて説明します。以前のアクティビティ ログのクエリを監査ログのクエリに変換するときは、これらの違いにご注意ください。たとえば、クエリで、以前のアクティビティ ログのすべてのフィールド名を対応する監査ログのフィールド名に置き換えてください。

監査ロギングとアクティビティ ログはどちらもログエントリ オブジェクトを返しますが、両者には次のような違いがあります。

  • フィールド名が異なります。詳細は、フィールド名対応表をご覧ください。
  • 異なるフィールド値。例:
    • ログ名の違い: 監査ログのログ名には cloudaudit.googleapis.com が含まれます。
    • ペイロードの違い: 監査ログは jsonPayload フィールドではなく protoPayload フィールドを返します。
    • 完全修飾リソース名: 監査ログは、パスを含むリソース名を返します(例: projects/my-project/zones/us-east1-b/instances/my-instance-name)。
    • バージョン付きメソッド名: 監査ログは、バージョンを含むメソッド名を返します(例: v1)。

ログ名とペイロードの違いの例を以下に示します。

ログエントリの例
以前のアクティビティ ログ
{
  insertId:  "1x3bbhjg2wwvz1x"
  jsonPayload: {
    event_subtype: "compute.instances.stop"
    ...
    resource: {
      id: "12345678900123456789"
      name: "my-instance-name"
      type: "instance"
      zone: "us-east1-b"
    }
    ...
  }
  labels: {…}
  logName:  "projects/my-project/logs/compute.googleapis.com%2Factivity_log"
  receiveTimestamp:  "2019-08-26T12:22:44.602794616Z"
  ...
}
監査ログ
{
  insertId:  "-w6o499e22fwk"
  logName:  "projects/my-project/logs/cloudaudit.googleapis.com%2Factivity"
  protoPayload: {
    ...
    methodName: "beta.compute.instances.stop"
    ...
    resourceName: "projects/my-project/zones/us-east1-b/instances/my-instance-name"
  }
  receiveTimestamp:  "2019-08-26T12:22:46.881198276Z"
  ...
}

アクティビティ ログから監査ログへのフィールドのマッピング

下の表を使用して、クエリのアクティビティ ログのフィールドを対応する監査ログのフィールドにマッピングします。

フィールド

下の表を使用して、更新されたクエリで、以前のアクティビティ ログのフィールドを監査ログのフィールドに置き換えます。

たとえば、以前のアクティビティ ログのクエリに jsonPayload.resource.type に基づくフィルタが含まれていた場合、代わりに resource.type に基づいて新しい監査ログのクエリをフィルタリングする必要があります。

以前のアクティビティ ログのフィールド 監査ログのフィールド
insertId insertId
jsonPayload.actor.user protoPayload.authenticationInfo.principalEmail
jsonPayload.event_subtype protoPayload.methodName
jsonPayload.event_timestamp_us timestamp
jsonPayload.event_type="GCE_API_CALL" operation.first="true"
jsonPayload.event_type="GCE_OPERATION_DONE" operation.last="true"
jsonPayload.request protoPayload.request
jsonPayload.operation operation
jsonPayload.resource.id resource.labels.instance_id
jsonPayload.resource.name protoPayload.resourceName
jsonPayload.resource.type resource.type
jsonPayload.resource.zone resource.labels.zone
jsonPayload.trace_id operation.id
jsonPayload.user_agent protoPayload.requestMetadata.callerSuppliedUserAgent
labels.compute.googleapis.com/resource_id resource.labels.[RESOURCE_TYPE]_id
labels.compute.googleapis.com/resource_name protoPayload.resourceName
labels.compute.googleapis.com/resource_type resource.type
labels.compute.googleapis.com/resource_zone 次のいずれか:
  • resource.labels.zone
  • resource.labels.region
  • resource.labels.location
logName logName
receiveTimestamp receiveTimestamp
resource.labels resource.labels
severity severity
timestamp timestamp

フィールド値

次の表を使用して、以前のアクティビティ ログのフィールド値を監査ログのフィールド値にマッピングします。アクティビティ ログと比較すると、監査ログには複数のログ名の値と複数のペイロードの値があります。監査ログエントリは、完全修飾リソース名とバージョン付きのメソッド名も返します。

ログ名

監査ログエントリを見つけるには、cloudaudit.googleapis.com が含まれる logName を探します。

ログ名ログの内容
以前のアクティビティ ログprojects/PROJECT_ID/logs/compute.googleapis.com%2Factivity_log管理アクティビティとシステム イベント
監査ログprojects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity管理アクティビティ
projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_eventシステム イベント
projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_accessデータアクセス

ペイロード

個々の監査ログエントリで、jsonPayload ではなく protoPayload を探します。

ペイロードの種類ペイロードの例
以前のアクティビティ ログjsonPayload
    jsonPayload: {
      actor: {…}
      event_subtype:  "compute.instances.start"
      event_timestamp_us:  "1566404493487248"
      event_type:  "GCE_API_CALL"
      ip_address:  ""
      operation: {…}
      request: {…}
      resource: {…}
      trace_id:  "operation-1566404491560-590a2f74b4705-a1ae0686-d896d772"
      user_agent:  "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"
      version:  "1.2"
    }
監査ログprotoPayload
    protoPayload: {
      @type:  "type.googleapis.com/google.cloud.audit.AuditLog"
      authenticationInfo: {…}
      methodName:  "v1.compute.instances.start"
      request: {…}
      requestMetadata: {…}
      resourceName:  "projects/my-project/zones/us-central1-a/instances/alert"
      serviceName:  "compute.googleapis.com"
    }

これらのペイロードが互いにどのように関係しているか、以前のアクティビティ ログのフィールドを監査ログのフィールドにマッピングする方法については、ログエントリのフィールドのマッピングをご覧ください。

リソース名

監査ログでは、API リソース名(protoPayload.resourceNameフィールド内)は次のように完全修飾されます。

resourceName: "projects/PROJECT_ID/zones/ZONE/instances/VM_NAME"

引き続き名前の一部を使用できますが、「等号」演算子の代わりに「内包」演算子(:)を使用するようクエリを修正する必要があります。

監査ログクエリで次のいずれかのオプションを使用して、特定のリソースをフィルタリングします。

  • gcloud logging read protoPayload.resourceName:"VM_NAME"
  • gcloud logging read protoPayload.resourceName="projects/PROJECT_ID/zones/ZONE/instances/VM_NAME"

メソッド名

監査ログでは、API メソッド名(protoPayload.methodName フィールド内)の先頭に、v1.compute.instances.delete などのバージョンが接頭辞として付いています。

フィールドクエリの例
以前のアクティビティ ログjsonPayload.event_subtypeRESOURCE.METHODjsonPayload.event_subtype=compute.instances.delete
監査ログprotoPayload.methodNameAPI_VERSION.RESOURCE.METHODprotoPayload.methodName=v1.compute.instances.delete
または
protoPayload.methodName=beta.compute.instances.delete
または
protoPayload.methodName:compute.instances.delete

監査ログクエリでバージョンが付いていないメソッド名を引き続き使用できますが、クエリを修正し、「等号」演算子(=)ではなく「内包」演算子(:)を使用する必要があります。たとえば protoPayload.methodName:compute.instances.delete は、バージョンに関係なくすべてのインスタンス削除 API 呼び出しを返します。演算子の詳細については、比較をご覧ください。

次のステップ