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.GetDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances |
ADMIN_WRITE |
google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance |
DATA_READ |
google.firebase.database.v1.RealtimeDatabase.Connectgoogle.firebase.database.v1.RealtimeDatabase.Disconnectgoogle.firebase.database.v1.RealtimeDatabase.Listengoogle.firebase.database.v1.RealtimeDatabase.OnDisconnectCancelgoogle.firebase.database.v1.RealtimeDatabase.Readgoogle.firebase.database.v1.RealtimeDatabase.Unlisten |
DATA_WRITE |
google.firebase.database.v1.RealtimeDatabase.OnDisconnectPutgoogle.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdategoogle.firebase.database.v1.RealtimeDatabase.RunOnDisconnectgoogle.firebase.database.v1.RealtimeDatabase.Updategoogle.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_WRITEfirebasedatabase.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
Connectkhô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 đó,Connectkhông có thông tin xác thực. Đối tượngAuthenticationInfochứa một phần giữ chỗprincipalEmailcủ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
AuthenticationInfochứ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
AuthenticationInfochứa giá trịprincipalEmaillà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
thirdPartyPrincipalsẽ 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
AuthenticationInfochứa giá trịprincipalEmaillà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
AuthenticationInfochứa một phần giữ chỗprincipalEmailcủaaudit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com. Đối với JWT được ký bằng khoá bí mật,thirdPartyPrincipalchứ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ỗ choConnectvà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 choUnlistenvà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 |