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

Compute Engine リソースに関連するログエントリを表示するときに以前のアクティビティ ログを使用する場合は、このガイドを読み、代わりに監査ロギングを行って Compute Engine のログエントリを見つける方法を把握してください。

Compute Engine のアクティビティ ログは、2020 年 9 月 30 日に非推奨となります。 一部のアクティビティ ログのエントリは 2020 年 6 月 1 日をもってご利用いただけなくなります。

Compute Engine の監査ログには、以前の Compute Engine のアクティビティ ログなどを通じて使用可能な情報と同じ情報が含まれています。ただし、監査ログには、アクティビティ ログとは異なる情報が表示されます。

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

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

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

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

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

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

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

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

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

    1. gcloud logging read protoPayload.resourceName:"instance-name"
    2. gcloud logging read protoPayload.resourceName="projects/project-id/zones/zone/instances/instance-name"

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

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

    クエリの例
    以前のアクティビティ ログ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'
  3. 新しい監査ログクエリを保存して使用します。たとえば、Cloud Logging で保存済み検索を作成するか、スクリプトを更新します。

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

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

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

  • フィールド名が異なります。詳細は、フィールド名対応表をご覧ください。
  • 次のように、フィールド値が異なります。
    • ログ名の違い: 監査ログのログ名には 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 resource.timestamp
jsonPayload.request protoPayload.request
jsonPayload.operation operation
jsonPayload.resource.id resource.lablels.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/instance-name"

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

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

  • gcloud logging read protoPayload.resourceName:"instance-name"
  • gcloud logging read protoPayload.resourceName="projects/project-id/zones/zone/instances/instance-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 呼び出しを返します。演算子の詳細については、比較をご覧ください。

次のステップ