Ghi nhật ký kiểm tra Cơ sở dữ liệu theo thời gian thực của Firebase

Tài liệu này mô tả việc ghi nhật ký kiểm tra cho Cơ sở dữ liệu theo thời gian thực của Firebase. Google Cloud dịch vụ tạo nhật ký kiểm tra ghi lại các hoạt động quản trị và truy cập trong tài nguyên Google Cloud của bạn. Để biết thêm thông tin về Nhật ký kiểm tra trên Cloud, hãy xem các bài viết sau:

Lưu ý

Bạn có thể xem thêm thông tin về các trường trong protoPayload.metadata cho các thao tác DATA_READDATA_WRITEtrong tài liệu tham khảo.

Tên dịch vụ

Nhật ký kiểm tra Cơ sở dữ liệu theo thời gian thực của Firebase sử dụng tên dịch vụ là firebasedatabase.googleapis.com. Lọc cho dịch vụ này:

    protoPayload.serviceName="firebasedatabase.googleapis.com"
  

Phương thức theo loại quyền

Mỗi quyền IAM có một thuộc tính type, giá trị của thuộc tính này là một enum có thể là một trong bốn giá trị: ADMIN_READ, ADMIN_WRITE, DATA_READ hoặc DATA_WRITE. Khi bạn gọi một phương thức, Cơ sở dữ liệu thời gian thực Firebase sẽ tạo một nhật ký kiểm tra có danh mục phụ thuộc vào thuộc tính type của quyền cần thiết để thực hiện phương thức đó. Những phương thức yêu cầu quyền IAM với giá trị thuộc tính type trong số DATA_READ, DATA_WRITE hoặc ADMIN_READ sẽ tạo Nhật ký kiểm tra Quyền truy cập dữ liệu. Các phương thức yêu cầu quyền IAM với giá trị thuộc tính typeADMIN_WRITE sẽ tạo nhật ký kiểm tra Hoạt động của quản trị viên.

Loại quyền Phương thức
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

Nhật ký kiểm tra giao diện API

Để biết thông tin về cách thức và quyền nào được đánh giá cho từng phương thức, hãy xem tài liệu về Cloud Identity and Access Management (Quản lý quyền truy cập và danh tính trên đám mây) cho Cơ sở dữ liệu thời gian thực Firebase.

google.firebase.database.v1.RealtimeDatabase

Các nhật ký kiểm tra sau được liên kết với các phương thức thuộc về google.firebase.database.v1.RealtimeDatabase.

Connect

  • Phương thức: google.firebase.database.v1.RealtimeDatabase.Connect
  • Loại nhật ký kiểm tra: Truy cập dữ liệu
  • Quyền:
    • firebasedatabase.data.connect - DATA_READ
  • Phương thức là một thao tác phát trực tuyến hoặc chạy trong thời gian dài: Không.
  • Lọc theo phương thức này: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Connect"

Disconnect

  • Phương thức: google.firebase.database.v1.RealtimeDatabase.Disconnect
  • Loại nhật ký kiểm tra: Quyền truy cập vào dữ liệu
  • Quyền:
    • firebasedatabase.data.connect - DATA_READ
  • Phương thức là một thao tác phát trực tuyến hoặc chạy trong thời gian dài: Không.
  • Bộ lọc cho phương pháp này: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Disconnect"

Listen

  • Phương thức: google.firebase.database.v1.RealtimeDatabase.Listen
  • Loại nhật ký kiểm tra: Quyền truy cập vào dữ liệu
  • Quyền:
    • firebasedatabase.data.get - DATA_READ
  • Phương thức là một thao tác phát trực tuyến hoặc chạy trong thời gian dài: Không.
  • Lọc theo phương thức này: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Listen"

OnDisconnectCancel

  • Phương thức: google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel
  • Loại nhật ký kiểm tra: Truy cập dữ liệu
  • Quyền:
    • firebasedatabase.data.cancel - DATA_READ
  • Phương thức là một thao tác truyền trực tuyến hoặc diễn ra trong thời gian dài: Số
  • Lọc theo phương thức này: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel"

