📊 Google Cloud Audit Logs
完全ガイド

クラウド上の全ての操作を記録する仕組み。いつ、誰が、何をしたかを5分で理解する

🎯なぜ監査ログが必要なのか

クラウド環境では、物理的なアクセスログや操作履歴が見えません。誰がいつ何をしたかを追跡できなければ、セキュリティインシデントが発生した時に原因を特定できず、コンプライアンス要件も満たせません。

🔍 不透明性の問題

オンプレミスと違い、クラウドでは「誰が操作したか」が目に見えない。リソースが突然削除されても、犯人が分からない状態になる。

⚖️ コンプライアンス要件

PCI DSS、HIPAAなどの法令や規制では、システムへのアクセス記録の保持が義務付けられている。監査証跡がないと法的要件を満たせない。

🛡️ セキュリティインシデント対応

不正アクセスや情報漏洩が発生した際、「何が起こったのか」を事後調査できなければ、被害範囲の特定も再発防止もできない。

📝監査ログが記録する情報

Google Cloud Audit Logsは、Google CloudへのAPI呼び出しを記録します。コンソールでボタンをクリックする操作も、gcloudコマンドも、全てAPIに変換されて実行されるため、これらの操作履歴が自動的に記録されます。

いつ (When)

操作が実行された正確な日時(タイムスタンプ)。ミリ秒単位で記録される。

👤

誰が (Who)

操作を実行したユーザーのメールアドレスまたはサービスアカウント。認証情報が含まれる。

🌐

どこから (Where)

リクエスト元のIPアドレス。外部からのアクセスか内部ネットワークからかを識別できる。

⚙️

何をしたか (What)

実行されたAPIメソッド名、対象リソース、操作の結果(成功/失敗)が記録される。

具体例: ユーザー「user@example.com」が、2026年1月26日 10:30:45に、IPアドレス「203.0.113.5」から、VMインスタンス「web-server-01」を削除した、という情報が全て記録されます。

📂4種類のログタイプの違い

Google Cloud Audit Logsは、記録する操作の種類によって4つのログタイプに分類されます。それぞれ有効化の必要性、保存先、料金が異なります。

🔧 管理アクティビティ監査ログ (Admin Activity)

デフォルト有効 無料

記録内容: リソースの構成やメタデータを変更する操作。つまり、何かを作成・変更・削除する全ての管理操作が対象。

具体例:
  • Compute EngineでVMインスタンスを作成
  • Cloud Storageバケットを削除
  • IAM権限を変更してユーザーに管理者権限を付与
  • ファイアウォールルールを追加

保存先: _Requiredログバケット(400日間保存、無料)

特徴: 無効化できない。Google Cloudを使う限り必ず記録される。

📊 データアクセス監査ログ (Data Access)

デフォルト無効

記録内容: ユーザーが実際のデータを読み書きする操作。BigQueryのテーブルを読む、Cloud Storageのファイルをダウンロードするなど。

具体例:
  • BigQueryでSELECTクエリを実行してデータを取得
  • Cloud Storageからファイルをダウンロード
  • Cloud SQLデータベースに接続してレコードを更新
  • Firestoreドキュメントを読み取り

保存先: _Defaultログバケット(30日間保存)

特徴: BigQuery以外はデフォルトで無効。有効化すると大量のログが生成され、料金が高額になる可能性がある。個人情報を扱うサービスなど、重要なリソースに限定して有効化するのが推奨。

⚠️ 注意: Google Cloudコンソールをブラウジングするだけでも大量の読み取りAPIが呼ばれるため、全サービスで有効化すると月額数万円〜数十万円のコストになる場合があります。

⚡ システムイベント監査ログ (System Event)

デフォルト有効 無料

記録内容: ユーザーの直接操作ではなく、Google Cloud側が自動的に実行する操作。システムの自動処理による構成変更。

具体例:
  • Auto Scalingによって自動的にVMインスタンスが追加
  • Managed Instance Groupで障害が検知され、インスタンスが自動復旧
  • SSL証明書の自動更新
  • スケジュールされたメンテナンスによるリソース移動

保存先: _Requiredログバケット(400日間保存、無料)

