このドキュメントでは、Firebase Realtime Database の監査ロギングについて説明します。Google Cloud サービスは、Google Cloud リソース内の管理アクティビティとアクセス アクティビティを記録する監査ログを生成します。Cloud Audit Logs の詳細については、以下をご覧ください。
メモ
DATA_READ と DATA_WRITE オペレーションの protoPayload.metadata のフィールドの詳細については、リファレンス ドキュメントをご覧ください。
サービス名
Firebase Realtime Database の監査ログでは、サービス名 firebasedatabase.googleapis.com が使用されます。このサービスでフィルタ:
protoPayload.serviceName="firebasedatabase.googleapis.com"
メソッド(権限タイプ別)
 各 IAM 権限には type プロパティがあります。このプロパティの値は列挙型で、ADMIN_READ、ADMIN_WRITE、DATA_READ、DATA_WRITE のいずれかになります。メソッドを呼び出すと、Firebase Realtime Database は監査ログを生成します。このログのカテゴリは、メソッドの実行に必要な権限の type プロパティによって異なります。type プロパティ値が DATA_READ、DATA_WRITE、または ADMIN_READ の IAM 権限を必要とするメソッドは、データアクセス監査ログを生成します。type プロパティ値が ADMIN_WRITE の IAM 権限を必要とするメソッドは、管理アクティビティ監査ログを生成します。
| 権限タイプ | メソッド | 
|---|---|
| ADMIN_READ | google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances | 
| ADMIN_WRITE | google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance | 
| DATA_READ | google.firebase.database.v1.RealtimeDatabase.Connectgoogle.firebase.database.v1.RealtimeDatabase.Disconnectgoogle.firebase.database.v1.RealtimeDatabase.Listengoogle.firebase.database.v1.RealtimeDatabase.OnDisconnectCancelgoogle.firebase.database.v1.RealtimeDatabase.Readgoogle.firebase.database.v1.RealtimeDatabase.Unlisten | 
| DATA_WRITE | google.firebase.database.v1.RealtimeDatabase.OnDisconnectPutgoogle.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdategoogle.firebase.database.v1.RealtimeDatabase.RunOnDisconnectgoogle.firebase.database.v1.RealtimeDatabase.Updategoogle.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 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 Security Rules の評価を監査する
Cloud Audit Logs は、Rules の変更によって影響を受ける可能性のあるリクエストの識別に使用できます。
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 Profiler | 
|---|---|
| 
 | 
 | 
監査ログの内容は、次のようにプロファイラの指標に対応しています。
| 監査ロギングのオペレーション名 | RealtimeDatabaseAuditMetadataの特殊値 | プロファイラのオペレーション名 | 
|---|---|---|
| Connect | RequestTypeはREALTIME | concurrent-connect | 
| Disconnect | RequestTypeはREALTIME | concurrent-disconnect | 
| Read | RequestTypeはREALTIME | realtime-read | 
| Read | RequestTypeはREST | rest-read | 
| 書き込み | RequestTypeはREALTIME | realtime-write | 
| 書き込み | RequestTypeはREST | rest-write | 
| Update | RequestTypeはREALTIMEPreconditionTypeを確認してください。 | realtime-update realtime-transaction | 
| Update | RequestTypeはRESTPreconditionTypeを確認してください。 | 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 |