このページでは、Cloud Audit Logs の一部として Firebase によって作成される監査ログについて説明します。
概要
Firebase サービスは、「誰がいつどこで何をしたか」を調べるために役立つ監査ログを記録します。これは Cloud Audit Logs であり、Firebase プロジェクトに接続されている Google Cloud プロジェクトの一部として提供されます。
各 Firebase プロジェクトで記録されるのは、そのプロジェクト内に直接存在するリソースの監査ログのみです。
Cloud Audit Logs の概要については、Cloud Audit Logs の概要をご覧ください。監査ログ形式の詳細については、監査ログについてをご覧ください。
利用可能な監査ログ
Firebase Realtime Database では、次の種類の監査ログを使用できます。
-
管理アクティビティ監査ログ
メタデータまたは構成情報を書き込む「管理書き込み」オペレーションが含まれます。
管理アクティビティ監査ログは無効にできません。
-
データアクセス監査ログ
メタデータまたは構成情報を読み取る「管理読み取り」オペレーションが含まれます。ユーザー提供データの読み取りまたは書き込みを行う「データ読み取り」オペレーションと「データ書き込み」オペレーションも含まれます。
データアクセス監査ログを受信するには、監査ログを明示的に有効にする必要があります。
監査ログの種類の詳細については、監査ログの種類をご覧ください。
監査対象のオペレーション
次の表は、Firebase Realtime Database の監査ログタイプに対応する API オペレーションをまとめたものです。
監査ログのカテゴリ | Firebase Realtime Database オペレーション |
---|---|
管理アクティビティ監査ログ(ADMIN_WRITE) |
|
データアクセス監査ログ(ADMIN_READ) |
|
データアクセス監査ログ(DATA_READ または DATA_WRITE) |
|
データアクセス監査ログ(DATA_READ) |
|
データアクセス監査ログ(DATA_WRITE) |
|
認証情報の監査
監査ログエントリには、ログに記録されたオペレーションを実行した ID に関する情報が含まれます。リクエストの呼び出し元を識別するには、AuditLog オブジェクト内の次のフィールドを確認してください。
リアルタイム接続の確立。Realtime Database の認証は接続の確立後に行われるため、Realtime Database の
Connect
オペレーションの場合、ログに認証データは記録されません。したがって、Connect
には認証情報がありません。AuthenticationInfo
オブジェクトには、audit-pending-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com
のプレースホルダprincipalEmail
が含まれます。Google 認証。標準の Google 認証を使用する Realtime Database オペレーション(Firebase Admin SDK からのトラフィックや、標準の OAuth トークンで認証された REST リクエストなど)の場合、
AuthenticationInfo
オブジェクトには実際の認証情報(メールアドレス)が含まれます。Firebase Authentication。Firebase Authentication を使用する Realtime Database オペレーションの場合、
AuthenticationInfo
オブジェクトにはaudit-third-party-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com
のprincipalEmail
値が含まれます。これは、カスタム JWT を作成して独自の認証ソリューションを実装する場合も同じです。- サードパーティの認証に JSON ウェブトークン(JWT)が使用された場合、
thirdPartyPrincipal
フィールドにはトークンのヘッダーとペイロードが含まれます。たとえば、Firebase Authentication で認証されたリクエストの監査ログには、そのリクエストの Firebase Authentication トークンが含まれます。
- サードパーティの認証に JSON ウェブトークン(JWT)が使用された場合、
認証なし。認証を使用しない Realtime Database オペレーションの場合、
AuthenticationInfo
オブジェクトにはaudit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com
のprincipalEmail
値が含まれます。オープン セキュリティ ルールのある Realtime Database インスタンスは、このようなリクエストを許可する場合があります。すべてのユーザーがデータベースを適切に保護することをおすすめします。以前のシークレット トークン。以前のトークンを使用した Realtime Database オペレーションの場合、
AuthenticationInfo
オブジェクトにはaudit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com
のプレースホルダprincipalEmail
が含まれます。シークレット署名付き JWT の場合、thirdPartyPrincipal
に JWT ヘッダーとペイロードが含まれます。
Firebase セキュリティ ルールの評価を監査する
Cloud Audit Logs は、ルールの変更によって影響を受ける可能性のあるリクエストの識別に使用できます。
AuthorizationInfo オブジェクトの authorization.permission
は次のいずれかになります。
firebasedatabase.data.get
:resource
で指定されたパスに付与された読み取りアクセス権。firebasedatabase.data.update
:resource
で指定されたパスに付与された書き込みアクセス権。firebasedatabase.data.connect
:Connect
とDisconnect
のプレースホルダ。Realtime Database インスタンスに接続する際に認可は必要ありません。firebasedatabase.data.cancel
:Unlisten
とOnDisconnectCancel
に使用。以前に認可されたオペレーションの取り消しまたはキャンセルで追加の認可を行う必要はありません。
Cloud Audit Logs と Realtime Database プロファイラの結果を関連付ける
Realtime Database プロファイラと Realtime Database 監査ロギングを組み合わせて使用すると、Realtime Database のパフォーマンスを詳しく分析できます。それぞれのツールに強みがあります。
Cloud Audit Logging | Realtime Database プロファイラ |
---|---|
|
|
監査ログの内容は、次のようにプロファイラの指標に対応しています。
監査ロギングのオペレーション名 | RealtimeDatabaseAuditMetadata の特殊値 |
プロファイラのオペレーション名 |
---|---|---|
Connect | RequestType は REALTIME |
concurrent-connect |
Disconnect | RequestType は REALTIME |
concurrent-disconnect |
Read | RequestType は REALTIME |
realtime-read |
Read | RequestType は REST |
rest-read |
Write | RequestType は REALTIME |
realtime-write |
Write | RequestType は REST |
rest-write |
Update | RequestType は REALTIME PreconditionType を確認してください。 |
realtime-update realtime-transaction |
Update | RequestType は REST PreconditionType を確認してください。 |
rest-update rest-transaction |
ListenerListen | RequestType は REALTIME |
listener-listen |
ListenerUnlisten | RequestType は REALTIME |
listener-unlisten |
OnDisconnectPut | RequestType は REALTIME |
on-disconnect-put |
OnDisconnectUpdate | RequestType は REALTIME |
on-disconnect-update |
OnDisconnectCancel | RequestType は REALTIME |
on-disconnect-cancel |
RunOnDisconnect | RequestType は REALTIME |
run-on-disconnect |
監査ログの形式
監査ログエントリには、次のオブジェクトが含まれます。
ログエントリ自体。
LogEntry
タイプのオブジェクトです。よく使用されるフィールドは次のとおりです。logName
には、リソース ID と監査ログの種類が含まれます。resource
には、監査対象オペレーションのターゲットが含まれます。timestamp
には、監査対象オペレーションの時間が含まれます。protoPayload
には、監査対象の情報が含まれます。
監査ロギングデータ。ログエントリの
protoPayload
フィールドに保持されるAuditLog
オブジェクトです。任意のサービス固有の監査情報。サービス固有のオブジェクトです。古い統合では、このオブジェクトは
AuditLog
オブジェクトのserviceData
フィールドに保持されます。新しい統合では、metadata
フィールドを使用します。
これらのオブジェクトのその他のフィールドと、その解釈方法については、監査ログについてをご覧ください。
DATA_READ
と DATA_WRITE
オペレーションの protoPayload.metadata
のフィールドの詳細については、リファレンス ドキュメントをご覧ください。ログ名
Cloud Audit Logs のリソース名は、監査ログを所有する Firebase プロジェクトまたは他の Google Cloud エンティティを表します。この名前を見ると、ログに管理アクティビティ、データアクセス、ポリシー拒否、システム イベントの監査ロギングデータが含まれているかどうかがわかります。たとえば、次のログ名はプロジェクト レベルの管理アクティビティ監査ログと組織のデータアクセス監査ログを表しています。変数は、Firebase プロジェクトと組織の ID を表します。
projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity
organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fdata_access
サービス名
Firebase Realtime Database の監査ログでは、サービス名 firebasedatabase.googleapis.com
が使用されます。
すべての Cloud Logging API サービス名とそれに対応するモニタリング対象リソースタイプの一覧については、サービスとリソースのマッピングをご覧ください。
リソースタイプ
Firebase Realtime Database の監査ログでは、すべての監査ログに対してリソースタイプ audited_resource
が使用されます。
Cloud Logging でモニタリングされるすべてのリソースタイプのリストと記述情報については、モニタリング対象リソースタイプをご覧ください。
監査ロギングの有効化
管理アクティビティ監査ログは常に有効になっています。無効にすることはできません。
データアクセス監査ログはデフォルトで無効になっており、明示的に有効にしない限り書き込まれません(例外は BigQuery のデータアクセス監査ログで、これは無効にすることができません)。
Google Cloud コンソールでDATA_READ
または DATA_WRITE
(あるいは両方)をチェックすることで、Realtime Database のデータアクセス監査ログが切り替わります。Google Cloud コンソールでログを有効または無効にしてからログの配信が開始または停止するまでに、最大で 1 時間ほどかかります。データアクセス監査ログの一部またはすべてを有効にする手順については、データアクセス ログの構成をご覧ください。
権限とロール
Cloud IAM の権限とロールにより、Google Cloud リソース内の監査ログデータにアクセス可能かどうか判断されます。
ユースケースに適用する Logging 固有の権限とロールを決定する際は、次の点を考慮してください。
ログ閲覧者のロール(
roles/logging.viewer
)は、管理アクティビティ、ポリシー拒否、システム イベントの監査ログに対する読み取り専用権限を付与します。このロールしかない場合は、_Default
バケット内のデータアクセス監査ログを閲覧できません。プライベート ログ閲覧者のロール(
(roles/logging.privateLogViewer
)には、roles/logging.viewer
に含まれる権限に加えて、_Default
バケット内のデータアクセス監査ログの読み取り権限が含まれます。これらのプライベート ログがユーザー定義バケットに保存されている場合、それらのバケット内のログを読み取る権限を持つユーザーは、プライベート ログを読み取ることができます。ログバケットの詳細については、転送とストレージの概要をご覧ください。
監査ログデータに適用される Cloud IAM 権限とロールの詳細については、アクセス制御をご覧ください。
ログを表示
監査ログを検索して表示するには、監査ログ情報を表示する対象の Firebase プロジェクト、フォルダ、または組織の ID を把握している必要があります。さらに、resource.type
などの他のインデックス付き LogEntry
フィールドも指定できます。詳しくは、ログエントリの迅速な検索をご覧ください。
監査ログ名は次のようになります。名前には、Firebase プロジェクト、フォルダ、または組織の ID の変数が含まれています。
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 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
Google Cloud コンソール、gcloud
コマンドライン ツール、または Logging API を使用して、Cloud Logging の監査ログを表示できます。
Console
Google Cloud コンソールのログ エクスプローラを使用して、Firebase プロジェクト、フォルダ、または組織の監査ログエントリを取得できます。
Google Cloud コンソールで、[ロギング] > [ログ エクスプローラ] ページに移動します。
[ログ エクスプローラ] ページで、既存の Firebase プロジェクト、フォルダ、または組織を選択します。
[クエリビルダー] ペインで、次の操作を行います。
リソースタイプに、表示する監査ログを含む Google Cloud リソースを選択します。
[ログ名] で、表示する監査ログタイプを選択します。
- 管理アクティビティ監査ログの場合は、[activity] を選択します。
- データアクセス監査ログの場合は、[data_access] を選択します。
- システム イベント監査ログの場合は、[system_event] を選択します。
- ポリシー拒否監査ログの場合は、[policy] を選択します。
これらのオプションが表示されない場合、Firebase プロジェクト、フォルダ、または組織で利用可能なその種類の監査ログは存在しないことを意味します。
ログ エクスプローラを使用したクエリの詳細については、ログクエリのビルドをご覧ください。
gcloud
gcloud
コマンドライン ツールは、Cloud Logging API へのコマンドライン インターフェースを提供します。それぞれのログ名の中で有効な PROJECT_ID
、FOLDER_ID
または ORGANIZATION_ID
を指定します。
Firebase プロジェクト レベルの監査ログエントリを読み取るには、次のコマンドを実行します。
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
gcloud
ツールの使用の詳細については、ログエントリの読み取りをご覧ください。
API
クエリを作成する場合は、変数を有効な値に置き換え、適切なプロジェクトレベル、フォルダレベル、または監査ログ名に表示されている組織レベルの監査ログ名か ID を代わりに使用します。たとえば、クエリに PROJECT_ID が含まれている場合、指定するプロジェクト ID は、現在選択された Firebase プロジェクトを参照している必要があります。
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" }
[実行] をクリックします。
クエリの詳細については、Logging のクエリ言語をご覧ください。
監査ログエントリの例と、その中に記録されている最も重要な情報を見つける方法については、監査ログエントリの例をご覧ください。
監査ログの転送
他の種類のログと同様に、サポートされている宛先に監査ログを転送できます。監査ログを転送する理由を以下に示します。
監査ログを長期間保持するか、より強力な検索機能を使用するには、監査ログのコピーを Google Cloud Storage、BigQuery、Google Cloud Pub/Sub に転送します。Cloud Pub/Sub を使用すると、他のアプリケーション、他のリポジトリ、サードパーティ製品に転送できます。
組織全体の監査ログを管理するには、組織内の一部またはすべての Firebase プロジェクトからログを転送できる集約シンクを作成します。
- 有効にしたデータアクセス監査ログが原因で Firebase プロジェクト数がログ割り当てを超過している場合は、データアクセス監査ログを Logging から除外するシンクを作成できます。
ログの転送手順については、シンクの構成をご覧ください。
料金
管理アクティビティ監査ログとシステム イベント監査ログは無料です。
データアクセス監査ログとポリシー拒否監査ログは課金対象です。
Cloud Logging の料金については、Google Cloud のオペレーション スイートの料金: Cloud Logging をご覧ください。