Firebase Realtime Database の監査ロギング

このドキュメントでは、Firebase Realtime Database の監査ロギングについて説明します。Google Cloud サービスは、Google Cloud リソース内の管理アクティビティとアクセス アクティビティを記録する監査ログを生成します。Cloud Audit Logs の詳細については、以下をご覧ください。

メモ

DATA_READDATA_WRITE オペレーションの protoPayload.metadata のフィールドの詳細については、リファレンス ドキュメントをご覧ください。

サービス名

Firebase Realtime Database の監査ログでは、サービス名 firebasedatabase.googleapis.com が使用されます。このサービスでフィルタ:

    protoPayload.serviceName="firebasedatabase.googleapis.com"
  

メソッド(権限タイプ別)

各 IAM 権限には type プロパティがあります。このプロパティの値は列挙型で、ADMIN_READADMIN_WRITEDATA_READDATA_WRITE のいずれかになります。メソッドを呼び出すと、Firebase Realtime Database は監査ログを生成します。このログのカテゴリは、メソッドの実行に必要な権限の type プロパティによって異なります。type プロパティ値が DATA_READDATA_WRITE、または ADMIN_READ の IAM 権限を必要とするメソッドは、データアクセス監査ログを生成します。type プロパティ値が ADMIN_WRITE の IAM 権限を必要とするメソッドは、管理アクティビティ監査ログを生成します。

権限タイプ メソッド
ADMIN_READ google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance
google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances
ADMIN_WRITE google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance
google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance
google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance
google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance
google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance
DATA_READ google.firebase.database.v1.RealtimeDatabase.Connect
google.firebase.database.v1.RealtimeDatabase.Disconnect
google.firebase.database.v1.RealtimeDatabase.Listen
google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel
google.firebase.database.v1.RealtimeDatabase.Read
google.firebase.database.v1.RealtimeDatabase.Unlisten
DATA_WRITE google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut
google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate
google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect
google.firebase.database.v1.RealtimeDatabase.Update
google.firebase.database.v1.RealtimeDatabase.Write

API インターフェースの監査ログ

各メソッドで評価される権限と評価方法については、Cloud Identity and Access Management のドキュメントで Firebase Realtime Database の情報をご覧ください。

google.firebase.database.v1.RealtimeDatabase

次の監査ログは、google.firebase.database.v1.RealtimeDatabase に属するメソッドに関連付けられています。

Connect

  • メソッド: google.firebase.database.v1.RealtimeDatabase.Connect
  • 監査ログのタイプ: データアクセス
  • 権限:
    • firebasedatabase.data.connect - DATA_READ
  • メソッドが長時間実行オペレーションまたはストリーミング オペレーションのどちらであるか: どちらでもない。
  • このメソッドのフィルタ: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Connect"

Disconnect

  • メソッド: google.firebase.database.v1.RealtimeDatabase.Disconnect
  • 監査ログのタイプ: データアクセス
  • 権限:
    • firebasedatabase.data.connect - DATA_READ
  • メソッドが長時間実行オペレーションまたはストリーミング オペレーションのどちらであるか: どちらでもない。
  • このメソッドのフィルタ: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Disconnect"

Listen

  • メソッド: google.firebase.database.v1.RealtimeDatabase.Listen
  • 監査ログのタイプ: データアクセス
  • 権限:
    • firebasedatabase.data.get - DATA_READ
  • メソッドが長時間実行オペレーションまたはストリーミング オペレーションのどちらであるか: どちらでもない。
  • このメソッドのフィルタ: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Listen"

OnDisconnectCancel

  • メソッド: google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel
  • 監査ログのタイプ: データアクセス
  • 権限:
    • firebasedatabase.data.cancel - DATA_READ
  • メソッドが長時間実行オペレーションまたはストリーミング オペレーションのどちらであるか: どちらでもない。
  • このメソッドのフィルタ: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel"

OnDisconnectPut

  • メソッド: google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut
  • 監査ログのタイプ: データアクセス
  • 権限:
    • firebasedatabase.data.update - DATA_WRITE
  • メソッドが長時間実行オペレーションまたはストリーミング オペレーションのどちらであるか: どちらでもない。
  • このメソッドのフィルタ: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut"

OnDisconnectUpdate

  • メソッド: google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate
  • 監査ログのタイプ: データアクセス
  • 権限:
    • firebasedatabase.data.update - DATA_WRITE
  • メソッドが長時間実行オペレーションまたはストリーミング オペレーションのどちらであるか: どちらでもない。
  • このメソッドのフィルタ: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate"

