เอกสารนี้อธิบายการบันทึกการตรวจสอบสำหรับฐานข้อมูลเรียลไทม์ของ Firebase Google Cloud บริการ สร้างบันทึกการตรวจสอบที่บันทึกกิจกรรมการดูแลระบบและการเข้าถึงภายในทรัพยากร Google Cloud ดูข้อมูลเพิ่มเติมเกี่ยวกับบันทึกการตรวจสอบ Cloud ได้ที่หัวข้อต่อไปนี้
- ประเภทของบันทึกการตรวจสอบ
- โครงสร้างรายการบันทึกการตรวจสอบ
- การจัดเก็บและกำหนดเส้นทางบันทึกการตรวจสอบ
- สรุปราคาของ Cloud Logging
- เปิดใช้บันทึกการตรวจสอบการเข้าถึงข้อมูล
หมายเหตุ
ดูข้อมูลเพิ่มเติมเกี่ยวกับฟิลด์ใน protoPayload.metadata สำหรับการดำเนินการ DATA_READ และ DATA_WRITE ได้ในเอกสารประกอบอ้างอิง
ชื่อบริการ
บันทึกการตรวจสอบฐานข้อมูลเรียลไทม์ของ Firebase ใช้ชื่อบริการ firebasedatabase.googleapis.com
กรองสำหรับบริการนี้
protoPayload.serviceName="firebasedatabase.googleapis.com"
วิธีการตามประเภทสิทธิ์
สิทธิ์ IAM แต่ละรายการมีพร็อพเพอร์ตี้ type ซึ่งมีค่าเป็น Enum
ที่อาจเป็นค่าใดค่าหนึ่งใน 4 ค่า ได้แก่ ADMIN_READ, ADMIN_WRITE, DATA_READ หรือ DATA_WRITE เมื่อคุณเรียกใช้เมธอด
ฐานข้อมูลเรียลไทม์ของ Firebase จะสร้างบันทึกการตรวจสอบซึ่งมีหมวดหมู่ขึ้นอยู่กับ
type พร็อพเพอร์ตี้ของสิทธิ์ที่จำเป็นในการเรียกใช้เมธอด
เมธอดที่ต้องใช้สิทธิ์ IAM ที่มีค่าพร็อพเพอร์ตี้ type
เป็น DATA_READ, DATA_WRITE หรือ ADMIN_READ จะสร้างบันทึกการตรวจสอบการเข้าถึงข้อมูล
เมธอดที่ต้องใช้สิทธิ์ IAM ที่มีค่าพร็อพเพอร์ตี้ type
เป็น ADMIN_WRITEgenerate
บันทึกการตรวจสอบกิจกรรมของผู้ดูแลระบบ
| ประเภทสิทธิ์ | เมธอด |
|---|---|
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
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_WRITEfirebasedatabase.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"
ตรวจสอบข้อมูลการตรวจสอบสิทธิ์
รายการบันทึกการตรวจสอบมีข้อมูล เกี่ยวกับตัวตนที่ดำเนินการที่บันทึกไว้ หากต้องการระบุผู้เรียกใช้คำขอ ให้ดูช่องต่อไปนี้ในออบเจ็กต์ AuditLog
สร้างการเชื่อมต่อแบบเรียลไทม์ Realtime Database การดำเนินการ
Connectจะไม่บันทึกข้อมูลการตรวจสอบสิทธิ์เนื่องจาก Realtime Database จะตรวจสอบสิทธิ์หลังจากสร้างการเชื่อมต่อแล้ว ดังนั้นConnectจึงไม่มีข้อมูลการตรวจสอบสิทธิ์ ออบเจ็กต์AuthenticationInfoมีตัวยึดตำแหน่งprincipalEmailของaudit-pending-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.comการตรวจสอบสิทธิ์ของ Google Realtime Database การดำเนินการที่ใช้การตรวจสอบสิทธิ์มาตรฐานของ Google เช่น การเข้าชมจาก Firebase Admin SDK หรือคำขอ REST ที่ตรวจสอบสิทธิ์ด้วยโทเค็น OAuth มาตรฐาน มีออบเจ็กต์
AuthenticationInfoที่มีข้อมูลเข้าสู่ระบบจริง อีเมลFirebase Authentication การดำเนินการ Realtime Database ที่ใช้ Firebase Authentication มี ออบเจ็กต์
AuthenticationInfoที่มีค่าprincipalEmailเป็นaudit-third-party-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.comเช่นเดียวกันหากคุณใช้โซลูชันการตรวจสอบสิทธิ์ของคุณเองโดยการสร้าง JWT ที่กำหนดเอง- หากใช้ JSON Web Token (JWT) สำหรับการตรวจสอบสิทธิ์ของบุคคลที่สาม ฟิลด์
thirdPartyPrincipalจะมีส่วนหัวและเพย์โหลดของโทเค็น ตัวอย่างเช่น บันทึกการตรวจสอบสำหรับคำขอที่ตรวจสอบสิทธิ์ด้วย Firebase Authentication จะมีโทเค็น Firebase Authentication ของคำขอนั้น
- หากใช้ JSON Web Token (JWT) สำหรับการตรวจสอบสิทธิ์ของบุคคลที่สาม ฟิลด์
ไม่มีการตรวจสอบสิทธิ์ Realtime Database ที่ไม่ได้ใช้การตรวจสอบสิทธิ์ใดๆ จะมีออบเจ็กต์
AuthenticationInfoที่มีค่าprincipalEmailเป็นaudit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.comอินสแตนซ์ Realtime Database ที่มีกฎความปลอดภัยแบบเปิดอาจให้สิทธิ์คำขอดังกล่าว เราขอแนะนำให้ผู้ใช้ทุกคนรักษาความปลอดภัยของฐานข้อมูลอย่างเหมาะสมโทเค็นลับเวอร์ชันเดิม การดำเนินการ Realtime Database โดยใช้โทเค็นเดิม มีออบเจ็กต์
AuthenticationInfoที่มีตัวยึดตำแหน่งprincipalEmailของaudit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.comสำหรับ JWT ที่ลงชื่อด้วยลับthirdPartyPrincipalจะมีส่วนหัวและเพย์โหลดของ JWT
การประเมินการตรวจสอบ Firebase Security Rules
คุณใช้บันทึกการตรวจสอบของ Cloud เพื่อระบุคำขอที่อาจได้รับผลกระทบจากการเปลี่ยนแปลง Rules ได้
ในออบเจ็กต์ AuthorizationInfo ค่า authorization.permission อาจเป็นค่าใดค่าหนึ่งต่อไปนี้
firebasedatabase.data.get: สิทธิ์ในการอ่านที่ได้รับในเส้นทางที่ระบุในresourcefirebasedatabase.data.update: สิทธิ์เขียนได้รับที่เส้นทางที่ระบุในresourcefirebasedatabase.data.connect: ตัวยึดตำแหน่งสำหรับConnectและDisconnectไม่จำเป็นต้องมีการให้สิทธิ์เพื่อเชื่อมต่อกับอินสแตนซ์ Realtime Databasefirebasedatabase.data.cancel: ใช้สำหรับUnlistenและOnDisconnectCancelการเพิกถอนหรือยกเลิกการดำเนินการที่ได้รับอนุญาตก่อนหน้านี้ไม่จำเป็นต้องมีการให้สิทธิ์เพิ่มเติม
เชื่อมโยงบันทึกการตรวจสอบ Cloud กับRealtime Databaseผลลัพธ์ของโปรไฟล์เลอร์
คุณสามารถวิเคราะห์ประสิทธิภาพเชิงลึกใน Realtime Database ได้โดยใช้ Realtime Database โปรไฟล์เลอร์ร่วมกับ Realtime Database การบันทึกการตรวจสอบ เครื่องมือแต่ละอย่างมีจุดแข็งของตัวเอง
| Cloud Audit Logging | Realtime Database โปรไฟล์ |
|---|---|
|
|
เนื้อหาของบันทึกการตรวจสอบสอดคล้องกับเมตริกของโปรไฟล์เลอร์ตามที่แสดงด้านล่าง
| ชื่อการดำเนินการของ Cloud Audit Logging | ค่าพิเศษในRealtimeDatabaseAuditMetadata |
ชื่อการดำเนินการของ Profiler |
|---|---|---|
| เชื่อมต่อ | RequestType คือ REALTIME |
concurrent-connect |
| ยกเลิกการเชื่อมต่อ | RequestType คือ REALTIME |
concurrent-disconnect |
| อ่าน | RequestType คือ REALTIME |
realtime-read |
| อ่าน | RequestType คือ REST |
rest-read |
| เขียน | RequestType คือ REALTIME |
realtime-write |
| เขียน | RequestType คือ REST |
พักผ่อนและเขียน |
| อัปเดต | RequestType REALTIME
ตรวจสอบ PreconditionType |
realtime-update realtime-transaction |
| อัปเดต | 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 |
ทำงานต่อเมื่อยกเลิกการเชื่อมต่อ |