OnDisconnectPut

  • Phương thức: google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut
  • Loại nhật ký kiểm tra: Truy cập dữ liệu
  • Quyền:
    • firebasedatabase.data.update - DATA_WRITE
  • Phương thức là một thao tác truyền trực tuyến hoặc diễn ra trong thời gian dài: Số
  • Lọc theo phương thức này: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut"

OnDisconnectUpdate

  • Phương thức: google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate
  • Loại nhật ký kiểm tra: Quyền truy cập vào dữ liệu
  • Quyền:
    • firebasedatabase.data.update - DATA_WRITE
  • Phương thức là một thao tác phát trực tuyến hoặc chạy trong thời gian dài: Không.
  • Lọc theo phương thức này: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate"

Read

  • Phương thức: google.firebase.database.v1.RealtimeDatabase.Read
  • Loại nhật ký kiểm tra: Truy cập dữ liệu
  • Quyền:
    • firebasedatabase.data.get - DATA_READ
  • Phương thức là một thao tác phát trực tuyến hoặc chạy trong thời gian dài: Không.
  • Lọc theo phương thức này: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Read"

RunOnDisconnect

  • Phương thức: google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect
  • Loại nhật ký kiểm tra: Quyền truy cập vào dữ liệu
  • Quyền:
    • firebasedatabase.data.update - DATA_WRITE
  • Phương thức là một thao tác truyền trực tuyến hoặc diễn ra trong thời gian dài: Số
  • Lọc theo phương thức này: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect"

Unlisten

  • Phương thức: google.firebase.database.v1.RealtimeDatabase.Unlisten
  • Loại nhật ký kiểm tra: Quyền truy cập vào dữ liệu
  • Quyền:
    • firebasedatabase.data.cancel - DATA_READ
  • Phương thức là một thao tác truyền trực tuyến hoặc diễn ra trong thời gian dài: Số
  • Bộ lọc cho phương pháp này: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Unlisten"

Update

  • Phương thức: google.firebase.database.v1.RealtimeDatabase.Update
  • Loại nhật ký kiểm tra: Truy cập dữ liệu
  • Quyền:
    • firebasedatabase.data.get - DATA_WRITE
    • firebasedatabase.data.update - DATA_WRITE
  • Phương thức là một thao tác truyền trực tuyến hoặc diễn ra trong thời gian dài: Số
  • Lọc theo phương thức này: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Update"

Write

  • Phương thức: google.firebase.database.v1.RealtimeDatabase.Write
  • Loại nhật ký kiểm tra: Quyền truy cập vào dữ liệu
  • Quyền:
    • firebasedatabase.data.update - DATA_WRITE
  • Phương thức là một thao tác phát trực tuyến hoặc chạy trong thời gian dài: Không.
  • Bộ lọc cho phương pháp này: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Write"

google.firebase.database.v1beta.RealtimeDatabaseService

Các nhật ký kiểm tra sau được liên kết với các phương thức thuộc về google.firebase.database.v1beta.RealtimeDatabaseService.

CreateDatabaseInstance

  • Phương thức: google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance
  • Loại nhật ký kiểm tra: Hoạt động của quản trị viên
  • Quyền:
    • firebasedatabase.instances.create - ADMIN_WRITE
  • Phương thức là một thao tác truyền trực tuyến hoặc diễn ra trong thời gian dài: Số
  • Lọc theo phương thức này: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance"

DeleteDatabaseInstance

  • Phương thức: google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance
  • Loại nhật ký kiểm tra: Hoạt động của quản trị viên
  • Quyền:
    • firebasedatabase.instances.delete - ADMIN_WRITE
  • Phương thức là một thao tác truyền trực tuyến hoặc diễn ra trong thời gian dài: Số
  • Bộ lọc cho phương pháp này: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance"

