การบันทึกการตรวจสอบของฐานข้อมูลเรียลไทม์ของ Firebase

เอกสารนี้อธิบายการบันทึกการตรวจสอบสําหรับฐานข้อมูลเรียลไทม์ของ Firebase บริการ Google Cloud จะสร้างบันทึกการตรวจสอบที่บันทึกกิจกรรมการดูแลระบบและการเข้าถึงภายในทรัพยากร Google Cloud ดูข้อมูลเพิ่มเติมเกี่ยวกับบันทึกการตรวจสอบ Cloud ได้ที่หัวข้อต่อไปนี้

หมายเหตุ

ดูข้อมูลเพิ่มเติมเกี่ยวกับช่องใน protoPayload.metadata สำหรับการดำเนินการ DATA_READ และ DATA_WRITE ได้ในเอกสารอ้างอิง

ชื่อบริการ

บันทึกการตรวจสอบของฐานข้อมูลเรียลไทม์ของ Firebase จะใช้ชื่อบริการ firebasedatabase.googleapis.com กรองบริการนี้:

    protoPayload.serviceName="firebasedatabase.googleapis.com"
  

วิธีการตามประเภทสิทธิ์

สิทธิ์ IAM แต่ละรายการมีพร็อพเพอร์ตี้ type ซึ่งค่าเป็น enum ที่อาจเป็นค่าใดค่าหนึ่งต่อไปนี้ ADMIN_READ, ADMIN_WRITE, DATA_READ หรือ DATA_WRITE เมื่อคุณเรียกใช้เมธอด Firebase Realtime Database จะสร้างบันทึกการตรวจสอบซึ่งมีหมวดหมู่ขึ้นอยู่กับtypeพร็อพเพอร์ตี้ของสิทธิ์ที่จําเป็นสําหรับดําเนินการเมธอด เมธอดที่ต้องมีสิทธิ์ IAM ที่มีค่าพร็อพเพอร์ตี้ type จาก DATA_READ, DATA_WRITE หรือ ADMIN_READ บันทึกการตรวจสอบการเข้าถึงข้อมูล เมธอดที่ต้องมีสิทธิ์ IAM ที่มีค่าพร็อพเพอร์ตี้ type สร้างจาก ADMIN_WRITE รายการ บันทึกการตรวจสอบกิจกรรมของผู้ดูแลระบบ

ประเภทสิทธิ์ เมธอด
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

ดูข้อมูลเกี่ยวกับวิธีและสิทธิ์ที่ระบบจะประเมินสำหรับแต่ละเมธอดได้ที่เอกสารประกอบเกี่ยวกับการจัดการข้อมูลประจำตัวและการเข้าถึงระบบคลาวด์สำหรับฐานข้อมูลเรียลไทม์ของ 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_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"

ตรวจสอบข้อมูลการตรวจสอบสิทธิ์

รายการบันทึกการตรวจสอบมีข้อมูล เกี่ยวกับข้อมูลระบุตัวตนที่ทำการดำเนินการที่บันทึกไว้ หากต้องการระบุผู้เรียกใช้คําขอ ให้ดูฟิลด์ต่อไปนี้ภายในออบเจ็กต์ AuditLog

  • สร้างการเชื่อมต่อแบบเรียลไทม์ การดำเนินการ Realtime Database Connect จะไม่บันทึกข้อมูลการตรวจสอบสิทธิ์เนื่องจาก Realtime Database จะตรวจสอบสิทธิ์หลังจากสร้างการเชื่อมต่อแล้ว ดังนั้น Connect จึงไม่มีข้อมูลการตรวจสอบสิทธิ์ ออบเจ็กต์ AuthenticationInfo มีตัวยึดตําแหน่ง principalEmail ของ audit-pending-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com

  • การตรวจสอบสิทธิ์ของ Google การดำเนินการที่ใช้ Google มาตรฐาน Realtime Database รายการ การตรวจสอบสิทธิ์ เช่น การรับส่งข้อมูลจากคำขอ 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 ของคําขอนั้น
  • ไม่มีการตรวจสอบสิทธิ์ การดำเนินการ 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: ได้รับสิทธิ์อ่านตามเส้นทางที่ระบุไว้ใน resource
  • firebasedatabase.data.update: ให้สิทธิ์เขียนที่เส้นทางที่ระบุใน resource
  • firebasedatabase.data.connect: ตัวยึดตําแหน่งสำหรับ Connect และ Disconnect ไม่ต้องมีการให้สิทธิ์เพื่อเชื่อมต่อกับอินสแตนซ์ Realtime Database
  • firebasedatabase.data.cancel: ใช้สำหรับ Unlisten และ OnDisconnectCancel ไม่จำเป็นต้องเพิกถอนหรือยกเลิกการดำเนินการที่ได้รับอนุญาตก่อนหน้านี้ การกันวงเงิน