特徴: 無効化できない。ユーザー操作と区別して、システムの自動動作を追跡できる。

🚫 ポリシー拒否監査ログ (Policy Denied)

デフォルト有効

記録内容: IAM権限やセキュリティポリシー違反により、アクセスが拒否された操作。「権限がありません」エラーの記録。

具体例:
  • 編集権限がないユーザーがVMインスタンスを削除しようとして拒否
  • 閲覧権限のないBigQueryテーブルにアクセスして拒否
  • VPC Service ControlsでブロックされたAPIリクエスト
  • 組織ポリシーに違反する操作の試行

保存先: _Defaultログバケット(30日間保存)

特徴: 不正アクセスの試行を検知できる重要なログ。攻撃者が権限を探っている痕跡を発見できる。除外フィルタで保存を防ぐことは可能だが、セキュリティ上推奨されない。

🗄️ログの保存の仕組み

生成されたログは、Cloud Loggingの「ログバケット」という保存場所に自動的に格納されます。Google Cloudは各プロジェクトに2つのログバケットを自動作成します。

_Required バケット
保存されるログ

管理アクティビティ監査ログ
システムイベント監査ログ

保存期間

400日間(変更不可)

料金

完全無料(取り込みも保存も)

設定可否

削除・無効化・設定変更不可。必ず記録される。

用途

重要な管理操作を確実に記録し、法令順守やセキュリティ調査に使用。

_Default バケット
保存されるログ

データアクセス監査ログ
ポリシー拒否監査ログ
その他のアプリケーションログ

保存期間

30日間(変更可能、最大3,650日)

料金

取り込み: 50GiB/月まで無料
保存: 30日間無料、それ以降は有料

設定可否

保存期間を変更可能。除外フィルタで保存を制御できる。

用途

詳細なデータアクセス追跡や、短期的なトラブルシューティング。

イメージ: _Requiredバケットは「変更不可の金庫」、_Defaultバケットは「設定可能な作業用ストレージ」と考えると理解しやすいです。重要なログは金庫に確実に保管され、それ以外のログは必要に応じて保存期間や容量を調整できます。

💰料金体系の実態

Google Cloud Audit Logs自体は無料ですが、ログを保存するCloud Loggingに料金が発生します。料金は「取り込み量」と「保存量」の2つの軸で計算されます。

📥 取り込み料金

無料枠

月50GiBまで完全無料

超過料金
$0.50/GiB

月50GiBを超えた分

ログがCloud Loggingに送信された時点で課金される。一度送信されたログは削除しても料金は戻らない。

💾 保存料金

無料期間

_Requiredバケット: 無期限無料
_Defaultバケット: 30日間無料

超過料金
$0.01/GiB

30日を超えて保存する分

保存期間を延長した場合のみ発生。_Defaultバケットの保存期間を90日に設定すると、31日目〜90日目の分に課金される。

⚠️ データアクセスログの大容量化リスク

頻繁にアクセスされるCloud StorageバケットやBigQueryテーブルでデータアクセスログを有効化すると、1日で数十GiB〜数百GiBのログが生成されることがあります。

例: 1秒に100回のリクエストがあるサービスでは、1ヶ月で約260万リクエスト。1リクエストあたり2KBのログとすると、月5GiB以上のログが生成されます。これが複数のサービスで発生すると、月額料金が数万円になることも。

💡 コスト削減のポイント

  • 重要なリソースのみ有効化: 個人情報を含むバケットやテーブルなど、本当に監査が必要なリソースに限定してデータアクセスログを有効化する。
  • 除外フィルタの活用: サービスアカウントの定期的なヘルスチェックなど、ノイズとなるログを除外設定で弾く。
  • 適切な保存期間: コンプライアンス要件を満たす最小限の保存期間に設定。例えば法令で1年保存が必要なら、365日に設定。
  • 外部保存への転送: Cloud Storageに転送して長期保存することで、Loggingの保存料金を削減できる(Cloud Storageの方が安価)。

📦長期保存と活用方法

デフォルトの保存期間(管理アクティビティ400日、データアクセス30日)では不足する場合、ログを外部にエクスポートして長期保存できます。また、SIEM(セキュリティ情報イベント管理)ツールと連携することで、リアルタイムな脅威検知が可能になります。