Read

  • メソッド: google.firebase.database.v1.RealtimeDatabase.Read
  • 監査ログのタイプ: データアクセス
  • 権限:
    • firebasedatabase.data.get - DATA_READ
  • メソッドが長時間実行オペレーションまたはストリーミング オペレーションのどちらであるか: どちらでもない。
  • このメソッドのフィルタ: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Read"

RunOnDisconnect

  • メソッド: google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect
  • 監査ログのタイプ: データアクセス
  • 権限:
    • firebasedatabase.data.update - DATA_WRITE
  • メソッドが長時間実行オペレーションまたはストリーミング オペレーションのどちらであるか: どちらでもない。
  • このメソッドのフィルタ: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect"

Unlisten

  • メソッド: google.firebase.database.v1.RealtimeDatabase.Unlisten
  • 監査ログのタイプ: データアクセス
  • 権限:
    • firebasedatabase.data.cancel - DATA_READ
  • メソッドが長時間実行オペレーションまたはストリーミング オペレーションのどちらであるか: どちらでもない。
  • このメソッドのフィルタ: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Unlisten"

Update

  • メソッド: google.firebase.database.v1.RealtimeDatabase.Update
  • 監査ログのタイプ: データアクセス
  • 権限:
    • firebasedatabase.data.get - DATA_WRITE
    • firebasedatabase.data.update - DATA_WRITE
  • メソッドが長時間実行オペレーションまたはストリーミング オペレーションのどちらであるか: どちらでもない。
  • このメソッドのフィルタ: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Update"

Write

  • メソッド: google.firebase.database.v1.RealtimeDatabase.Write
  • 監査ログのタイプ: データアクセス
  • 権限:
    • firebasedatabase.data.update - DATA_WRITE
  • メソッドが長時間実行オペレーションまたはストリーミング オペレーションのどちらであるか: どちらでもない。
  • このメソッドのフィルタ: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Write"

google.firebase.database.v1beta.RealtimeDatabaseService

次の監査ログは、google.firebase.database.v1beta.RealtimeDatabaseService に属するメソッドに関連付けられています。

CreateDatabaseInstance

  • メソッド: google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance
  • 監査ログのタイプ: 管理アクティビティ
  • 権限:
    • firebasedatabase.instances.create - ADMIN_WRITE
  • メソッドが長時間実行オペレーションまたはストリーミング オペレーションのどちらであるか: どちらでもない。
  • このメソッドのフィルタ: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance"

DeleteDatabaseInstance

  • メソッド: google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance
  • 監査ログのタイプ: 管理アクティビティ
  • 権限:
    • firebasedatabase.instances.delete - ADMIN_WRITE
  • メソッドが長時間実行オペレーションまたはストリーミング オペレーションのどちらであるか: どちらでもない。
  • このメソッドのフィルタ: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance"

DisableDatabaseInstance

  • メソッド: google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance
  • 監査ログのタイプ: 管理アクティビティ
  • 権限:
    • firebasedatabase.instances.disable - ADMIN_WRITE
  • メソッドが長時間実行オペレーションまたはストリーミング オペレーションのどちらであるか: どちらでもない。
  • このメソッドのフィルタ: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance"

GetDatabaseInstance

  • メソッド: google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance
  • 監査ログのタイプ: データアクセス
  • 権限:
    • firebasedatabase.instances.get - ADMIN_READ
  • メソッドが長時間実行オペレーションまたはストリーミング オペレーションのどちらであるか: どちらでもない。
  • このメソッドのフィルタ: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance"

ListDatabaseInstances

  • メソッド: google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances
  • 監査ログのタイプ: データアクセス
  • 権限:
    • firebasedatabase.instances.list - ADMIN_READ
  • メソッドが長時間実行オペレーションまたはストリーミング オペレーションのどちらであるか: どちらでもない。
  • このメソッドのフィルタ: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances"

ReenableDatabaseInstance

  • メソッド: google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance
  • 監査ログのタイプ: 管理アクティビティ
  • 権限:
    • firebasedatabase.instances.reenable - ADMIN_WRITE
  • メソッドが長時間実行オペレーションまたはストリーミング オペレーションのどちらであるか: どちらでもない。
  • このメソッドのフィルタ: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance"

UndeleteDatabaseInstance

  • メソッド: google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance
  • 監査ログのタイプ: 管理アクティビティ
  • 権限:
    • firebasedatabase.instances.undelete - ADMIN_WRITE
  • メソッドが長時間実行オペレーションまたはストリーミング オペレーションのどちらであるか: どちらでもない。
  • このメソッドのフィルタ: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance"

認証情報の監査

