Firebase Realtime Database denetleme günlüğü

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:

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.

Aşağıdaki listede (LRO) ile işaretlenmiş API yöntemleri, uzun süreli işlemlerdir (LRO'lar). Bu yöntemler genellikle iki denetleme günlüğü girişi oluşturur: biri işlem başladığında, diğeri ise sona erdiğinde. Daha fazla bilgi için Uzun süren işlemler için denetleme günlükleri başlıklı makaleyi inceleyin.
İzin türü Yöntemler
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

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_WRITE
    • 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.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 Connect işlemleri, bağlantı kurulduktan sonra Realtime Database kimlik doğrulaması yaptığından kimlik doğrulama verilerini kaydetmez. Bu nedenle, Connect kimlik doğrulama bilgisi içermiyor. AuthenticationInfo nesnesi, audit-pending-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com değerine sahip bir yer tutucu principalEmail iç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 AuthenticationInfo nesnesine sahiptir.Firebase Admin SDK

  • Firebase Authentication. Realtime Database işlemlerinde Firebase Authentication kullanılan AuthenticationInfo nesnesinde principalEmail değeri audit-third-party-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com olan 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 thirdPartyPrincipal alanı, 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.
  • Kimlik doğrulama yok. Realtime Database kimlik doğrulama kullanmayan işlemlerin AuthenticationInfo nesnesinde principalEmail değeri audit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com olan 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, AuthenticationInfo nesnesi bulunur. Bu nesne, audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com değerinin principalEmail yer tutucusunu içerir. Gizli anahtarla imzalanmış JWT için thirdPartyPrincipal, 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: resource içinde belirtilen yolda okuma erişimi verilir.
  • firebasedatabase.data.update: resource içinde belirtilen yolda yazma erişimi izni verildi.
  • firebasedatabase.data.connect: Connect ve Disconnect için yer tutucu. Realtime Database örneğine bağlanmak için yetkilendirme gerekmez.
  • firebasedatabase.data.cancel: Unlisten ve OnDisconnectCancel iç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
  • Veritabanlarına erişimi denetler
  • Tüm istekleri sürekli olarak yakalar.
  • Geçmişe dönük sorgulamaya izin verir
  • Ayrıntılı kimlik doğrulama jetonu bilgileri içerir.
  • Kullanım maliyetine neden olur.
  • Performans analizi için kullanılır.
  • Hotspot tanımlama ve dolayısıyla performans optimizasyonu için faydalı araçlar sağlar.
  • Olası veri hacmi nedeniyle denetleme günlüklerinde kullanılamayan dinleyici-yayın ölçülebilir.
  • Hafif ve gerçek zamanlı olduğundan canlı yük testi için uygundur. Denetim günlüğü girişlerinin görünmesi birkaç dakika sürebilir.

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