☁️ Cloud Storage

用途: コンプライアンス対応の長期保存

JSONファイルとして保存、検索性は低いが安価
Archiveストレージクラスなら月$0.0012/GiBで10年保存可能
バケット保持ポリシーで削除を防止できる

最適な用途: 法令で義務付けられた長期保管。アクセス頻度は低いが、万が一の監査で必要になる可能性があるログ。

📊 BigQuery

用途: ログ分析とレポート作成

SQLでログを分析できる(集計、グラフ化が容易)
大量ログの高速検索が可能
Data Studioと連携してダッシュボード作成

最適な用途: セキュリティ分析。「誰が最も多く権限エラーを起こしているか」「どのリソースが最も頻繁に変更されているか」などの統計分析。

📨 Pub/Sub → SIEM

用途: リアルタイムセキュリティ監視

ログ発生から数秒でSIEMツールに転送
異常パターンを即座に検知してアラート
Splunk、Google SecOps等と統合可能

最適な用途: 攻撃の早期検知。不正なサービスアカウントキー作成、大量のアクセス拒否、機密データへの異常アクセスなどを即座に検知。

🔧 転送設定の実装

ログの転送は「ログシンク(Log Sink)」という仕組みで実現します。シンクは、特定の条件に合致するログを指定した宛先に自動転送する設定です。

設定手順の例(Cloud Storageへの転送):
  1. Cloud Storageバケットを作成(例: audit-logs-archive)
  2. Cloud Loggingでシンクを作成し、フィルタを設定
    logName:"cloudaudit.googleapis.com"
  3. 宛先にCloud Storageバケットを指定
  4. シンクのサービスアカウントに書き込み権限を付与

これにより、全ての監査ログが自動的にCloud Storageに日次でエクスポートされます。

🔍実際の活用例

監査ログは理論だけでなく、実際のセキュリティインシデントやトラブルシューティングで威力を発揮します。以下は具体的な活用シーンです。

🚨 ケース1: 不正なサービスアカウントキー作成の検知

状況: 攻撃者が侵入に成功し、永続的なアクセスのためにサービスアカウントキーを不正に作成しようとしている。

検知と対応の流れ:
  1. ログ発生: 管理アクティビティログに「google.iam.admin.v1.CreateServiceAccountKey」というメソッドが記録される
  2. リアルタイム検知: Pub/Sub経由でSIEMツールに転送され、異常パターンとしてアラートが発火
  3. 即座の対応: セキュリティチームが通知を受け、作成されたキーを即座に無効化
  4. 事後調査: ログから「誰が」「どのIPアドレスから」実行したかを特定し、侵入経路を分析

この例では、監査ログがなければ攻撃者の永続的アクセスを許してしまい、さらなる被害につながる可能性がありました。

🗑️ ケース2: 誤って削除されたリソースの原因特定

状況: 本番環境のCloud Storageバケットが突然削除され、サービスが停止。誰が削除したのか不明。

調査の流れ:
  1. ログエクスプローラで検索: 削除されたバケット名とメソッド「storage.buckets.delete」でフィルタ
  2. 実行者の特定: ログから実行者のメールアドレス「dev-user@example.com」を特定
  3. 状況確認: タイムスタンプから、深夜2:30の操作と判明。開発者に確認したところ、開発環境と間違えて削除したことが発覚
  4. 再発防止: 本番環境には削除保護を設定し、組織ポリシーで制限を追加

監査ログがなければ、誰が削除したのか特定できず、再発防止策も立てられませんでした。

🔐 ケース3: 機密データへの異常アクセスの発見

状況: 個人情報を含むBigQueryテーブルに、通常アクセスしないユーザーからアクセスがあった。

分析の流れ:
  1. データアクセスログ確認: BigQueryのデータアクセスログを有効化していたため、全てのクエリ実行が記録されていた
  2. 異常検知: 通常は特定部署のみがアクセスするテーブルに、別部署のユーザーがアクセスしたことをログ分析で発見
  3. 詳細調査: SQLクエリの内容を確認し、大量のレコードを取得していることが判明
  4. 権限見直し: そのユーザーの権限を確認し、誤って付与されていた過剰な権限を削除

