杉村です。Google Cloud(旧称 GCP)では Cloud Audit Logs(Cloud Audit Logging)という仕組みで、自動的に API リクエストの履歴が記録されています。しかし一部のログは有効化しなければ記録されないなど、中身を正しく理解しておく必要があります。当記事ではこの Cloud Audit Logs を解説します。
Cloud Audit Logs の基本
Cloud Audit Logs とは
Cloud Audit Logs (または Cloud Audit Logging) とは Google Cloud の API リクエスト履歴を記録する仕組みです。監査対応やトラブルシューティングに活用することができます。この仕組みにより Google Cloud で「いつ、誰が、どこから、何をしたか」が自動的に記録されます。
一部の記録はデフォルトでオンになっており、設定変更によってさらに広い範囲のログが記録されるようになります。
API リクエストとは
まず、必要な前提知識を確認します。Cloud Audit Logs は、 Google Cloud に対する API リクエストを証跡管理の目的で記録するサービスです。
ここでいう API リクエストとは何でしょうか?
Amazon Web Services (AWS) を始め、多くのパブリッククラウドはインターネットに公開された Web API で操作されるようになっています。Google Cloud もほぼ全てのリソースが Web API で操作 (閲覧/作成/更新/削除) されています。
例えば以下のような操作は全て Web API リクエストで行われています。
- VM インスタンスの閲覧、作成、起動、停止...
- Cloud Storage へのオブジェクトのList, Get, Put, Delete...
- BigQuery へのクエリ、メタデータの閲覧、更新...
コンソール画面で操作していたとしても、裏では Web ブラウザから Web API が発行されているのです。
Web API はインターネットに公開されていますが、誰でも API を叩けるわけではなく、認証・認可に Google アカウントや IAM が使われているというわけです。
ただし、以下のようなアクセスは Web API とは関係ありません。
- VM への SSH アクセス
- VM でホストされた Web サイトへの HTTP(S) アクセス
これらは VPC の機能により、接続元から VPC 内の各リソースに TCP/IP 的にリーチしています。
Cloud Audit Logs で記録できるログ
前述により Google Cloud サービスに対する Web API リクエストと、 VPC 上のアプリケーション等に対するネットワークアクセスの違いが明らかになったと思います。
Cloud Audit Logs ではリソースに対する Web API リクエストが記録されます 。
一方で VPC への TCP/IP 的なアクセスは記録されません 。
後者は サブネットの "フローログ" やアプリケーション側のログの役割です。
Cloud Audit Logs により、いつ誰が Google Cloud サービスに対して Web API リクエストを行い、リソースの 閲覧・作成・編集・削除 等を行ったかが記録されます。
こういった証跡管理は 「何かあった際の調査」「内部的犯行の抑止」「利用状況の分析」 などに効果を発揮します。
ログの出力先
Cloud Audit Logs により記録されたログは、 Google Cloud のログ管理サービスである Cloud Logging に保存されます。
Cloud Logging については以下の記事で詳細に解説していますので、ご参照ください。
Cloud Audit Logs の詳細
Cloud Audit Logs の料金
Cloud Audit Logs の料金は、監査ログの種類ごとに異なります。
デフォルトで出力されるログについては、デフォルトの保存期間内であれば無料です。
明示的に有効化するログや、デフォルトを超えて保存するログに関しては、ログが出力される先の Cloud Logging 等の料金が適用されます。
4 つの監査ログ
Cloud Audit Logs では前述の通り、 Google Cloud サービスに対する Web API リクエストの履歴が記録されますが、その中にもいくつかの種類があります。
ログ種類の中にはデフォルトで有効化されているものもあれば、任意で利用者が有効化する必要があるものもあります。
No | 名称 | 説明 | 料金 | デフォルト |
---|---|---|---|---|
1 | 管理アクティビティ監査ログ (Admin Activity audit logs) | リソースに対する管理的な更新系の API リクエストが記録される | 無料 | 有効 (無効化できない) |
2 | データアクセス監査ログ (Data Access audit logs) | データに対する更新系・読み取り系の API リクエストが記録される。有効化するとログ容量が大きくなる可能性があるため注意 | 有料 | 無効 (BigQueryのみデフォルト有効) |
3 | システム イベント監査ログ (System Event audit logs) | ユーザではなくGoogle Cloudサービスによって行われたリソース構成変更が記録される | 無料 | 有効 (無効化できない) |
4 | ポリシー拒否監査ログ (Policy Denied audit logs) | VPC Service Controls 機能で拒否された API リクエストが記録される | 有料 | 有効 (除外フィルタ設定可能) |
参考: Cloud Audit Logs
No 1. 管理アクティビティ監査ログ
表の No 1 の管理アクティビティ監査ログは、デフォルトで有効化されています。
管理アクティビティ監査ログでは主要な更新系の API ログが記録されます。
Compute Engine のインスタンスが作成されたり、 Cloud Storage のバケットが作成・削除されたりした際に、ログが出力されます。
更新系操作は重要度が高いため、デフォルトで有効となっています。無効化できませんが、お金もかかりません。
No 2. データアクセス監査ログ
No 2 のデータアクセス監査ログは、細かいデータの読み取り系・更新系のログが記録されます。BigQuery を除きデフォルトではオフになっています。一般的に、データの更新・読み取りアクセスは書き込みに比べて頻度が多いことから、ログデータ量が大きくなる可能性があります。
例として、Cloud Storage のオブジェクトの作成・削除・オブジェクトの一覧表示・オブジェクト取得などがあります。どのオペレーションがデータアクセス監査ログに当たるかは、サービスごとのドキュメントに記載されています。
Google Cloud サービス単位で有効化することができますが、ログの取り込み量・保存量・期間に応じて料金が発生します。利用料金は Cloud Logging の料金が適用されます。
- 参考 : Cloud Logging の料金概要
多額の利用料金が発生する可能性もあるため、特に重要なデータを扱う可能性があるサービスを選定し、必要性とコストのトレードオフを検討してから有効化しましょう。
例えば、機密データが保存されている Cloud Storage バケットを置いてあるプロジェクトのみ有効化する、などです。
No 3. システム イベント監査ログ
利用者のアクションではなく、 Google のサービス側のアクションによりリソースに変更があった際の記録がされます。
デフォルトで記録され、無効化できません。料金も発生しません。
No 4. ポリシー拒否監査ログ
VPC Service Controls のポリシーが違反されたときに記録されます。
有料ですが、 除外フィルタ設定 により記録されるログをフィルタして料金を節約することができます。
ログの保存期間
デフォルトで有効化されている監査ログは組織・各フォルダ・各プロジェクトに初めから存在する ログバケット である _Required
に保存され、 400日間 保持されます。
ログバケットとは、Cloud Loggingサービスのログを保存する独自の保存領域であり、Cloud Storageバケットとは名前が似ていますが別物です。
ログバケット _Required の保存期間は変更することができないため、400日以上の保存期間が要求される場合は、 Cloud Logging で新しい シンク (※) を作成して長い保存期間を設定したログバケットやCloud Storageバケット、BigQuery等にログを保存することになります。
(※ シンク: Cloud Logging の設定であり Cloud Logging に送られてきたログの行き先をフィルタに応じてルーティングするための設定 )
またデータアクセス監査ログは単純に有効化すると _Default
ログバケットに保存され、このデフォルトの保持期間は30日間です。
より長い保存期間が求められる場合、 _Default
ログバケットの保存期間を変更するか、新しいシンクを作成してください。
(応用編) 監査ログの集約
集約の必要性
前述の通り、デフォルトでは監査ログは組織・各フォルダ・各プロジェクトのログバケット _Required に保存されます。
以下のような要件がある場合、 ログ集約用のプロジェクト を作成し、その中にログ集約用ログバケットを作成して、組織レベルで 集約シンク を作成することで、組織配下の全ての監査ログを一か所に集約することができます。
- 複数プロジェクトのログを集約してSIEMツール等で分析する必要がある場合
- 監査などの理由で監査ログを第三者に提出する必要がある場合
- 複数プロジェクトを横断して監査ログをクエリする必要がある場合
ただしこの場合、新しいログバケットへのデータ取り込みに対して、ログの取り込み量・保存量・期間に応じて料金が発生する点に留意しましょう。
設定手順
設定手順は以下を参考にします。
上記ドキュメントの設定手順は以下のような流れとなっています。
- ログを保存するためのログバケットを作成
- 組織レベルでシンクを作成
- シンク用のサービスアカウントに IAM ロールを設定
難しい手順ではありませんが、 IAM ロールを付与するプロジェクトを間違えないように注意しましょう。
また、場合によってはログのボリュームが膨大になり利用料金がかさむため、必要に応じて最小限のログが収集されるよう フィルタ設定を検討しましょう。
杉村 勇馬 (記事一覧)
執行役員 CTO / クラウドソリューション部 部長
元警察官という経歴を持つ現 IT エンジニア。クラウド管理・運用やネットワークに知見。AWS 12資格、Google Cloud認定資格11資格。X (旧 Twitter) では Google Cloud や AWS のアップデート情報をつぶやいています。
Follow @y_sugi_it