監査ログのデータ型

監査ログエントリの構造は、次のとおりです。

  • 完全なログエントリを含む LogEntry タイプのオブジェクト。
  • LogEntry オブジェクトの protoPayload フィールドに保持されている、AuditLog タイプのオブジェクト。
  • AuditLog オブジェクトの serviceData フィールドに保持されている、オプションのサービス固有のオブジェクト。この拡張機能を使用するサービスの一覧は、サービス固有の監査データをご覧ください。

これらのオブジェクトにどのような情報が保持されているかを知ると監査ログについて理解を深めることができ、ログビューアや Stackdriver Logging API を使用して監査ログエントリを取得するのに役立ちます。

監査ログ エントリの例

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

以下のサンプルは、Cloud Resource Manager によって書き込まれた管理アクセスの監査ログエントリで、my-gcp-project-id という GCP プロジェクトの IAM ポリシーの変更内容が記録されています。わかりやすくするため、一部のログエントリは省略してあり、重要なフィールドは強調表示しています。

    {
      protoPayload: {
        @type: "type.googleapis.com/google.cloud.audit.AuditLog",
        status: {},
        authenticationInfo: {
          principalEmail: "user@example.com"
        },
        serviceName: "cloudresourcemanager.googleapis.com",
        methodName: "SetIamPolicy",
        authorizationInfo: [...],
        serviceData: {
          @type: "type.googleapis.com/google.iam.v1.logging.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: "project",
        labels: { project_id: "my-gcp-project-id" }
      },
      timestamp: "2016-04-27T16:24:56.135Z",
      severity: "NOTICE",
      logName: "projects/my-gcp-project-id/logs/cloudaudit.googleapis.com%2Factivity",
    }

エントリをデコードする

  • これは監査ログエントリですか? 次の 2 つのことから、監査ログエントリであることがわかります。logName フィールドにドメイン cloudaudit.googleapis.com が含まれていて、かつ protoPayload.@type フィールドが type.googleapis.com/google.cloud.audit.AuditLog である。

  • 監査対象のリソースは何ですか? 監査対象は GCP プロジェクト my-gcp-project-id です。resource フィールドでリソースタイプ project とプロジェクト ID my-gcp-project-id を指定しています。projectモニタリング対象リソースタイプの一覧で検索すると、これが「Google プロジェクト」であることがわかります。

  • 監査ログを書き込んだサービスは何ですか? Cloud Resource Manager です。これは監査ログエントリの protoPayload.serviceName フィールドに記載されています。リソースタイプからサービスを判断できることもあります。たとえば、リソースタイプ gce_instance の監査ログは Google Compute Engine によって書き込まれます。

  • 監査対象オペレーションは何ですか? SetIamPolicy フィールドで指定されている、protoPayload.methodName の呼び出しです。監査対象オペレーションの詳細は、AuditDataprotoPayload.serviceData オブジェクトに示されています。

詳しくは、LogEntry タイプAuditLog タイプIAM AuditData タイプをご覧ください。

監査ログの取得

ログビューアの使用

ログビューアでサンプルの監査ログエントリや類似のエントリを表示するには:

  • 最初のプルダウン メニューで、監査ログを表示するリソースを選択します。上記のサンプル監査ログでは、リソースは Google project です。特定のプロジェクトを選択することも、[すべてのプロジェクト] を選択することもできます。

  • 次のメニューで、表示するログ名を選択します。管理アクティビティの監査ログには activity を選択し、データアクセス監査ログ(ログが利用できる場合)には data_access を選択します。

監査ログがログビューアに表示されます。

ログビューアの高度なフィルタ インターフェースを使用する

ログビューアの高度なフィルタ インターフェースで、フィルタを使用してリソースタイプとログ名を指定します。上記のサンプルでは、次の 2 行が高度なログフィルタです。これが機能するのはプロジェクト ID がログ名に含まれているためで、フィルタで処理が高速化されるのは logName フィールドがインデックス登録されているためです。

resource.type = "project"
logName = "projects/my-gcp-project-id/logs/cloudaudit.googleapis.com%2Factivity"

gce_instance などのリソースタイプの単一インスタンスから監査ログを検索する場合は、インスタンス修飾子を追加してください。繰り返しになりますが、このフィルタはインデックス登録されているフィールドを使用します。

resource.type = "gce_instance"
resource.instance_id = "12345678901234567890"
logName = "projects/my-gcp-project-id/logs/cloudaudit.googleapis.com%2Factivity"

以下のフィルタを使用すると、プロジェクト内のすべての監査ログ、つまり管理アクティビティとデータアクセスの両方の監査ログを一番速く取得できます。

logName = ("projects/my-gcp-project-id/logs/cloudaudit.googleapis.com%2Factivity" OR
    OR "projects/my-gcp-project-id/logs/cloudaudit.googleapis.com%2Fsystem_events"
    OR "projects/my-gcp-project-id/logs/cloudaudit.googleapis.com%2Fdata_access"
    )

フィルタの詳細については、ロギング フィルタをご覧ください。

API の使用

Stackdriver Logging API を使用して監査ログエントリを表示するには、試してみましょうのセクション (entries:list メソッドのドキュメント)をご覧ください。「試してみましょう」にあるフォームのリクエストの本文に次のものを追加します。

{
 "projectIds": [ "[PROJECT_ID]" ],
 "pageSize": 5,
 "filter": "logName : \"/logs/cloudaudit.googleapis.com\""
}

[承認して実行] をクリックします。フィルタの詳細については、ロギング フィルタをご覧ください。

監査ログエントリのサイズが大きい場合または処理に時間がかかる場合

オペレーションを非同期で実行したり、サイズの大きい AuditLog レコードが生成されたりすると、1 つの監査対象オペレーションが複数のログエントリに分割される場合があります。同じオペレーションに複数のログエントリが存在する場合、LogEntry オブジェクトに operation フィールドが含まれ、同じオペレーションのエントリの LogEntry.operation.idLogEntry.operation.producer に同じ値が設定されます。

前のスクリーンショットでは operation フィールドがありません。これは、すべての監査情報が 1 つのログエントリに記録されていることを意味します。

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

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

サービス サービスのデータ型
App Engine type.googleapis.com/google.appengine.v1.AuditData
App Engine(レガシー) type.googleapis.com/google.appengine.legacy.AuditData
BigQuery type.googleapis.com/google.cloud.bigquery.logging.v1.AuditData
Cloud IAM type.googleapis.com/google.iam.v1.logging.AuditData
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。