データアクセスログは有料ですが、個人情報を扱うリソースでは必須の投資と言えます。

⚖️ ケース4: コンプライアンス監査への対応

状況: 外部監査で「過去1年間の全ての管理操作履歴」の提出を求められた。

対応の流れ:
  1. ログエクスポート: BigQueryに転送していた監査ログから、該当期間のログをSQLでエクスポート
  2. フォーマット整形: 必要な情報(日時、実行者、操作内容)のみを抽出してCSVレポート化
  3. 証跡の提供: 改ざん不可能な監査証跡として提出し、監査を通過

管理アクティビティログは400日間保持されるため、1年分のログが確実に残っていました。より長期の保管が必要な場合は、Cloud Storageへの転送が有効です。

⚙️設定のポイント

Google Cloud Audit Logsを効果的に活用するには、適切な設定が重要です。全てを有効化すれば安全ですが、コストが膨大になります。逆に最小限しか記録しないと、いざという時に必要な情報がありません。

💡 設定判断のフローチャート

✅ デフォルトで有効(設定不要)

  • 管理アクティビティログ: 無効化不可、無料、400日保存。全ての管理操作を自動記録。
  • システムイベントログ: 無効化不可、無料、400日保存。Google側の自動操作を記録。
  • ポリシー拒否ログ: デフォルト有効、有料(30日分無料)。権限エラーを記録。

これらは設定せずとも記録されるため、まず何もしなくても基本的な監査は機能しています。

⚠️ 手動で有効化を検討すべきもの

  • データアクセスログ(全サービス): ❌ 推奨しない。コストが膨大になる。
  • データアクセスログ(個人情報を含むリソース): ✅ 推奨。Cloud StorageやBigQueryで個人情報を扱う場合は必須。
  • データアクセスログ(機密データベース): ✅ 推奨。Cloud SQL、Firestoreで機密データを扱う場合。
  • データアクセスログ(開発環境): ⚠️ 状況次第。コスト削減のため無効化も選択肢。

📦 長期保存の判断基準

  • 法令要件がある場合: ✅ Cloud StorageまたはBigQueryに転送し、規定期間保存。
  • PCI DSS対応: ✅ 1年以上の保存が必要。Cloud Storageに転送。
  • 社内規定のみ: ⚠️ _Requiredバケットの400日で十分か確認。不足ならカスタムバケットを作成。
  • 要件なし: ❌ デフォルトの保存期間で十分。追加コストは不要。

🔔 リアルタイムアラートの判断基準

  • 本番環境: ✅ Pub/Sub + SIEMでリアルタイム監視を推奨。
  • 重要なサービスアカウント: ✅ キー作成、権限変更をアラート対象に。
  • 開発環境: ⚠️ 状況次第。頻繁な変更が多い場合はノイズになる可能性。
  • 個人プロジェクト: ❌ コスト対効果が低い。ログエクスプローラでの事後確認で十分。

🎯 推奨設定パターン

パターン1: 最小限の設定(個人/小規模プロジェクト)
  • デフォルトのまま(管理アクティビティ、システムイベント、ポリシー拒否)
  • データアクセスログは無効(コスト削減)
  • 長期保存なし(_Requiredバケットの400日で十分)
  • リアルタイムアラートなし

コスト: 無料(無料枠内)

パターン2: 標準設定(中規模ビジネス)
  • デフォルト設定に加えて、重要なリソースのみデータアクセスログ有効
  • Cloud Storageに監査ログを転送(1年保存)
  • 重要なイベント(IAM変更、キー作成)にメールアラート

コスト: 月$10〜50程度(ログ量次第)

パターン3: エンタープライズ設定(大規模/高セキュリティ要件)
  • 全サービスでデータアクセスログ有効(除外フィルタで最適化)
  • BigQueryに転送して分析基盤構築
  • Cloud Storageに7年保存(コンプライアンス対応)
  • SIEMツールと連携してリアルタイム脅威検知
  • 異常検知ルールを設定し、自動対応フローを構築

コスト: 月$100〜1000+(規模とログ量次第)

📚 参考情報源