การบันทึกการตรวจสอบของฐานข้อมูลเรียลไทม์ของ 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 ที่อาจเป็นค่าใดค่าหนึ่งใน 4 ค่า ได้แก่ ADMIN_READ, ADMIN_WRITE, DATA_READ หรือ DATA_WRITE เมื่อคุณเรียกใช้เมธอด ฐานข้อมูลเรียลไทม์ของ Firebase จะสร้างบันทึกการตรวจสอบซึ่งมีหมวดหมู่ขึ้นอยู่กับ type พร็อพเพอร์ตี้ของสิทธิ์ที่จำเป็นในการเรียกใช้เมธอด เมธอดที่ต้องใช้สิทธิ์ IAM ที่มีค่าพร็อพเพอร์ตี้ type เป็น DATA_READ, DATA_WRITE หรือ ADMIN_READ จะสร้างบันทึกการตรวจสอบการเข้าถึงข้อมูล เมธอดที่ต้องใช้สิทธิ์ IAM ที่มีค่าพร็อพเพอร์ตี้ type เป็น ADMIN_WRITEgenerate บันทึกการตรวจสอบกิจกรรมของผู้ดูแลระบบ

วิธีการ API ในรายการต่อไปนี้ที่มีเครื่องหมาย (LRO) คือการดำเนินการที่ใช้เวลานาน (LRO) โดยปกติแล้ววิธีเหล่านี้จะสร้างรายการบันทึกการตรวจสอบ 2 รายการ ได้แก่ รายการหนึ่งเมื่อการดำเนินการเริ่มต้นและ อีกรายการหนึ่งเมื่อการดำเนินการสิ้นสุด ดูข้อมูลเพิ่มเติมได้ที่บันทึกการตรวจสอบสำหรับการดำเนินการที่ใช้เวลานาน
ประเภทสิทธิ์ เมธอด
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

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 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 ของคำขอนั้น
  • ไม่มีการตรวจสอบสิทธิ์ 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 การเพิกถอนหรือยกเลิกการดำเนินการที่ได้รับอนุญาตก่อนหน้านี้ไม่จำเป็นต้องมีการให้สิทธิ์เพิ่มเติม

เชื่อมโยงบันทึกการตรวจสอบ Cloud กับRealtime Databaseผลลัพธ์ของโปรไฟล์เลอร์

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

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

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

ชื่อการดำเนินการของ 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 ทำงานต่อเมื่อยกเลิกการเชื่อมต่อ