DisableDatabaseInstance

  • Phương thức: google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance
  • Loại nhật ký kiểm tra: Hoạt động của quản trị viên
  • Quyền:
    • firebasedatabase.instances.disable - ADMIN_WRITE
  • Phương thức là một thao tác phát trực tuyến hoặc chạy trong thời gian dài: Không.
  • Bộ lọc cho phương pháp này: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance"

GetDatabaseInstance

  • Phương thức: google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance
  • Loại nhật ký kiểm tra: Quyền truy cập vào dữ liệu
  • Quyền:
    • firebasedatabase.instances.get - ADMIN_READ
  • Phương thức là một thao tác phát trực tuyến hoặc chạy trong thời gian dài: Không.
  • Bộ lọc cho phương pháp này: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance"

ListDatabaseInstances

  • Phương thức: google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances
  • Loại nhật ký kiểm tra: Truy cập dữ liệu
  • Quyền:
    • firebasedatabase.instances.list - ADMIN_READ
  • Phương thức là một thao tác phát trực tuyến hoặc chạy trong thời gian dài: Không.
  • Lọc theo phương thức này: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances"

ReenableDatabaseInstance

  • Phương thức: google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance
  • Loại nhật ký kiểm tra: Hoạt động của quản trị viên
  • Quyền:
    • firebasedatabase.instances.reenable - ADMIN_WRITE
  • Phương thức là một thao tác truyền trực tuyến hoặc diễn ra trong thời gian dài: Số
  • Lọc theo phương thức này: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance"

UndeleteDatabaseInstance

  • Phương thức: google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance
  • Loại nhật ký kiểm tra: Hoạt động của quản trị viên
  • Quyền:
    • firebasedatabase.instances.undelete - ADMIN_WRITE
  • Phương thức là một thao tác phát trực tuyến hoặc chạy trong thời gian dài: Không.
  • Lọc theo phương thức này: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance"

Kiểm tra thông tin xác thực

Các mục nhập nhật ký kiểm tra bao gồm thông tin về danh tính đã thực hiện thao tác đã ghi nhật ký. Để xác định một yêu cầu phương thức gọi, hãy xem các trường sau trong đối tượng CheckLog:

  • Thiết lập kết nối theo thời gian thực. Các thao tác Realtime Database Connect không ghi nhật ký dữ liệu xác thực vì Realtime Database xác thực sau khi thiết lập kết nối. Do đó, Connect không có thông tin xác thực. Đối tượng AuthenticationInfo chứa phần giữ chỗ principalEmailaudit-pending-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com.

  • Xác thực bằng Google. Các thao tác Realtime Database sử dụng tính năng Xác thực Google tiêu chuẩn, chẳng hạn như lưu lượng truy cập từ Firebase Admin SDK hoặc các yêu cầu REST được xác thực bằng mã thông báo OAuth tiêu chuẩn, có đối tượng AuthenticationInfo chứa email thông tin xác thực thực tế.

  • Firebase Authentication. Các thao tác Realtime Database sử dụng Firebase Authentication có một đối tượng AuthenticationInfo chứa giá trị principalEmailaudit-third-party-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com. Điều này cũng đúng nếu bạn triển khai giải pháp xác thực của riêng mình bằng cách đúc JWT tuỳ chỉnh.

    • Nếu bạn sử dụng Mã thông báo web JSON (JWT) để xác thực bên thứ ba, thì trường thirdPartyPrincipal sẽ bao gồm tiêu đề và tải trọng của mã thông báo. Ví dụ: nhật ký kiểm tra cho các yêu cầu được xác thực bằng Firebase Authentication bao gồm mã thông báo Firebase Authentication của yêu cầu đó.
  • Không có quy trình xác thực. Các thao tác Realtime Database không sử dụng bất kỳ xác thực có một đối tượng AuthenticationInfo chứa một Giá trị principalEmail trong số audit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com Một thực thể Realtime Database có quy tắc bảo mật mở có thể chấp nhận các yêu cầu như vậy. Tất cả người dùng nên bảo mật cơ sở dữ liệu của họ đúng cách.

  • Mã thông báo bí mật cũ. Các thao tác Realtime Database sử dụng mã thông báo cũ có một đối tượng AuthenticationInfo chứa phần giữ chỗ principalEmail của audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com. Đối với JWT được ký bí mật, thirdPartyPrincipal chứa tiêu đề JWT và tải trọng.

