このページでは、Cloud 監査ログのログエントリの構造、読み取り方法、解釈方法など、Cloud 監査ログのログエントリの詳細について説明します。
Cloud Audit Logs では、Cloud プロジェクト、フォルダ、組織ごとに以下の監査ログが保存されます。
- 管理アクティビティ監査ログ
- データアクセス監査ログ
- システム イベント監査ログ
- ポリシー拒否監査ログ
Cloud Audit Logging の概要については、Cloud Audit Logging をご覧ください。
監査ログエントリの形式
監査ログエントリは、Stackdriver Logging ログエントリの一種です。すべての Logging ログエントリと同様に、監査ログエントリは LogEntry
オブジェクトに格納されます。監査ログエントリと他のログエントリを区別するのが protoPayload
フィールドです。監査ログエントリには、ログエントリの protoPayload
フィールドに AuditLog
監査ログデータを格納するオブジェクトが含まれています。
つまり、すべての監査ログエントリには次の情報が保存されます。
- ログエントリを所有するプロジェクト、フォルダ、または組織。
- ログエントリが適用されるリソース。この情報は、モニタリング対象リソースリストのリソースタイプと特定のインスタンスを表す追加の値で構成されます。たとえば、単一の Compute Engine VM インスタンスまたはすべての VM インスタンスからの監査ログエントリを表示できます。
- タイムスタンプ
サービス。サービスは、Compute Engine、Cloud SQL、Pub/Sub などの個々の Google Cloud サービスです。各サービスは名前で識別されます。Compute Engine は
compute.googleapis.com
、Cloud SQL はcloudsql.googleapis.com
などです。この情報は、監査ログエントリのprotoPayload.serviceName
フィールドにリストされます。リソースタイプは単一のサービスに属しますが、サービスは複数のリソースタイプを持つことができます。サービスとリソースのリストについては、サービスとリソースのマッピングをご覧ください。
ペイロード。
protoPayload
型になります。各監査ログエントリのペイロードは、AuditLog
タイプのオブジェクトで、serviceName
とauthenticationInfo
といった、Cloud 監査ログに固有の一連のフィールドを定義します。また、一部の Google Cloud サービスで監査ログエントリ内のサービス固有情報をリストするために使用される、オプション フィールドのserviceData
も含まれています。このフィールドを使用する 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 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
プロジェクト、フォルダ、または組織内では、これらのログ名は通常、activity、data_access、system_event、policy の略です。
監査ログ エントリの例
ここではサンプルの監査ログエントリを使用して、監査ログエントリに記述されている最も重要な情報を見つける方法について説明します。
以下のサンプルは、Resource Manager によって書き込まれた管理アクティビティの監査ログエントリであり、PROJECT_ID my-gcp-project-id
で Identity and Access Management(IAM)ポリシーの変更内容が記録されています。わかりやすくするため、一部のログエントリは省略し、一部のフィールドはハイライト表示してあります。
{ 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、Cloud SDK で使用できます。プロジェクト識別子がログの名前に含まれており、logName
フィールドがインデックス付けされていることから、クエリは高速です。
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"
サンプル監査ログエントリの解釈
上記の監査ログエントリの例に示されている protoPayload
、insertId
、resource
、timestamp
、severity
と logName
のフィールドは 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.serviceData
のAuditData
オブジェクトをご覧ください。監査対象のリソースは何なのか?Google Cloud のプロジェクト
my-gcp-project-id
に関連付けられている App Engine で実行中のアプリケーションが監査対象になります。これは、リソースタイプgae_app
とプロジェクト識別子my-gcp-project-id
を指定するresource
フィールドから判断できます。この例では、モニタリング対象リソース項目リストでリソースタイプの詳細を確認できます。
詳細については、LogEntry
タイプ、AuditLog
タイプ、IAM AuditData
タイプをご覧ください。
監査ログエントリのサイズが大きい場合または処理に時間がかかる場合
オペレーションが非同期で実行される、またはサイズの大きい AuditLog
レコードが生成されると、1 つの監査対象オペレーションが複数のログエントリに分割されます。同じオペレーションに複数のログエントリが存在する場合、LogEntry
オブジェクトに operation
フィールドが含まれ、同じオペレーションのエントリの LogEntry.operation.id
と LogEntry.operation.producer
に同じ値が設定されます。
前の監査ログエントリの例では operation
フィールドがありません。これは、すべての監査情報が 1 つのログエントリに記録されていることを意味します。
サービス固有の監査データ
一部のサービスでは、監査ログの serviceData
フィールドに補足データ構造を配置することにより、AuditLog
に格納されている情報を拡張します。次の表は、serviceData
フィールドを使用するサービスをリストし、それらの AuditData
タイプへのリンクを示しています。
監査ログの表示
監査ログを検索して表示するには、監査ログ情報を表示する対象の Cloud プロジェクト、フォルダ、または組織の識別子を把握している必要があります。resource.type
などの他のインデックス付き LogEntry
フィールドをさらに指定できます。詳しくは、ログエントリの迅速な検索をご覧ください。
監査ログ名は次のようになります。名前には、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 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
監査ログエントリを表示する方法はいくつかあります。
Console
Cloud Console のログ エクスプローラを使用して、Cloud プロジェクトの監査ログエントリを取得できます。
Cloud Console で、[ロギング] > [ログ エクスプローラ] ページに移動します。
[ログ エクスプローラ] ページで、既存の Cloud プロジェクトを選択します。
[クエリビルダー] ペインで、次の操作を行います。
[リソース] で、監査ログを表示する対象の Google Cloud リソースタイプを選択します。
[ログ名] で、表示する監査ログタイプを選択します。
- 管理アクティビティ監査ログの場合は、[activity] を選択します。
- データアクセス監査ログの場合は、[data_access] を選択します。
- システム イベント監査ログの場合は、[system_event] を選択します。
- ポリシー拒否監査ログの場合は、[policy] を選択します。
これらのオプションが表示されない場合、Cloud プロジェクトにそのタイプの監査ログが存在しないことを意味します。
新しいログ エクスプローラを使用したクエリの詳細については、ログクエリの作成をご覧ください。
gcloud
gcloud
コマンドライン ツールは、Cloud Logging API へのコマンドライン インターフェースを提供します。それぞれのログ名の中で有効な PROJECT_ID
、FOLDER_ID
または ORGANIZATION_ID
を指定します。
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
gcloud
ツールの使用の詳細については、ログエントリの読み取りをご覧ください。
API
クエリを作成する場合は、変数を有効な値に置き換え、適切なプロジェクトレベル、フォルダレベル、または監査ログ名に表示されている組織レベルの監査ログ名もしくは ID を代わりに使用します。たとえば、クエリに PROJECT_ID が含まれている場合、指定するプロジェクト識別子は、現在選択された Cloud プロジェクトを参照している必要があります。
Logging API を使用して監査ログエントリを確認する手順は次のとおりです。
entries.list
メソッドのドキュメント内の [Try this API] セクションに移動します。[Try this API] フォームのリクエストの本文に、次のコードを入力します。この事前入力されたフォームをクリックすると、リクエストの本文が自動的に入力されますが、それぞれのログ名に有効な
PROJECT_ID
を指定する必要があります。{ "resourceNames": [ "projects/PROJECT_ID" ], "pageSize": 5, "filter": "logName : projects/PROJECT_ID/logs/cloudaudit.googleapis.com" }
[実行] をクリックします。
クエリの詳細については、ロギングクエリ言語をご覧ください。
監査ログエントリのサンプルと、その中にある特に重要な情報を見つける方法については、監査ログについてをご覧ください。