このページでは、Cloud Audit Logs の一部として Compute Engine によって作成される監査ログについて説明します。
概要
Google Cloud サービスにより監査ログが書き込まれ、Google Cloud リソース内で「誰が、いつ、どこで、何をしたか」を確認できます。
Google Cloud プロジェクトで記録されるのは、その Google Cloud プロジェクト内に直接存在するリソースの監査ログのみです。フォルダ、組織、請求先アカウントなど、その他の Google Cloud リソースには、そのエンティティ自体の監査ログが記録されます。
Cloud Audit Logs の概要については、Cloud Audit Logs の概要をご覧ください。監査ログ形式の詳細については、監査ログについてをご覧ください。
利用可能な監査ログ
Compute Engine では、次の種類の監査ログを使用できます。
-
管理アクティビティ監査ログ
メタデータまたは構成情報を書き込む「管理書き込み」オペレーションが含まれます。
管理アクティビティ監査ログは無効にできません。
-
データアクセス監査ログ
メタデータまたは構成情報を読み取る「管理読み取り」オペレーションが含まれます。ユーザー提供データの読み取りまたは書き込みを行う「データ読み取り」オペレーションと「データ書き込み」オペレーションも含まれます。
データアクセス監査ログを受信するには、監査ログを明示的に有効にする必要があります。
-
システム イベント監査ログ
リソースの構成を変更する自動化された Google Cloud アクションを特定します。
システム イベント監査ログは無効にできません。
監査ログタイプの詳細については、監査ログのタイプをご覧ください。
監査対象のオペレーション
次の表は、Compute Engine の各監査ログタイプに対応する API オペレーションをまとめたものです。
監査ログのカテゴリ | サブタイプ | Compute Engine オペレーション | 例 |
---|---|---|---|
管理アクティビティ監査ログ | 該当なし |
|
|
データアクセス監査ログ1 | ADMIN_READ |
|
|
DATA_READ |
シリアルポート コンソールの内容の取得 | compute.instance.getSerialPortOutput |
|
システム イベント監査ログ | 該当なし |
|
|
1データアクセス監査ログ: 他のサービスの監査ログとは異なり、Compute Engine は ADMIN_READ
データアクセス ログのみを提供し、通常は DATA_READ
ログと DATA_WRITE
ログを提供しません。これは、DATA_READ
ログと DATA_WRITE
ログが Cloud Storage、Spanner、Cloud SQL などのユーザーデータを保存して管理するサービスにのみ使用され、Compute Engine には適用されないためです。ただし、instance.getSerialPortOutput
メソッドは VM インスタンスから直接データを読み取り、DATA_READ
ログを生成するため、上記のルールの例外となります。
2シリアルポート接続 / 切断: シリアル コンソール監査ログの詳細については、シリアル コンソール監査ログの表示をご覧ください。
監査ログでのデータ削除
監査ログには、実行された API アクションのリクエスト データとレスポンス データが記録されます。ただし、次のような場合には、リクエスト情報やレスポンス情報が利用できなくなるか、削除されます。
instance.setMetadata
とproject.setCommonInstanceMetadata
API リクエストの場合、リクエスト本文のメタデータで送信された機密情報がログに記録されないように、そのメタデータ部分が削除されます。- SSL 証明書の秘密鍵やディスクに対する顧客指定の暗号鍵など、機密性の高い項目はリクエストから削除されます。
- 取得と一覧表示のレスポンスの場合、個人情報がログに記録されないように、レスポンス本文が削除されます。
監査ログ形式
監査ログエントリには、次のオブジェクトが含まれます。
ログエントリ自体。
LogEntry
タイプのオブジェクトです。よく使用されるフィールドは次のとおりです。logName
には、リソース ID と監査ログの種類が含まれます。resource
には、監査対象オペレーションのターゲットが含まれます。timeStamp
には、監査対象オペレーションの時間が含まれます。protoPayload
には、監査対象の情報が含まれます。
監査ロギングデータ。ログエントリの
protoPayload
フィールドに保持されるAuditLog
オブジェクトです。任意のサービス固有の監査情報。サービス固有のオブジェクトです。前のインテグレーションでは、このオブジェクトは
AuditLog
オブジェクトのserviceData
フィールドに保持されています。後のインテグレーションでは、metadata
フィールドを使用します。
これらのオブジェクトのその他のフィールドと、その解釈方法については、監査ログについてをご覧ください。
ログ名
Cloud Audit Logs のログ名には、監査ログを所有する Google Cloud プロジェクトまたは他の 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 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
サービス名
Compute Engine 監査ログでは、次のサービス名が使用されます。
compute.googleapis.com
ssh-serialport.googleapis.com
oslogin.googleapis.com
すべての Cloud Logging API サービス名とそれに対応するモニタリング対象リソースタイプの一覧については、サービスとリソースのマッピングをご覧ください。
リソースタイプ
Compute Engine 監査ログには次のリソースタイプが使用されます。
リソースタイプの分類 | 説明 | 例 |
---|---|---|
API リソース | このリソースは API オペレーションをログに記録します。 | api |
監査対象リソース | このリソースは Google Cloud オペレーションをログに記録します。監査対象リソースタイプは、ほとんどの場合、他のカテゴリに該当しない新しいオペレーションに使用されます。 | audited_resource |
オートスケーラー | このリソースは、オートスケーラーのオペレーションを記録します。 | autoscaler |
Deployment リソース | このリソースはデプロイ オペレーションをログに記録します。 | deployment |
Cloud Deployment Manager リソース(deployment_manager_* ) |
このリソースは Cloud Deployment Manager オペレーションをログに記録します。
|
|
Compute Engine リソース(gce_* ) |
このリソースは Compute Engine オペレーションをログに記録します。
|
|
ネットワーク セキュリティ リソース | このリソースはネットワーク セキュリティ ポリシー オペレーションをログに記録します。 | network_security_policy |
Cloud VPN リソース(vpn_* ) |
このリソースは Cloud VPN オペレーションをログに記録します。 |
|
Cloud Logging でモニタリングされるすべてのリソースタイプのリストと記述情報については、モニタリング対象リソースタイプをご覧ください。
呼び出し元の ID
呼び出し元の IP アドレスは、AuditLog
オブジェクトの RequestMetadata.caller_ip
フィールドに保持されます。Logging は、特定の呼び出し元の ID と IP アドレスを秘匿化する場合があります。
監査ログで秘匿化される情報については、監査ログの呼び出し元の ID をご覧ください。
監査ロギングの有効化
システム イベント監査ログは常に有効になっています。無効にすることはできません。
管理アクティビティ監査ログは常に有効になっています。無効にすることはできません。
データアクセス監査ログはデフォルトで無効になっており、明示的に有効にしない限り書き込まれません(例外は BigQuery のデータアクセス監査ログで、これは無効にすることができません)。
データアクセス監査ログの一部またはすべてを有効にする方法については、データアクセス監査ログを有効にするをご覧ください。
権限とロール
IAM の権限とロールにより、Google Cloud リソース内の監査ログデータにアクセス可能かどうか判断されます。
ユースケースに適用する Logging 固有の権限とロールを決定する際は、次の点を考慮してください。
ログ閲覧者のロール(
roles/logging.viewer
)は、管理アクティビティ、ポリシー拒否、システム イベントの監査ログに対する読み取り専用権限を付与します。このロールしかない場合は、_Default
バケット内のデータアクセス監査ログを閲覧できません。プライベート ログ閲覧者のロール(
(roles/logging.privateLogViewer
)には、roles/logging.viewer
に含まれる権限に加えて、_Default
バケット内のデータアクセス監査ログの読み取り権限が含まれます。これらのプライベート ログがユーザー定義バケットに保存されている場合、それらのバケット内のログを読み取る権限を持つユーザーは、プライベート ログを読み取ることができます。ログバケットの詳細については、転送とストレージの概要をご覧ください。
監査ログデータに適用される IAM の権限とロールの詳細については、IAM を使用したアクセス制御をご覧ください。
ログを表示
すべての監査ログに対してクエリを実行することも、監査ログ名でログをクエリすることもできます。監査ログ名には、Google Cloud プロジェクト、フォルダ、請求先アカウント、または監査ロギング情報を表示する組織のリソース識別子が含まれています。クエリでは、インデックス付きの LogEntry
フィールドを指定できます。SQL クエリをサポートする [ログ分析] ページを使用する場合は、クエリ結果をグラフとして表示できます。
ログのクエリの詳細については、次のページをご覧ください。
Google Cloud コンソール、Google Cloud CLI、または Logging API を使用して、Cloud Logging で監査ログを表示できます。コンソール
Google Cloud コンソールでは、ログ エクスプローラを使用して、Google Cloud プロジェクト、フォルダ、または組織の監査ログエントリを取得できます。
-
Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。
検索バーを使用してこのページを検索する場合は、小見出しが「Logging」の結果を選択します。
既存の Google Cloud プロジェクト、フォルダ、または組織を選択します。
すべての監査ログを表示するには、次のいずれかのクエリを [クエリエディタ] フィールドに入力し、[クエリを実行] をクリックします。
logName:"cloudaudit.googleapis.com"
protoPayload."@type"="type.googleapis.com/google.cloud.audit.AuditLog"
特定のリソースと監査ログタイプの監査ログを表示するには、[クエリビルダー] ペインで次の操作を行います。
リソースタイプに、表示する監査ログを含む Google Cloud リソースを選択します。
[ログ名] で、表示する監査ログタイプを選択します。
- 管理アクティビティ監査ログの場合は、[activity] を選択します。
- データアクセス監査ログの場合は、[data_access] を選択します。
- システム イベント監査ログの場合は、[system_event] を選択します。
- ポリシー拒否監査ログの場合は、[policy] を選択します。
[クエリを実行] をクリックします。
これらのオプションが表示されない場合、Google Cloud プロジェクト、フォルダ、または組織で利用可能なその種類の監査ログは存在しないことを意味します。
ログ エクスプローラでログを表示する際に問題が発生した場合は、トラブルシューティングの情報をご覧ください。
ログ エクスプローラを使用したクエリの詳細については、ログ エクスプローラでクエリを作成するをご覧ください。 Gemini を使用してログ エクスプローラでログエントリを要約する方法については、Gemini の支援を使用してログエントリを要約するをご覧ください。
gcloud
Google Cloud CLI は、Logging API へのコマンドライン インターフェースを提供します。ログ名ごとに有効なリソース識別子を指定します。たとえば、クエリに PROJECT_ID が含まれている場合、指定するプロジェクト ID は、現在選択された Google Cloud プロジェクトを参照している必要があります。
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
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
をご覧ください。
API
クエリを作成するときは、ログ名ごとに有効なリソース識別子を指定します。たとえば、クエリに PROJECT_ID が含まれている場合、指定するプロジェクト ID は、現在選択された Google 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" }
[実行] をクリックします。
サンプルクエリ
Compute Engine の監査ログを確認するには、ログ エクスプローラで次のクエリを使用します。
クエリ名 | 式 |
---|---|
ホスト エラー | resource.type="gce_instance" protoPayload.serviceName="compute.googleapis.com" (protoPayload.methodName:"compute.instances.hostError" OR operation.producer:"compute.instances.hostError") log_id("cloudaudit.googleapis.com/system_event") resource.labels.instance_id="INSTANCE_ID" severity="INFO" |
ホスト メンテナンス | resource.type="gce_instance" protoPayload.serviceName="compute.googleapis.com" (protoPayload.methodName:"OnHostMaintenance" OR operation.producer:"OnHostMaintenance") log_id("cloudaudit.googleapis.com/system_event") resource.labels.instance_id="INSTANCE_ID" severity=INFO |
ホストが移行されました | resource.type="gce_instance" protoPayload.serviceName="compute.googleapis.com" (protoPayload.methodName:"compute.instances.migrateOnHostMaintenance" OR operation.producer:"compute.instances.migrateOnHostMaintenance") log_id("cloudaudit.googleapis.com/system_event") resource.labels.instance_id="INSTANCE_ID" severity=INFO |
インスタンスが終了またはプリエンプトされました | resource.type="gce_instance" protoPayload.methodName=~"compute.instances.(guestTerminate|preempted)" log_id("cloudaudit.googleapis.com/activity") resource.labels.instance_id="INSTANCE_ID" |
インスタンスがゲスト OS によって終了されました | resource.type="gce_instance" protoPayload.serviceName="compute.googleapis.com" (protoPayload.methodName:"compute.instances.guestTerminate" OR operation.producer:"compute.instances.guestTerminate") log_id("cloudaudit.googleapis.com/system_event") resource.labels.instance_id="INSTANCE_ID" severity=INFO |
インスタンスはホスト メンテナンス時に終了しました | resource.type="gce_instance" protoPayload.serviceName="compute.googleapis.com" (protoPayload.methodName:"compute.instances.terminateOnHostMaintenance" OR operation.producer:"compute.instances.terminateOnHostMaintenance") log_id("cloudaudit.googleapis.com/system_event") resource.labels.instance_id="INSTANCE_ID" severity=INFO |
インスタンスを作成しました | resource.type="gce_instance" protoPayload.methodName:"compute.instances.insert" log_id("cloudaudit.googleapis.com/activity") protoPayload.request.name="INSTANCE_NAME" |
インスタンス名が削除されました | resource.type="gce_instance" protoPayload.methodName:"compute.instances.delete" log_id("cloudaudit.googleapis.com/activity") protoPayload.resourceName:"INSTANCE_NAME" |
インスタンス ID が削除されました | resource.type="gce_instance" protoPayload.methodName:"compute.instances.delete" log_id("cloudaudit.googleapis.com/activity") resource.labels.instance_id="INSTANCE_ID" |
インスタンスが再起動しました | resource.type="gce_instance" protoPayload.methodName=~ "compute.instances.(stop|reset|automaticRestart| guestTerminate|instanceManagerHaltForRestart)" (log_id("cloudaudit.googleapis.com/activity") OR log_id("cloudaudit.googleapis.com/system_event")) resource.labels.instance_id="INSTANCE_ID" |
永続ディスクが作成されました | resource.type="gce_disk" protoPayload.methodName:"compute.disks.insert" log_id("cloudaudit.googleapis.com/activity") protoPayload.request.name="PD_NAME" |
永続ディスクが削除されました | resource.type="gce_disk" protoPayload.methodName:"compute.disks.delete" log_id("cloudaudit.googleapis.com/activity") protoPayload.resourceName="PD_NAME" |
単一テナントノードに追加されたノード | resource.type="gce_node_group" log_id("cloudaudit.googleapis.com/activity") protoPayload.methodName=~("compute.nodeGroups.addNodes" OR "compute.nodeGroups.insert") resource.labels.node_group_id="NODE_GROUP_ID" |
単一テナントノードでのイベントの自動スケール | resource.type="gce_node_group" log_id("cloudaudit.googleapis.com/system_event") protoPayload.methodName=~("compute.nodeGroups.deleteNodes" OR "compute.nodeGroups.addNodes") resource.labels.node_group_id="NODE_GROUP_ID" |
スナップショットが手動で取得されました | resource.type="gce_disk" log_id("cloudaudit.googleapis.com/activity") protoPayload.methodName:"compute.disks.createSnapshot" protoPayload.request.sourceDisk:"PD_NAME" protoPayload.request.name="SNAPSHOT_NAME" |
スケジュール設定されたスナップショットが取得されました | resource.type="gce_disk" log_id("cloudaudit.googleapis.com/system_event") protoPayload.methodName="ScheduledSnapshots" protoPayload.response.operationType="createSnapshot" protoPayload.response.targetLink="PD_NAME" |
スナップショットが手動で削除されました | resource.type="gce_snapshot" log_id("cloudaudit.googleapis.com/activity") protoPayload.methodName:"compute.snapshots.delete" protoPayload.resourceName:"SNAPSHOT_NAME" |
スナップショット スケジュールが作成されました | resource.type="gce_resource_policy" log_id("cloudaudit.googleapis.com/activity") protoPayload.methodName:"compute.resourcePolicies.insert" protoPayload.request.name="SCHEDULE_NAME" |
スナップショット スケジュールを削除しました | resource.type="gce_resource_policy" log_id("cloudaudit.googleapis.com/activity") protoPayload.methodName:"compute.resourcePolicies.delete" protoPayload.request.name="SCHEDULE_NAME" |
スナップショット スケジュールが添付されました | resource.type="gce_disk" log_id("cloudaudit.googleapis.com/activity") protoPayload.methodName:"compute.disks.addResourcePolicies" protoPayload.request.resourcePolicys:"SCHEDULE_NAME" protoPayload.resourceName:"PD_NAME" |
スナップショット スケジュールが切断されました | resource.type="gce_disk" log_id("cloudaudit.googleapis.com/activity") protoPayload.methodName:"compute.disks.removeResourcePolicies" protoPayload.request.resourcePolicys:"SCHEDULE_NAME" protoPayload.resourceName:"PD_NAME" |
インスタンス グループからインスタンスが削除または追加されました | resource.type="gce_instance_group" protoPayload.methodName:"compute.instanceGroups.*" log_id("cloudaudit.googleapis.com/activity") resource.labels.instance_group_name="INSTANCE_GROUP_NAME" |
マネージド インスタンス グループに対してインスタンス テンプレートが設定または更新されました | resource.type="gce_instance_group_manager" log_id("cloudaudit.googleapis.com/activity") protoPayload.methodName="v1.compute.instanceGroupManagers.setInstanceTemplate" resource.labels.instance_group_manager_name="INSTANCE_GROUP_NAME" |
マネージド インスタンス グループのオートスケーラーのスケールインとスケールアウト | resource.type="autoscaler" resource.labels.project_id="PROJECT" resource.labels.autoscaler_name="AUTOSCALER_NAME" |
ファイアウォール ルールが削除されました | resource.type="gce_firewall_rule" AND log_id("cloudaudit.googleapis.com/activity") AND protoPayload.methodName:"firewalls.delete" |
サンプルクエリを使用するには、次のようにします。
変数を独自のプロジェクト情報に置き換えてから、クリップボード アイコン content_copy を使用して式をコピーします。
-
Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。
検索バーを使用してこのページを検索する場合は、小見出しが「Logging」の結果を選択します。
[クエリを表示] を有効にしてクエリエディタ フィールドを開き、式をクエリエディタ フィールドに貼り付けます。
[クエリを実行] をクリックします。クエリに一致するログが [クエリ結果] ペインに一覧表示されます。
監査ログを転送する
他の種類のログと同様に、サポートされている宛先に監査ログを転送できます。監査ログを転送する理由を以下に示します。
監査ログを長期間保持する場合や、より強力な検索機能を使用する場合は、監査ログのコピーを Cloud Storage、BigQuery、または Pub/Sub に転送します。Pub/Sub を使用すると、他のアプリケーション、他のリポジトリ、サードパーティ製品に転送できます。
組織全体の監査ログを管理するには、組織内の一部またはすべての Google Cloud プロジェクトからログを転送できる集約シンクを作成します。
- 有効にしたデータアクセス監査ログが原因で Google Cloud プロジェクト数がログ割り当てを超過している場合は、データアクセス監査ログを Logging から除外するシンクを作成できます。
ログの転送手順については、サポートされている宛先にログを転送するをご覧ください。
料金
料金の詳細については、Cloud Logging の料金概要をご覧ください。