Kiểm tra các đánh giá Firebase Security Rules

Bạn có thể dùng nhật ký kiểm tra trên đám mây để xác định những yêu cầu có thể bị ảnh hưởng bởi các thay đổi về Rules.

Trong đối tượng PermissionsInfo, authorization.permission có thể là một trong các trạng thái sau:

  • firebasedatabase.data.get: Quyền đọc được cấp tại đường dẫn được chỉ định trong resource.
  • firebasedatabase.data.update: Cấp quyền ghi tại đường dẫn được chỉ định trong resource.
  • firebasedatabase.data.connect: Phần giữ chỗ cho ConnectDisconnect. Không cần uỷ quyền để kết nối với một thực thể Realtime Database.
  • firebasedatabase.data.cancel: Dùng cho UnlistenOnDisconnectCancel. Bạn không cần phải uỷ quyền thêm khi thu hồi hoặc huỷ một thao tác đã được uỷ quyền trước đó.

Liên kết nhật ký kiểm tra trên Cloud với kết quả của trình phân tích tài nguyên Realtime Database

Bạn có thể phân tích hiệu suất chuyên sâu trên Realtime Database bằng cách sử dụng Trình phân tích tài nguyên Realtime Database kết hợp với Ghi nhật ký kiểm tra Realtime Database. Mỗi công cụ đều có thế mạnh riêng.

Cloud Audit Logging Trình phân tích tài nguyên trên Realtime Database
  • Kiểm tra quyền truy cập vào cơ sở dữ liệu
  • Liên tục ghi lại mọi yêu cầu
  • Cho phép truy vấn hồi cứu
  • Chứa thông tin chi tiết về mã thông báo xác thực
  • Tính phí sử dụng
  • Dùng để phân tích hiệu suất
  • Cung cấp các công cụ hữu ích để xác định điểm phát sóng, nhờ đó tối ưu hoá hiệu suất
  • Có thể đo lường listener-broadcast, không có trong Nhật ký kiểm tra do lượng dữ liệu tiềm năng
  • Nhẹ và theo thời gian thực, rất phù hợp cho quy trình kiểm thử tải trực tiếp. Có thể mất vài phút thì các mục trong nhật ký kiểm tra mới xuất hiện.

Nội dung nhật ký kiểm tra tương ứng với các chỉ số của trình phân tích tài nguyên như minh hoạ dưới đây.

Tên thao tác Ghi nhật ký kiểm tra Giá trị đặc biệt trong
RealtimeDatabaseAuditMetadata
Tên hoạt động của trình phân tích tài nguyên
Kết nối RequestTypeREALTIME concurrent-connect
Ngắt kết nối RequestTypeREALTIME ngắt kết nối đồng thời
Đã đọc RequestTypeREALTIME đọc theo thời gian thực
Đã đọc RequestTypeREST đọc khi nghỉ ngơi
Viết RequestTypeREALTIME realtime-write
Viết RequestTypeREST rest-write
Cập nhật RequestTypeREALTIME.
Đánh dấu vào PreconditionType.
realtime-update
realtime-transaction
Cập nhật RequestTypeREST.
Hãy xem PreconditionType.
nghỉ-cập nhật
thời gian nghỉ-giao dịch
ListenerListen RequestTypeREALTIME nghe-Nghe
ListenerUnlisten RequestTypeREALTIME listener-unlisten
Bật tính năng ngắt kết nối RequestTypeREALTIME khi-ngắt kết nối-đặt
Khi ngắt kết nối cập nhật RequestTypeREALTIME on-disconnect-update
Khi huỷ kết nối RequestTypeREALTIME on-disconnect-cancel
RunOnNgắt kết nối RequestTypeREALTIME ngắt kết nối khi chạy