Bu belgede, Firebase Realtime Database için denetim günlüğü açıklanmaktadır. Google Cloud hizmetleri, Google Cloud kaynaklarınızdaki yönetim ve erişim etkinliklerini kaydeden denetleme günlükleri oluşturur. Cloud Denetleme Günlükleri hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın:
- Denetleme günlüğü türleri
- Denetleme günlüğü girişi yapısı
- Denetleme günlüklerini depolama ve yönlendirme
- Cloud Logging fiyatlandırması özeti
- Veri Erişimi denetleme günlüklerini etkinleştirme
Notlar
protoPayload.metadata içindeki DATA_READ ve DATA_WRITE işlemleriyle ilgili alanlar hakkında ek bilgiyi referans belgelerinde bulabilirsiniz.
Hizmet adı
Firebase Realtime Database denetleme günlüklerinde firebasedatabase.googleapis.com hizmet adı kullanılır.
Bu hizmet için filtrele:
protoPayload.serviceName="firebasedatabase.googleapis.com"
İzin türüne göre yöntemler
Her IAM izninin bir type özelliği vardır. Bu özelliğin değeri, dört değerden biri olabilen bir enum'dur: ADMIN_READ, ADMIN_WRITE, DATA_READ veya DATA_WRITE. Bir yöntemi çağırdığınızda Firebase Realtime Database, kategorisi yöntemi gerçekleştirmek için gereken iznin type özelliğine bağlı olan bir denetim günlüğü oluşturur.
type özelliği değeri DATA_READ, DATA_WRITE veya ADMIN_READ olan bir IAM izni gerektiren yöntemler Veri Erişimi denetleme günlükleri oluşturur.
type özellik değerine sahip bir IAM izni gerektiren yöntemler
ADMIN_WRITE oluşturur
Yönetici Etkinliği denetim günlükleri.
| İzin türü | Yöntemler |
|---|---|
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 |
API arayüzü denetleme günlükleri
Her yöntem için hangi izinlerin nasıl değerlendirildiği hakkında bilgi edinmek için Firebase Realtime Database ile ilgili Cloud Identity and Access Management dokümanlarına bakın.
google.firebase.database.v1.RealtimeDatabase
Aşağıdaki denetleme günlükleri, google.firebase.database.v1.RealtimeDatabase yöntemleriyle ilişkilidir.
Connect
- Yöntem:
google.firebase.database.v1.RealtimeDatabase.Connect - Denetleme günlüğü türü: Veri erişimi
- İzinler:
firebasedatabase.data.connect - DATA_READ
- Yöntem, uzun süren veya akış işlemi:
Hayır.
- Bu yöntem için filtre:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Connect"
Disconnect
- Yöntem:
google.firebase.database.v1.RealtimeDatabase.Disconnect - Denetleme günlüğü türü: Veri erişimi
- İzinler:
firebasedatabase.data.connect - DATA_READ
- Yöntem, uzun süren veya akış işlemi:
Hayır.
- Bu yöntem için filtre:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Disconnect"
Listen
- Yöntem:
google.firebase.database.v1.RealtimeDatabase.Listen - Denetleme günlüğü türü: Veri erişimi
- İzinler:
firebasedatabase.data.get - DATA_READ
- Yöntem, uzun süren veya akış işlemi:
Hayır.
- Bu yöntem için filtre:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Listen"
OnDisconnectCancel
- Yöntem:
google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel - Denetleme günlüğü türü: Veri erişimi
- İzinler:
firebasedatabase.data.cancel - DATA_READ
- Yöntem, uzun süren veya akış işlemi:
Hayır.
- Bu yöntem için filtre:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel"
OnDisconnectPut
- Yöntem:
google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut - Denetleme günlüğü türü: Veri erişimi
- İzinler:
firebasedatabase.data.update - DATA_WRITE
- Yöntem, uzun süren veya akış işlemi:
Hayır.
- Bu yöntem için filtre:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut"
OnDisconnectUpdate
- Yöntem:
google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate - Denetleme günlüğü türü: Veri erişimi
- İzinler:
firebasedatabase.data.update - DATA_WRITE
- Yöntem, uzun süren veya akış işlemi:
Hayır.
- Bu yöntem için filtre:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate"
Read
- Yöntem:
google.firebase.database.v1.RealtimeDatabase.Read - Denetleme günlüğü türü: Veri erişimi
- İzinler:
firebasedatabase.data.get - DATA_READ
- Yöntem, uzun süren veya akış işlemi:
Hayır.
- Bu yöntem için filtre:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Read"
RunOnDisconnect
- Yöntem:
google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect - Denetleme günlüğü türü: Veri erişimi
- İzinler:
firebasedatabase.data.update - DATA_WRITE
- Yöntem, uzun süren veya akış işlemi:
Hayır.
- Bu yöntem için filtre:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect"
Unlisten
- Yöntem:
google.firebase.database.v1.RealtimeDatabase.Unlisten - Denetleme günlüğü türü: Veri erişimi
- İzinler:
firebasedatabase.data.cancel - DATA_READ
- Yöntem, uzun süren veya akış işlemi:
Hayır.
- Bu yöntem için filtre:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Unlisten"
Update
- Yöntem:
google.firebase.database.v1.RealtimeDatabase.Update - Denetleme günlüğü türü: Veri erişimi
- İzinler:
firebasedatabase.data.get - DATA_WRITEfirebasedatabase.data.update - DATA_WRITE
- Yöntem, uzun süren veya akış işlemi:
Hayır.
- Bu yöntem için filtre:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Update"
Write
- Yöntem:
google.firebase.database.v1.RealtimeDatabase.Write - Denetleme günlüğü türü: Veri erişimi
- İzinler:
firebasedatabase.data.update - DATA_WRITE
- Yöntem, uzun süren veya akış işlemi:
Hayır.
- Bu yöntem için filtre:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Write"
google.firebase.database.v1beta.RealtimeDatabaseService
Aşağıdaki denetleme günlükleri, google.firebase.database.v1beta.RealtimeDatabaseService yöntemleriyle ilişkilidir.
CreateDatabaseInstance
- Yöntem:
google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance - Denetleme günlüğü türü: Yönetici etkinliği
- İzinler:
firebasedatabase.instances.create - ADMIN_WRITE
- Yöntem, uzun süren veya akış işlemi:
Hayır.
- Bu yöntem için filtre:
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance"
DeleteDatabaseInstance
- Yöntem:
google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance - Denetleme günlüğü türü: Yönetici etkinliği
- İzinler:
firebasedatabase.instances.delete - ADMIN_WRITE
- Yöntem, uzun süren veya akış işlemi:
Hayır.
- Bu yöntem için filtre:
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance"
DisableDatabaseInstance
- Yöntem:
google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance - Denetleme günlüğü türü: Yönetici etkinliği
- İzinler:
firebasedatabase.instances.disable - ADMIN_WRITE
- Yöntem, uzun süren veya akış işlemi:
Hayır.
- Bu yöntem için filtre:
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance"
GetDatabaseInstance
- Yöntem:
google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance - Denetleme günlüğü türü: Veri erişimi
- İzinler:
firebasedatabase.instances.get - ADMIN_READ
- Yöntem, uzun süren veya akış işlemi:
Hayır.
- Bu yöntem için filtre:
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance"
ListDatabaseInstances
- Yöntem:
google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances - Denetleme günlüğü türü: Veri erişimi
- İzinler:
firebasedatabase.instances.list - ADMIN_READ
- Yöntem, uzun süren veya akış işlemi:
Hayır.
- Bu yöntem için filtre:
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances"
ReenableDatabaseInstance
- Yöntem:
google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance - Denetleme günlüğü türü: Yönetici etkinliği
- İzinler:
firebasedatabase.instances.reenable - ADMIN_WRITE
- Yöntem, uzun süren veya akış işlemi:
Hayır.
- Bu yöntem için filtre:
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance"
UndeleteDatabaseInstance
- Yöntem:
google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance - Denetleme günlüğü türü: Yönetici etkinliği
- İzinler:
firebasedatabase.instances.undelete - ADMIN_WRITE
- Yöntem, uzun süren veya akış işlemi:
Hayır.
- Bu yöntem için filtre:
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance"
Kimlik doğrulama bilgilerini denetleme
Denetleme günlüğü girişleri, günlüğe kaydedilen işlemi gerçekleştiren kimlik hakkında bilgiler içerir. İstek çağırıcıyı belirlemek için AuditLog nesnesindeki aşağıdaki alanlara bakın:
Anlık bağlantılar kurma. Realtime Database
Connectişlemleri, bağlantı kurulduktan sonra Realtime Database kimlik doğrulaması yaptığından kimlik doğrulama verilerini kaydetmez. Bu nedenle,Connectkimlik doğrulama bilgisi içermiyor.AuthenticationInfonesnesi,audit-pending-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.comdeğerine sahip bir yer tutucuprincipalEmailiçeriyor.Google Kimlik Doğrulaması. Realtime Database veya REST isteklerinden gelen trafik gibi standart Google Kimlik Doğrulama'yı kullanan Realtime Database işlemleri, standart bir OAuth jetonuyla kimliği doğrulanmış gerçek kimlik bilgilerini içeren bir
AuthenticationInfonesnesine sahiptir.Firebase Admin SDKFirebase Authentication. Realtime Database işlemlerinde Firebase Authentication kullanılan
AuthenticationInfonesnesindeprincipalEmaildeğeriaudit-third-party-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.comolan bir nesne bulunur. Kendi kimlik doğrulama çözümünüzü özel JWT'ler oluşturarak uygularsanız da aynı durum geçerlidir.- Üçüncü taraf kimlik doğrulaması için JSON Web Token (JWT) kullanıldıysa
thirdPartyPrincipalalanı, jetonun başlığını ve yükünü içerir. Örneğin, Firebase Authentication ile kimliği doğrulanan isteklerin denetim günlükleri, bu isteğin Firebase Authentication jetonunu içerir.
- Üçüncü taraf kimlik doğrulaması için JSON Web Token (JWT) kullanıldıysa
Kimlik doğrulama yok. Realtime Database kimlik doğrulama kullanmayan işlemlerin
AuthenticationInfonesnesindeprincipalEmaildeğeriaudit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.comolan bir Realtime Database örneği bulunur. Açık güvenlik kuralları olan bir Realtime Database örneği bu tür istekleri verebilir. Tüm kullanıcıların veritabanlarını uygun şekilde güvenli hale getirmelerini öneririz.Eski gizli anahtar jetonları. Eski jetonlar kullanan Realtime Database işlemlerinde,
AuthenticationInfonesnesi bulunur. Bu nesne,audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.comdeğerininprincipalEmailyer tutucusunu içerir. Gizli anahtarla imzalanmış JWT içinthirdPartyPrincipal, JWT başlıklarını ve yükünü içerir.
Denetim Firebase Security Rules değerlendirmeleri
Cloud Audit günlükleri, Rules değişikliklerinden etkilenme olasılığı olan istekleri belirlemek için kullanılabilir.
AuthorizationInfo nesnesinde authorization.permission şu değerlerden biri olabilir:
firebasedatabase.data.get:resourceiçinde belirtilen yolda okuma erişimi verilir.firebasedatabase.data.update:resourceiçinde belirtilen yolda yazma erişimi izni verildi.firebasedatabase.data.connect:ConnectveDisconnectiçin yer tutucu. Realtime Database örneğine bağlanmak için yetkilendirme gerekmez.firebasedatabase.data.cancel:UnlistenveOnDisconnectCanceliçin kullanılır. Daha önce yetkilendirilmiş bir işlemin iptal edilmesi veya geri alınması için ek yetkilendirme gerekmez.
Cloud Denetleme Günlüklerini Realtime Database profiler sonuçlarıyla ilişkilendirme
Realtime Database denetleme günlüğü kaydıyla birlikte Realtime Database profiler'ı kullanarak Realtime Database üzerinde ayrıntılı performans analizi yapabilirsiniz. Her aracın güçlü yönleri vardır.
| Cloud Audit Logging | Realtime Database profiler |
|---|---|
|
|
Denetim günlüğü içerikleri, aşağıda gösterildiği gibi profil oluşturucu metriklerine karşılık gelir.
| Denetleme günlüğü işlem adı | RealtimeDatabaseAuditMetadata içindeki özel değerler |
Profiler işlem adı |
|---|---|---|
| Bağlan | RequestType: REALTIME |
concurrent-connect |
| Bağlantıyı kes | RequestType: REALTIME |
concurrent-disconnect |
| Okuma | RequestType: REALTIME |
realtime-read |
| Okuma | RequestType: REST |
rest-read |
| Yazma | RequestType: REALTIME |
realtime-write |
| Yazma | RequestType: REST |
rest-write |
| Güncelle | RequestType REALTIME.
Çek PreconditionType. |
realtime-update realtime-transaction |
| Güncelle | RequestType REST.
Çek 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 |
run-on-disconnect |