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:
- Các loại nhật ký kiểm tra
- Cấu trúc mục nhập nhật ký kiểm tra
- Lưu trữ và định tuyến nhật ký kiểm tra
- Tóm tắt về giá của tính năng Ghi nhật ký đám mây
- Bật nhật ký kiểm tra Quyền truy cập dữ liệu
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_READ
và DATA_WRITE
trong 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 type
là ADMIN_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ượngAuthenticationInfo
chứa phần giữ chỗprincipalEmail
làaudit-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ịprincipalEmail
làaudit-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 đó.
- 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
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ủaaudit-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 trongresource
.firebasedatabase.data.update
: Cấp quyền ghi tại đường dẫn được chỉ định trongresource
.firebasedatabase.data.connect
: Phần giữ chỗ choConnect
vàDisconnect
. 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 choUnlisten
vàOnDisconnectCancel
. 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 |
---|---|
|
|
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 trongRealtimeDatabaseAuditMetadata |
Tên hoạt động của trình phân tích tài nguyên |
---|---|---|
Kết nối | RequestType là REALTIME |
concurrent-connect |
Ngắt kết nối | RequestType là REALTIME |
ngắt kết nối đồng thời |
Đã đọc | RequestType là REALTIME |
đọc theo thời gian thực |
Đã đọc | RequestType là REST |
đọc khi nghỉ ngơi |
Viết | RequestType là REALTIME |
realtime-write |
Viết | RequestType là REST |
rest-write |
Cập nhật | RequestType là REALTIME .
Đánh dấu vào PreconditionType . |
realtime-update realtime-transaction |
Cập nhật | RequestType là REST .
Hãy xem PreconditionType . |
nghỉ-cập nhật thời gian nghỉ-giao dịch |
ListenerListen | RequestType là REALTIME |
nghe-Nghe |
ListenerUnlisten | RequestType là REALTIME |
listener-unlisten |
Bật tính năng ngắt kết nối | RequestType là REALTIME |
khi-ngắt kết nối-đặt |
Khi ngắt kết nối cập nhật | RequestType là REALTIME |
on-disconnect-update |
Khi huỷ kết nối | RequestType là REALTIME |
on-disconnect-cancel |
RunOnNgắt kết nối | RequestType là REALTIME |
ngắt kết nối khi chạy |