このページでは、Cloud Audit Logs のログエントリの構造、読み取り方法、解釈方法など、Cloud Audit Logs ログエントリの詳細について説明します。
Cloud Audit Logs では、 Cloud de Confiance プロジェクト、フォルダ、組織ごとに以下の監査ログが保存されます。
- 管理アクティビティ監査ログ
- データアクセス監査ログ
- システム イベント監査ログ
- ポリシー拒否監査ログ
Cloud Audit Logs の概要については、Cloud Audit Logs をご覧ください。
監査ログエントリの形式
監査ログエントリは、Cloud Logging ログエントリの一種です。すべての Logging ログエントリと同様に、監査ログエントリは LogEntry オブジェクトに格納されます。監査ログエントリと他のログエントリを区別するのが protoPayload フィールドです。監査ログエントリには、ログエントリの protoPayload フィールドに AuditLog 監査ログデータを格納するオブジェクトが含まれています。
つまり、すべての監査ログエントリには次の情報が保存されます。
- ログエントリを所有するプロジェクト、フォルダ、または組織。
- ログエントリが適用されるリソース。この情報は、モニタリング対象リソースリストのリソースタイプと、特定のインスタンスを表す値で構成されます。たとえば、単一の Compute Engine VM インスタンスまたはすべての VM インスタンスからの監査ログエントリを表示できます。
- タイムスタンプ
サービス: サービスは、Compute Engine、Cloud SQL、Pub/Sub などの個々の Cloud de Confiance プロダクトです。各サービスは名前で識別されます。Compute Engine は
compute.googleapis.com、Cloud SQL はcloudsql.googleapis.comなどです。この情報は、監査ログエントリのprotoPayload.serviceNameフィールドにリストされます。リソースタイプは単一のサービスに属しますが、サービスは複数のリソースタイプを持つことができます。サービスとリソースのリストについては、サービスとリソースのマッピングをご覧ください。
ペイロード。
protoPayload型になります。各監査ログエントリのペイロードは、AuditLogタイプのオブジェクトで、serviceNameとauthenticationInfoといった、Cloud Audit Logs に固有の一連のフィールドを定義します。また、 Cloud de Confiance by S3NS サービスで監査ログエントリ内のサービス固有情報をリストするために使用される、オプション フィールドのmetadataも含まれています。一部の Cloud de Confiance 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
課金アカウント、プロジェクト、フォルダ、組織内では、これらのログ名は通常、activity、data_access、system_event、policy と省略されます。
監査ログエントリの例
ここではサンプルの監査ログエントリを使用して、監査ログエントリに記述されている最も重要な情報を見つける方法について説明します。
次のサンプルは、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"
サンプル監査ログエントリの解釈
上記の監査ログエントリの例に示されている 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オブジェクトをご覧ください。監査対象のリソースは何なのか? Cloud de Confiance プロジェクト
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.id と LogEntry.operation.producer の両方に同じ値が設定されます。最初に書き込まれたログエントリには LogEntry.operation.first=true、完了のログエントリには LogEntry.operation.last=true が含まれます。
オペレーションがすぐに完了するか失敗した場合、LogEntry.operation.first=true と LogEntry.operation.last=true の両方を含むログエントリは 1 つだけです。
一部のサービスでは、オペレーションが失敗しても LogEntry.operation フィールドに値が入力されません。ただし、サービスの監査ロギングに関するドキュメントを参照すると、長時間実行オペレーションを特定できます。
これらの API にはオペレーション サービスが実装されています。通常、このサービスは呼び出されたときに監査ログエントリを出力します。呼び出される API に応じて、protoPayload.methodName は次のいずれかになります。
google.longrunning.Operations.ListOperationsgoogle.longrunning.Operations.GetOperationgoogle.longrunning.Operations.CancelOperationgoogle.longrunning.Operations.WaitOperationgoogle.longrunning.Operations.DeleteOperation
この API は長時間実行オペレーションに関するメタデータを返しますが、長時間実行オペレーション自体ではありません。この場合は LogEntry.operation は指定されません。
監査対象の API の詳細については、監査ログを備えたCloud de Confiance by S3NS サービスをご覧ください。サービスによって異なる場合があります。
ストリーミング API の監査ログ
長時間実行オペレーションと同様に、ストリーミング API では監査ログエントリが 2 回出力されます。1 回は API が最初に呼び出されたときで、もう 1 回はストリーミング接続が終了したときです。
この場合、LogEntry オブジェクトには operation フィールドが含まれ、同じオペレーションのログエントリの LogEntry.operation.id と LogEntry.operation.producer の両方に同じ値が設定されます。最初に書き込まれるログには LogEntry.operation.first=true、完了ログには LogEntry.operation.last=true が含まれます。
この API では、ストリームが開始している状態であることを示すために、LogEntry.operation.first と LogEntry.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 |
監査ログの表示
すべての監査ログに対してクエリを実行することも、監査ログ名でログをクエリすることもできます。監査ログ名には、監査ロギング情報を表示する Cloud de Confiance プロジェクト、フォルダ、請求先アカウント、または組織のリソース識別子が含まれています。クエリでは、インデックス付きの LogEntry フィールドを指定できます。ログのクエリの詳細については、ログ エクスプローラでクエリを作成するをご覧ください。
ほとんどの監査ログは、Cloud de Confiance コンソール、Google Cloud CLI、または Logging API を使用して Cloud Logging で表示できます。ただし、課金に関連する監査ログの場合は、Google Cloud CLI または Logging API のみを使用できます。
コンソール
Cloud de Confiance コンソールでは、ログ エクスプローラを使用して、 Cloud de Confiance プロジェクト、フォルダ、または組織の監査ログエントリを取得できます。
-
Cloud de Confiance コンソールで [ログ エクスプローラ] ページに移動します。
このページを検索バーで検索する場合は、小見出しが「Logging」の結果を選択します。
既存の Cloud de Confiance プロジェクト、フォルダ、または組織を選択します。
すべての監査ログを表示するには、次のいずれかのクエリを [クエリエディタ] フィールドに入力し、[クエリを実行] をクリックします。
logName:"cloudaudit.googleapis.com"
protoPayload."@type"="type.googleapis.com/google.cloud.audit.AuditLog"
特定のリソースと監査ログタイプの監査ログを表示するには、[クエリビルダー] ペインで次の操作を行います。
[リソースタイプ] で、表示する監査ログを含む Cloud de Confiance リソースを選択します。
[ログ名] で、表示する監査ログタイプを選択します。
- 管理アクティビティ監査ログの場合は、[activity] を選択します。
- データアクセス監査ログの場合は、[data_access] を選択します。
- システム イベント監査ログの場合は、[system_event] を選択します。
- ポリシー拒否監査ログの場合は、[policy] を選択します。
[クエリを実行] をクリックします。
これらのオプションが表示されない場合、 Cloud de Confiance プロジェクト、フォルダ、または組織で利用可能なその種類の監査ログは存在しないことを意味します。
ログ エクスプローラでログを表示する際に問題が発生した場合は、トラブルシューティングの情報をご覧ください。
ログ エクスプローラを使用したクエリの詳細については、ログ エクスプローラでクエリを作成するをご覧ください。
gcloud
Google Cloud CLI は、Logging API へのコマンドライン インターフェースを提供します。ログ名ごとに有効なリソース識別子を指定します。たとえば、クエリに PROJECT_ID が含まれている場合、指定するプロジェクト ID は、現在選択されたCloud de Confiance プロジェクトを参照している必要があります。
Cloud de Confiance プロジェクト レベルの監査ログエントリを読み取るには、次のコマンドを実行します。
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 メソッドを使用します。