เชื่อมโยงบันทึกการตรวจสอบระบบคลาวด์กับผลการค้นหาของ Realtime Database Profiler

คุณสามารถวิเคราะห์ประสิทธิภาพโดยละเอียดได้ใน Realtime Database โดยใช้ เครื่องมือสร้างโปรไฟล์ Realtime Database ร่วมกับ การบันทึกการตรวจสอบ Realtime Database เครื่องมือแต่ละอย่างมีจุดแข็งของตัวเอง

Cloud Audit Logging Realtime Database เครื่องมือสร้างโปรไฟล์
  • การเข้าถึงฐานข้อมูลของการตรวจสอบ
  • บันทึกคำขอทั้งหมดอย่างต่อเนื่อง
  • อนุญาตให้ค้นหาย้อนหลัง
  • มีข้อมูลโทเค็นการตรวจสอบสิทธิ์โดยละเอียด
  • ทำให้เกิดค่าใช้จ่ายในการใช้งาน
  • ใช้สําหรับการวิเคราะห์ประสิทธิภาพ
  • ให้เครื่องมือที่เป็นประโยชน์สำหรับการระบุฮอตสปอตและประสิทธิภาพ การเพิ่มประสิทธิภาพ
  • สามารถวัด ผู้ฟัง-ประกาศ ซึ่งไม่มีในบันทึกการตรวจสอบ เนื่องจากอาจมีปริมาณข้อมูล
  • น้ำหนักเบาและเป็นแบบเรียลไทม์ จึงเหมาะสำหรับการทดสอบการโหลดแบบสด การตรวจสอบ รายการบันทึกอาจใช้เวลาสักครู่จึงจะปรากฏ

เนื้อหาบันทึกการตรวจสอบจะสอดคล้องกับเมตริกเครื่องมือสร้างโปรไฟล์ดังที่แสดงด้านล่าง

ชื่อการดำเนินการบันทึกการตรวจสอบ ค่าพิเศษใน
RealtimeDatabaseAuditMetadata
ชื่อการดำเนินการของเครื่องมือวิเคราะห์
เชื่อมต่อ RequestType คือ REALTIME การเชื่อมต่อพร้อมกัน
ยกเลิกการเชื่อมต่อ RequestType คือ REALTIME ยกเลิกการเชื่อมต่อพร้อมกัน
อ่าน RequestType คือ REALTIME อ่านแบบเรียลไทม์
อ่าน RequestType คือ REST พักผ่อนอ่าน
เขียน RequestType คือ REALTIME เขียนแบบเรียลไทม์
เขียน RequestType คือ REST rest-write
อัปเดต RequestType ถือว่า REALTIME
เลือก PreconditionType
realtime-update
realtime-transaction
อัปเดต RequestType ถือว่า REST
เลือก PreconditionType
การอัปเดตส่วนที่เหลือ
ธุรกรรมส่วนที่เหลือ
Listener RequestType คือ REALTIME ผู้ฟัง
เลิกฟัง Listener RequestType คือ REALTIME listener-unlisten
เมื่อตัดการเชื่อมต่อใส่ RequestType คือ REALTIME on-disconnect-put
OnDisconnectUpdate RequestType คือ REALTIME on-disconnect-update
เมื่อยกเลิกการเชื่อมต่อยกเลิก RequestType คือ REALTIME on-disconnect-cancel
ยกเลิกการเชื่อมต่อ RunOn RequestType คือ REALTIME เรียกใช้เมื่อยกเลิกการเชื่อมต่อ