このドキュメントでは、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.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 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 は 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 |