監査ログエントリには、ログに記録されたオペレーションを実行した ID に関する情報が含まれます。リクエストの呼び出し元を識別するには、AuditLog オブジェクト内の次のフィールドを確認してください。

  • リアルタイム接続の確立Realtime Database の認証は接続の確立後に行われるため、Realtime DatabaseConnect オペレーションの場合、ログに認証データは記録されません。したがって、Connect には認証情報がありません。AuthenticationInfo オブジェクトには、audit-pending-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com のプレースホルダ principalEmail が含まれます。

  • Google 認証。標準の Google 認証を使用する Realtime Database オペレーション(Firebase Admin SDK からのトラフィックや、標準の OAuth トークンで認証された REST リクエストなど)の場合、AuthenticationInfo オブジェクトには実際の認証情報(メールアドレス)が含まれます。

  • Firebase AuthenticationFirebase Authentication を使用する Realtime Database オペレーションの場合、AuthenticationInfo オブジェクトには audit-third-party-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.comprincipalEmail 値が含まれます。これは、カスタム JWT を作成して独自の認証ソリューションを実装する場合も同じです。

    • サードパーティの認証に JSON ウェブトークン(JWT)が使用された場合、thirdPartyPrincipal フィールドにはトークンのヘッダーとペイロードが含まれます。たとえば、Firebase Authentication で認証されたリクエストの監査ログには、そのリクエストの Firebase Authentication トークンが含まれます。
  • 認証なし。認証を使用しない Realtime Database オペレーションの場合、AuthenticationInfo オブジェクトには audit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.comprincipalEmail 値が含まれます。オープン セキュリティ ルールのある Realtime Database インスタンスは、このようなリクエストを許可する場合があります。すべてのユーザーがデータベースを適切に保護することをおすすめします。

  • 以前のシークレット トークン以前のトークンを使用した Realtime Database オペレーションの場合、AuthenticationInfo オブジェクトには audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com のプレースホルダ principalEmail が含まれます。シークレット署名付き JWT の場合、thirdPartyPrincipal には JWT ヘッダーとペイロードが含まれます。

Firebase Security Rules の評価を監査する

Cloud Audit Logs は、Rules の変更によって影響を受ける可能性のあるリクエストの識別に使用できます。

AuthorizationInfo オブジェクトの authorization.permission は次のいずれかになります。

  • firebasedatabase.data.get: resource で指定されたパスに付与された読み取りアクセス権。
  • firebasedatabase.data.update: resource で指定されたパスに付与された書き込みアクセス権。
  • firebasedatabase.data.connect: ConnectDisconnect のプレースホルダ。Realtime Database インスタンスに接続する際に必要な認可はありません。
  • firebasedatabase.data.cancel: UnlistenOnDisconnectCancel に使用。以前に認可されたオペレーションの取り消しまたはキャンセルで追加の認可を行う必要はありません。

Cloud Audit Logs と Realtime Database プロファイラの結果を関連付ける

Realtime Database プロファイラRealtime Database 監査ロギングを組み合わせて使用すると、Realtime Database のパフォーマンスを詳しく分析できます。それぞれのツールに強みがあります。

Cloud Audit Logging Realtime Database Profiler
  • データベースへのアクセスを監査する
  • すべてのリクエストを継続的にキャプチャする
  • 遡及的なクエリが可能
  • 詳細な認証トークン情報を含む
  • 使用料金が発生する
  • パフォーマンス分析に使用
  • ホットスポットの識別とパフォーマンスの最適化に役立つツールを提供
  • データ量が多く監査ログでは使用できないリスナー ブロードキャストの測定が可能
  • 軽量でリアルタイム。ライブロード テストに適しています。監査ログエントリが表示されるまでに数分かかることがあります。

監査ログの内容は、次のようにプロファイラの指標に対応しています。

監査ロギングのオペレーション名 RealtimeDatabaseAuditMetadata
特殊値
プロファイラのオペレーション名
Connect RequestTypeREALTIME concurrent-connect
Disconnect RequestTypeREALTIME concurrent-disconnect
Read RequestTypeREALTIME realtime-read
Read RequestTypeREST rest-read
書き込み RequestTypeREALTIME realtime-write
書き込み RequestTypeREST rest-write
Update RequestTypeREALTIME
PreconditionType を確認してください。
realtime-update
realtime-transaction
Update RequestTypeREST
PreconditionType を確認してください。
rest-update
rest-transaction
ListenerListen RequestTypeREALTIME listener-listen
ListenerUnlisten RequestTypeREALTIME listener-unlisten
OnDisconnectPut RequestTypeREALTIME on-disconnect-put
OnDisconnectUpdate RequestTypeREALTIME on-disconnect-update
OnDisconnectCancel RequestTypeREALTIME on-disconnect-cancel
RunOnDisconnect RequestTypeREALTIME run-on-disconnect