Tài liệu này mô tả nhật ký kiểm tra cho Cơ sở dữ liệu thời gian thực Firebase. Các dịch vụ Google Cloud tạo nhật ký kiểm tra để ghi lại các hoạt động quản trị và truy cập trong các 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 nội dung sau:
- Các loại nhật ký kiểm tra
- Cấu trúc mục nhật ký kiểm tra
- Lưu trữ và định tuyến nhật ký kiểm tra
- Tóm tắt giá của Cloud Logging
- 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ụ firebasedatabase.googleapis.com
.
Lọc theo dịch vụ này:
protoPayload.serviceName="firebasedatabase.googleapis.com"
Các phương thức theo loại quyền
Mỗi quyền IAM đều 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 4 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 đó.
Các phương thức yêu cầu quyền IAM có giá trị thuộc tính type
là 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 có giá trị thuộc tính type
là ADMIN_WRITE
tạo 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à những quyền được đánh giá cho từng phương thức, hãy xem tài liệu về Cloud Identity and Access Management 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 đây được liên kết với các phương thức thuộc google.firebase.database.v1.RealtimeDatabase
.
Connect
- Phương thức:
google.firebase.database.v1.RealtimeDatabase.Connect
- 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 diễn ra trong thời gian dài hoặc là một thao tác truyền trực tuyến: 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 diễn ra trong thời gian dài hoặc là một thao tác truyền trực tuyến: Không.
- Lọc theo phương thức 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 diễn ra trong thời gian dài hoặc là một thao tác truyền trực tuyến: 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: 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 diễn ra trong thời gian dài hoặc là một thao tác truyền trực tuyến: Không.
- 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: 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 diễn ra trong thời gian dài hoặc là một thao tác truyền trực tuyến: Không.
- 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 diễn ra trong thời gian dài hoặc là một thao tác truyền trực tuyến: 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: 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 diễn ra trong thời gian dài hoặc là một thao tác truyền trực tuyến: 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 diễn ra trong thời gian dài hoặc là một thao tác truyền trực tuyến: Không.
- 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 diễn ra trong thời gian dài hoặc là một thao tác truyền trực tuyến: Không.
- Lọc theo phương thức 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: Quyền truy cập vào 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 diễn ra trong thời gian dài hoặc là một thao tác truyền trực tuyến: Không.
- 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 diễn ra trong thời gian dài hoặc là một thao tác truyền trực tuyến: Không.
- Lọc theo phương thức này:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Write"
google.firebase.database.v1beta.RealtimeDatabaseService
Các nhật ký kiểm tra sau đây được liên kết với các phương thức thuộc 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 diễn ra trong thời gian dài hoặc là một thao tác truyền trực tuyến: Không.
- 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 diễn ra trong thời gian dài hoặc là một thao tác truyền trực tuyến: Không.
- Lọc theo phương thức 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 diễn ra trong thời gian dài hoặc là một thao tác truyền trực tuyến: Không.
- Lọc theo phương thức 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 diễn ra trong thời gian dài hoặc là một thao tác truyền trực tuyến: Không.
- Lọc theo phương thức 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: Quyền truy cập vào dữ liệu
- Quyền:
firebasedatabase.instances.list - ADMIN_READ
- Phương thức là một thao tác diễn ra trong thời gian dài hoặc là một thao tác truyền trực tuyến: 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 diễn ra trong thời gian dài hoặc là một thao tác truyền trực tuyến: Không.
- 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 diễn ra trong thời gian dài hoặc là một thao tác truyền trực tuyến: 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 của người thực hiện thao tác được ghi nhật ký. Để xác định người gọi yêu cầu, hãy xem các trường sau trong đối tượng AuditLog:
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 lại 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 một phần giữ chỗprincipalEmail
củaaudit-pending-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com
.Xác thực bằng Google. Realtime Database các thao tác sử dụng quy trình Xác thực chuẩn của Google, 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 chuẩn, có một đối tượng
AuthenticationInfo
chứa email thông tin đăng nhập 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 tạo JWT tuỳ chỉnh.- Nếu Mã thông báo web JSON (JWT) được dùng để xác thực bên thứ ba, thì trường
thirdPartyPrincipal
sẽ bao gồm tiêu đề và phần dữ liệu thực tế 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 sẽ bao gồm mã thông báo Firebase Authentication của yêu cầu đó.
- Nếu Mã thông báo web JSON (JWT) được dùng để 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ỳ phương thức xác thực nào đều có một đối tượng
AuthenticationInfo
chứa giá trịprincipalEmail
làaudit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com
. Một thực thể Realtime Database có các quy tắc bảo mật mở có thể cấp các yêu cầu như vậy. Chúng tôi khuyến nghị tất cả người dùng bảo mật cơ sở dữ liệu của họ một cách thích hợp.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 một phần giữ chỗprincipalEmail
củaaudit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com
. Đối với JWT được ký bằng khoá bí mật,thirdPartyPrincipal
chứa tiêu đề và tải trọng JWT.
Đánh giá Firebase Security Rules kiểm tra
Bạn có thể dùng nhật ký kiểm tra của Cloud để 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 AuthorizationInfo, authorization.permission
có thể là một trong những giá trị sau:
firebasedatabase.data.get
: Quyền đọc được cấp tại đường dẫn được chỉ định trongresource
.firebasedatabase.data.update
: Quyền ghi được cấp tại đường dẫn được chỉ định trongresource
.firebasedatabase.data.connect
: Phần giữ chỗ choConnect
vàDisconnect
. Bạn không cần uỷ quyền để kết nối với một phiên bản Realtime Database.firebasedatabase.data.cancel
: Dùng choUnlisten
vàOnDisconnectCancel
. Bạn không cần phải uỷ quyền thêm để thu hồi hoặc huỷ một thao tác đã được uỷ quyền trước đó.
Tương quan 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ể thực hiện phân tích hiệu suất chuyên sâu trên Realtime Database bằng cách kết hợp trình phân tích Realtime Database với tính năng ghi nhật ký kiểm tra Realtime Database. Mỗi công cụ đều có điểm mạnh riêng.
Cloud Audit Logging | Trình phân tích 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ạ bên dưới.
Tên thao tác ghi nhật ký kiểm tra | Giá trị đặc biệt trong RealtimeDatabaseAuditMetadata |
Tên thao tác của trình phân tích |
---|---|---|
Kết nối | RequestType là REALTIME |
concurrent-connect |
Ngắt kết nối | RequestType là REALTIME |
concurrent-disconnect |
Đã đọc | RequestType là REALTIME |
realtime-read |
Đã đọc | RequestType là REST |
rest-read |
Viết | RequestType là REALTIME |
realtime-write |
Viết | RequestType là REST |
rest-write |
Cập nhật | RequestType là REALTIME .
Séc PreconditionType . |
realtime-update realtime-transaction |
Cập nhật | RequestType là REST .
Séc PreconditionType . |
rest-update rest-transaction |
ListenerListen | RequestType là REALTIME |
listener-listen |
ListenerUnlisten | RequestType là REALTIME |
listener-unlisten |
OnDisconnectPut | RequestType là REALTIME |
on-disconnect-put |
OnDisconnectUpdate | RequestType là REALTIME |
on-disconnect-update |
OnDisconnectCancel | RequestType là REALTIME |
on-disconnect-cancel |
RunOnDisconnect | RequestType là REALTIME |
run-on-disconnect |