杉村です。Google Cloud(旧称 GCP)の証跡管理の仕組みである Cloud Audit Logs(Cloud Audit Logging)について解説します。
- Cloud Audit Logs の基本
- Cloud Audit Logs の料金
- 監査ログの種類
- ログの保存期間
- データアクセス監査ログの有効化
- 監査ログの集約
- データアクセス監査ログと Cloud Storage の認証済み URL
Cloud Audit Logs の基本
Cloud Audit Logs とは
Cloud Audit Logs とは、Google Cloud(旧称 GCP)の 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 へのクエリ、メタデータの閲覧、更新
AWS や Google Cloud を Web コンソール画面で操作したとしても、その Web 画面のバックエンドでは、Web API リクエストが発行されていると考えてください。
パブリッククラウドの Web API はインターネットに公開されていますが、誰でも API を実行できるわけではなく、IAM の仕組み等で認証・認可されていますので、セキュリティが保たれます。
Google Cloud では、各サービスごとに Web API のエンドポイントが用意されています。なおこれらの API を総称して Google Cloud API と呼びます。
一方で、以下のようなアクセスは Web API リクエストとは別です。
- VM への SSH アクセス
- VM でホストされた Web サイトへの HTTP(S)リクエスト
これらは Virtual Private Cloud(VPC)という仮想ネットワーク内の VM に対して、TCP/IP 的にリーチするアクセスですので、クラウドの Web API とは別の経路でアクセスすることになります。
Cloud Audit Logs で記録できるログ
Cloud Audit Logs では、Google Cloud API に対するリクエストが記録されます。
一方で、前の小見出しで最後に示した、VPC への TCP/IP 的なアクセスは記録されません。
後者の履歴を記録するのは、VPC の機能である VPC Flow Logs やファイアウォールログ、もしくはアプリケーション側のロギングの役割です。
Cloud Audit Logs により、いつ誰が Google Cloud サービスに対して Web API リクエストを行い、リソースの閲覧、作成、編集、削除等を行ったかが記録されます。
これらの記録は「オペレーションミスやセキュリティインシデントの事後調査」「内部的の抑止」「利用状況の分析」などに用いられます。
ログの出力先
Cloud Audit Logs により記録されたログは、 Google Cloud のログ管理サービスである Cloud Logging に保存されます。
Cloud Logging については以下の記事で詳細に解説していますので、ご参照ください。
Cloud Audit Logs の料金
Cloud Audit Logs 自体に料金は発生しません。しかし、ログの保存先である Cloud Logging の料金が発生します。
デフォルトで出力される監査ログについては、デフォルトの保存期間内であれば無料です。
明示的に有効化するログや、デフォルトを超えて保存するログに関しては、ログ出力先(保管先)となる Cloud Logging 等の料金が適用されます。
- 参考 : 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 リクエストが記録される | 有料 | 有効 (除外フィルタ設定可能) |
- 参考: 監査ログの種類
No 1. 管理アクティビティ監査ログ
管理アクティビティ監査ログは、更新系の API リクエストのことです。組織やプロジェクトで、デフォルトで有効化されています。
Compute Engine VM が作成されたり、Cloud Storage のバケットが作成・削除されたりする際に、このログが出力されます。
更新系操作は証跡管理上の重要度が高いため、デフォルトで有効となっており、400日間保存されます。無効化はできませんが、料金も発生しません。
No 2. データアクセス監査ログ
データアクセス監査ログは、データに対する読み取り系および更新系のログが記録されます。BigQuery を除き、デフォルトではオフになっています。一般的に、データの更新・読み取りアクセスは書き込みに比べて頻度が多いことから、データ量が大きくなり、利用ボリュームによっては料金が高額になる可能性があります。
BigQuery のみ、デフォルトでデータアクセス監査ログが有効化されており、無効化はできません。
データアクセス監査ログとして記録されるオペレーションの例として、Cloud Storage のオブジェクトの作成、削除、オブジェクトの一覧表示、オブジェクトの取得などがあります。どのオペレーションがデータアクセス監査ログに当たるかは、サービスごとのドキュメントに記載されています。
データアクセス監査ログは Google Cloud サービス単位で有効化することができます。有効化すると、ログの取り込み量、保存量、保存期間に応じて Cloud Logging の料金が発生します。
データの読み取りや更新の頻度が多いと、データアクセス監査ログに対して多額の利用料金が発生する可能性があるため、特に重要なデータを扱う可能性があるサービスを選定し、必要性とコストのトレードオフを検討してから有効化してください。
例として、個人情報を格納している Cloud Storage バケットが存在するプロジェクトなどで、データアクセス監査ログを有効化することを検討します。
また、Cloud Logging の除外フィルタ設定により、記録されるログをフィルタすることで料金を節約することができます。
- 参考 : 除外フィルタ
No 3. システム イベント監査ログ
システム イベント監査ログは、人間のユーザーによる API リクエストではなく、 Google Cloud サービス側のリクエストによりリソースに変更があった際に記録されます。
システム イベント監査ログはデフォルトで有効化されており、無効化はできません。また、料金も発生しません。
No 4. ポリシー拒否監査ログ
ポリシー拒否監査ログは、VPC Service Controls のポリシーが違反されたときに記録されるログです。
ポリシー拒否監査ログの記録と保存には Cloud Logging 料金が発生します。料金を節約したい場合、Cloud Logging の除外フィルタ設定によるフィルタを検討してください。
VPC Service Controls については、以下をご参照ください。
ログの保存期間
デフォルトで有効化されている監査ログは、組織、各フォルダ、各プロジェクトにデフォルトで存在するログバケット _Required
に保存され、400日間保持されます。
ログバケットとは、ログを保存するための Cloud Logging 専用ストレージであり、Cloud Storage バケットとは名前が似ていますが、別物です。
_Required
ログバケットの保存期間は変更することができないため、400日間以上ログを保持したい場合、Cloud Logging でシンク(ログを選別して保存先へルーティングするための仕組み)を作成して、より長い保存期間を設定した別のログバケットや Cloud Storage バケット、BigQuery 等にログを保存します。
また、データアクセス監査ログを有効化すると _Default
ログバケットに保存されます。_Default
ログバケットの保持期間は30日間です。_Default
ログバケットの保存期間は変更できるため、より長い保存期間が求められる場合は保存期間を変更するか、シンクを作成して別のストレージにログを保存します。
データアクセス監査ログの有効化
有効化手順
データアクセス監査ログを有効化するには、Google Cloud の Web コンソール、gcloud コマンドライン、REST API などを利用します。詳細な手順は以下の記事を参照してください。
- 参考 : データアクセス監査ログを有効にする
3つの種類
データアクセス監査ログには、3種類の有効化オプションがあります。
名称 | 説明 |
---|---|
ADMIN_READ | メタデータや構成情報に対する読み取りオペレーションを記録 |
DATA_READ | ユーザー提供のデータに対する読み取るオペレーションを記録 |
DATA_WRITE | ユーザー提供のデータに対する書き込みオペレーションを記録 |
Cloud Storage を例に取ると、オブジェクトのメタデータ(保存日時、データサイズ、名称の取得等)を取得するリクエストは ADMIN_READ
に分類されます。データ自体をダウンロードするリクエストは DATA_READ
に分類されます。
Google Cloud プロジェクトにおいて、各 Google Cloud サービスごとに、上記のうち有効化するログを選択して有効化します。すべて有効化することもできますし、一部のみを有効化することもできます。また、全サービスのすべてのログを取得するように設定することもできます。
- 参考 : 構成の概要
除外するプリンシパル
特定のプリンシパル(Google アカウントやサービスアカウントなど)を指定して、そのプリンシパルだけはデータアクセス監査ログを生成しないように設定できます。
例えば、イベントドリブンで頻繁に起動する Cloud Run functions があるとします。この関数は、数秒に1度、オブジェクトがバケットにアップロードされるたびに起動して、サービスアカウントの権限を使ってオブジェクトを取得し、短い処理を行ってから終了する、とします。この関数は頻繁に起動して Cloud Storage オブジェクトにアクセスするため、データアクセス監査ログが膨大になることが想定されます。このような場合に、関数が使うサービスアカウントを Cloud Storage のデータアクセス監査ログの除外プリンシパルとして設定すれば、関数からのアクセスはログに記録されません。
除外するプリンシパルは、Google Cloud サービスごとに指定できます。
- 参考 : 除外を設定する
監査ログの集約
集約の必要性
前述の通り、デフォルトでは監査ログは組織、各フォルダ、各プロジェクトのログバケット _Required
に保存されます。
しかし、以下のような要件がある場合、ログ集約用のプロジェクトを作成し、その中にログ集約用ログバケットを作成したあと、組織レベルで集約シンクを作成することで、組織配下の全ての監査ログを1か所に集約することができます。
- 複数プロジェクトのログを集約して SIEM で分析したい
- 監査のために監査ログをエクスポートして第3者に提出する必要がある
- 複数プロジェクトを横断して監査ログをクエリしたい
集約シンクを使ってログを集約する場合、ログバケットへのデータ取り込みに対して、ログの取り込み量、保存量、保存期間に応じて料金が発生する点に留意しましょう。
なお、単純に複数プロジェクトを横断して監査ログをクエリしたいだけであれば、Cloud Logging のログスコープ機能を使うことで実現できますが、この機能を使ってログを閲覧するにはログを保持する各プロジェクトに対してログの閲覧権限が必要です。ログをログ集約プロジェクトに集約することで、ログの閲覧者が各プロジェクト側に権限を持つ必要がなくなります。
設定手順
組織で監査ログを集約するには、以下のような流れで設定作業を行います。
- ログ集約用の Google Cloud プロジェクトを用意
- ログを保存するためのログバケットまたは BigQuery テーブル等を用意
- 組織レベル(フォルダレベル)で集約シンクを作成
- シンクのサービスアカウントに、ログ保存先に書き込むための IAM 権限を付与
場合によってはログのボリュームが膨大になり利用料金がかさむため、必要に応じて最小限のログが収集されるよう、除外フィルタ設定を検討してください。
手順の詳細は、以下の公式ドキュメントを参照してください。
- 参考 : 組織のログをログバケットに保存する
データアクセス監査ログと Cloud Storage の認証済み URL
プロジェクトで Cloud Storage に対してデータアクセス監査ログを有効化すると、Cloud Storage オブジェクトの認証済み URL が使用できなくなります。
この事象を回避するには、Cloud Storage のデータアクセス監査ログのうち「データ読み取り」ログを無効化するか、URL を利用するアカウントを除外プリンシパルとして設定します。
トラブルシューティングの事例として、以下もご参照ください。
杉村 勇馬 (記事一覧)
執行役員 CTO / クラウドソリューション部 部長
元警察官という経歴を持つ現 IT エンジニア。クラウド管理・運用やネットワークに知見。AWS 12資格、Google Cloud認定資格11資格。X (旧 Twitter) では Google Cloud や AWS のアップデート情報をつぶやいています。
Follow @y_sugi_it