ثبت حسابرسی پایگاه داده بیدرنگ Firebase

این سند، ثبت گزارش‌های حسابرسی برای پایگاه داده‌ی بلادرنگ Firebase را شرح می‌دهد. سرویس‌های Google Cloud گزارش‌های حسابرسی ایجاد می‌کنند که فعالیت‌های مدیریتی و دسترسی را در منابع Google Cloud شما ثبت می‌کنند. برای اطلاعات بیشتر در مورد گزارش‌های حسابرسی Cloud، به موارد زیر مراجعه کنید:

یادداشت‌ها

اطلاعات بیشتر در مورد فیلدهای موجود در protoPayload.metadata برای عملیات DATA_READ و DATA_WRITE در مستندات مرجع موجود است.

نام سرویس

گزارش‌های حسابرسی پایگاه داده بلادرنگ Firebase از نام سرویس firebasedatabase.googleapis.com استفاده می‌کنند. برای این سرویس فیلتر کنید:

    protoPayload.serviceName="firebasedatabase.googleapis.com"
  

روش‌ها بر اساس نوع مجوز

هر مجوز IAM یک ویژگی type دارد که مقدار آن یک enum است که می‌تواند یکی از چهار مقدار زیر باشد: ADMIN_READ ، ADMIN_WRITE ، DATA_READ یا DATA_WRITE . وقتی یک متد را فراخوانی می‌کنید، Firebase Realtime Database یک گزارش حسابرسی تولید می‌کند که دسته آن به ویژگی type مجوز مورد نیاز برای اجرای متد بستگی دارد. متدهایی که به مجوز IAM با مقدار ویژگی type DATA_READ ، DATA_WRITE یا ADMIN_READ نیاز دارند، گزارش‌های حسابرسی دسترسی به داده تولید می‌کنند. متدهایی که به مجوز IAM با مقدار ویژگی type ADMIN_WRITE نیاز دارند، گزارش‌های حسابرسی فعالیت ادمین تولید می‌کنند.

متدهای API در لیست زیر که با (LRO) مشخص شده‌اند، عملیات طولانی‌مدت (LRO) هستند. این متدها معمولاً دو ورودی گزارش حسابرسی ایجاد می‌کنند: یکی هنگام شروع عملیات و دیگری هنگام پایان آن. برای اطلاعات بیشتر به گزارش‌های حسابرسی برای عملیات طولانی‌مدت مراجعه کنید.
نوع مجوز روش‌ها
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

برای اطلاعات در مورد چگونگی و نوع مجوزهای ارزیابی شده برای هر روش، به مستندات مدیریت هویت و دسترسی ابری برای پایگاه داده بلادرنگ Firebase مراجعه کنید.

google.firebase.database.v1.RealtimeDatabase

گزارش‌های حسابرسی زیر با متدهای متعلق به google.firebase.database.v1.RealtimeDatabase مرتبط هستند.

Connect

  • روش : google.firebase.database.v1.RealtimeDatabase.Connect
  • نوع گزارش حسابرسی : دسترسی به داده
  • مجوزها :
    • firebasedatabase.data.connect - DATA_READ
  • متد یک عملیات طولانی مدت یا استریمینگ است : خیر.
  • فیلتر برای این متد : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Connect"

Disconnect

  • روش : google.firebase.database.v1.RealtimeDatabase.Disconnect
  • نوع گزارش حسابرسی : دسترسی به داده
  • مجوزها :
    • firebasedatabase.data.connect - DATA_READ
  • متد یک عملیات طولانی مدت یا استریمینگ است : خیر.
  • فیلتر برای این متد : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Disconnect"

Listen

  • روش : google.firebase.database.v1.RealtimeDatabase.Listen
  • نوع گزارش حسابرسی : دسترسی به داده
  • مجوزها :
    • firebasedatabase.data.get - DATA_READ
  • متد یک عملیات طولانی مدت یا استریمینگ است : خیر.
  • فیلتر برای این متد : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Listen"

OnDisconnectCancel

  • روش : google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel
  • نوع گزارش حسابرسی : دسترسی به داده
  • مجوزها :
    • firebasedatabase.data.cancel - DATA_READ
  • متد یک عملیات طولانی مدت یا استریمینگ است : خیر.
  • فیلتر برای این متد : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel"

OnDisconnectPut

  • روش : google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut
  • نوع گزارش حسابرسی : دسترسی به داده
  • مجوزها :
    • firebasedatabase.data.update - DATA_WRITE
  • متد یک عملیات طولانی مدت یا استریمینگ است : خیر.
  • فیلتر برای این متد : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut"

OnDisconnectUpdate

  • روش : google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate
  • نوع گزارش حسابرسی : دسترسی به داده
  • مجوزها :
    • firebasedatabase.data.update - DATA_WRITE
  • متد یک عملیات طولانی مدت یا استریمینگ است : خیر.
  • فیلتر برای این متد : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate"

Read

  • روش : google.firebase.database.v1.RealtimeDatabase.Read
  • نوع گزارش حسابرسی : دسترسی به داده
  • مجوزها :
    • firebasedatabase.data.get - DATA_READ
  • متد یک عملیات طولانی مدت یا استریمینگ است : خیر.
  • فیلتر برای این متد : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Read"

RunOnDisconnect

  • روش : google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect
  • نوع گزارش حسابرسی : دسترسی به داده
  • مجوزها :
    • firebasedatabase.data.update - DATA_WRITE
  • متد یک عملیات طولانی مدت یا استریمینگ است : خیر.
  • فیلتر برای این متد : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect"

Unlisten

  • روش : google.firebase.database.v1.RealtimeDatabase.Unlisten
  • نوع گزارش حسابرسی : دسترسی به داده
  • مجوزها :
    • firebasedatabase.data.cancel - DATA_READ
  • متد یک عملیات طولانی مدت یا استریمینگ است : خیر.
  • فیلتر برای این متد : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Unlisten"

Update

  • روش : google.firebase.database.v1.RealtimeDatabase.Update
  • نوع گزارش حسابرسی : دسترسی به داده
  • مجوزها :
    • firebasedatabase.data.get - DATA_WRITE
    • firebasedatabase.data.update - DATA_WRITE
  • متد یک عملیات طولانی مدت یا استریمینگ است : خیر.
  • فیلتر برای این متد : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Update"

Write

  • روش : google.firebase.database.v1.RealtimeDatabase.Write
  • نوع گزارش حسابرسی : دسترسی به داده
  • مجوزها :
    • firebasedatabase.data.update - DATA_WRITE
  • متد یک عملیات طولانی مدت یا استریمینگ است : خیر.
  • فیلتر برای این متد : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Write"

google.firebase.database.v1beta.RealtimeDatabaseService

گزارش‌های حسابرسی زیر با متدهای متعلق به google.firebase.database.v1beta.RealtimeDatabaseService مرتبط هستند.

CreateDatabaseInstance

  • متد : google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance
  • نوع گزارش حسابرسی : فعالیت مدیر
  • مجوزها :
    • firebasedatabase.instances.create - ADMIN_WRITE
  • متد یک عملیات طولانی مدت یا استریمینگ است : خیر.
  • فیلتر برای این متد : protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance"

DeleteDatabaseInstance

  • روش : google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance
  • نوع گزارش حسابرسی : فعالیت مدیر
  • مجوزها :
    • firebasedatabase.instances.delete - ADMIN_WRITE
  • متد یک عملیات طولانی مدت یا استریمینگ است : خیر.
  • فیلتر برای این متد : protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance"

DisableDatabaseInstance

  • روش : google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance
  • نوع گزارش حسابرسی : فعالیت مدیر
  • مجوزها :
    • firebasedatabase.instances.disable - ADMIN_WRITE
  • متد یک عملیات طولانی مدت یا استریمینگ است : خیر.
  • فیلتر برای این متد : protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance"

GetDatabaseInstance

  • متد : google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance
  • نوع گزارش حسابرسی : دسترسی به داده
  • مجوزها :
    • firebasedatabase.instances.get - ADMIN_READ
  • متد یک عملیات طولانی مدت یا استریمینگ است : خیر.
  • فیلتر برای این متد : protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance"

ListDatabaseInstances

  • روش : google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances
  • نوع گزارش حسابرسی : دسترسی به داده
  • مجوزها :
    • firebasedatabase.instances.list - ADMIN_READ
  • متد یک عملیات طولانی مدت یا استریمینگ است : خیر.
  • فیلتر برای این متد : protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances"

ReenableDatabaseInstance

  • متد : google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance
  • نوع گزارش حسابرسی : فعالیت مدیر
  • مجوزها :
    • firebasedatabase.instances.reenable - ADMIN_WRITE
  • متد یک عملیات طولانی مدت یا استریمینگ است : خیر.
  • فیلتر برای این متد : protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance"

UndeleteDatabaseInstance

  • روش : google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance
  • نوع گزارش حسابرسی : فعالیت مدیر
  • مجوزها :
    • firebasedatabase.instances.undelete - ADMIN_WRITE
  • متد یک عملیات طولانی مدت یا استریمینگ است : خیر.
  • فیلتر برای این متد : protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance"

اطلاعات احراز هویت حسابرسی

ورودی‌های گزارش حسابرسی شامل اطلاعاتی در مورد هویتی است که عملیات ثبت‌شده را انجام داده است. برای شناسایی یک فراخواننده درخواست، به فیلدهای زیر در شیء AuditLog مراجعه کنید:

  • ایجاد اتصالات بلادرنگ. عملیات Connect Realtime Database داده‌های احراز هویت را ثبت نمی‌کند، زیرا Realtime Database پس از برقراری اتصال، احراز هویت می‌شود. بنابراین، Connect هیچ اطلاعات احراز هویتی ندارد. شیء AuthenticationInfo حاوی یک placeholder principalEmail از audit-pending-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com است.

  • احراز هویت گوگل. عملیات Realtime Database که از احراز هویت استاندارد گوگل استفاده می‌کنند، مانند ترافیک دریافتی از Firebase Admin SDK یا درخواست‌های REST که با یک توکن استاندارد OAuth احراز هویت شده‌اند ، دارای یک شیء AuthenticationInfo هستند که حاوی ایمیل اعتبارنامه‌های واقعی است.

  • Firebase Authentication . عملیات Realtime Database که Firebase Authentication استفاده می‌کنند، دارای یک شیء AuthenticationInfo هستند که حاوی مقدار principalEmail از audit-third-party-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com است. همین امر در صورتی که شما با ایجاد JWT های سفارشی، راهکار احراز هویت خود را پیاده‌سازی کنید، نیز صادق است.

    • اگر از یک JSON Web Token (JWT) برای احراز هویت شخص ثالث استفاده شده باشد، فیلد thirdPartyPrincipal شامل سرآیند و payload توکن می‌شود. برای مثال، گزارش‌های حسابرسی برای درخواست‌هایی که با Firebase Authentication احراز هویت شده‌اند، شامل توکن Firebase Authentication آن درخواست هستند.
  • بدون احراز هویت. عملیات Realtime Database که از هیچ احراز هویتی استفاده نمی‌کنند، دارای یک شیء AuthenticationInfo هستند که حاوی مقدار principalEmail از audit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com است. یک نمونه Realtime Database با قوانین امنیتی باز ممکن است چنین درخواست‌هایی را بپذیرد. ما به همه کاربران توصیه می‌کنیم پایگاه‌های داده خود را به درستی ایمن کنند.

  • توکن‌های اسرار قدیمی. عملیات Realtime Database که از توکن‌های قدیمی استفاده می‌کنند، دارای یک شیء AuthenticationInfo هستند که حاوی یک placeholder principalEmail از audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com است. برای JWT امضا شده با اسرار، thirdPartyPrincipal حاوی هدرها و payload مربوط به JWT است.

ارزیابی‌های Firebase Security Rules را بررسی کنید

گزارش‌های حسابرسی ابری می‌توانند برای شناسایی درخواست‌هایی که به‌طور بالقوه تحت تأثیر تغییرات Security Rules قرار می‌گیرند، استفاده شوند.

در شیء AuthorizationInfo ، authorization.permission می‌تواند یکی از موارد زیر باشد:

  • firebasedatabase.data.get : دسترسی خواندن در مسیر مشخص شده در resource اعطا می‌شود.
  • firebasedatabase.data.update : دسترسی نوشتن در مسیر مشخص شده در resource اعطا می‌شود.
  • firebasedatabase.data.connect : محل قرارگیری برای Connect و Disconnect . برای اتصال به یک نمونه Realtime Database نیازی به مجوز نیست.
  • firebasedatabase.data.cancel : برای Unlisten و OnDisconnectCancel استفاده می‌شود. لغو یا ابطال عملیاتی که قبلاً مجاز شده است، نیازی به مجوز اضافی ندارد.

ارتباط دادن گزارش‌های حسابرسی ابری با نتایج پروفایلر Realtime Database

شما می‌توانید با استفاده از Realtime Database profiler در ترکیب با Realtime Database audit logging، تجزیه و تحلیل عمیقی از عملکرد Realtime Database انجام دهید. هر ابزار نقاط قوت خود را دارد.

ثبت وقایع حسابرسی ابری پروفایلر Realtime Database
  • حسابرسی دسترسی به پایگاه‌های داده
  • به طور مداوم تمام درخواست‌ها را ثبت می‌کند
  • امکان پرس‌وجوی گذشته‌نگر را فراهم می‌کند
  • شامل اطلاعات دقیق توکن احراز هویت است
  • هزینه استفاده را متحمل می‌شود
  • برای تحلیل عملکرد استفاده می‌شود
  • ابزارهای مفیدی برای شناسایی نقاط حساس و در نتیجه بهینه‌سازی عملکرد ارائه می‌دهد.
  • می‌تواند پخش شنونده را اندازه‌گیری کند، که به دلیل حجم بالای داده‌ها در گزارش‌های حسابرسی موجود نیست
  • سبک و بلادرنگ، که آن را برای تست بارگذاری زنده مناسب می‌کند. ورودی‌های گزارش حسابرسی ممکن است چند دقیقه طول بکشد تا ظاهر شوند.

محتویات گزارش حسابرسی مطابق با معیارهای پروفایلر مطابق شکل زیر است.

نام عملیات ثبت وقایع حسابرسی مقادیر ویژه در
RealtimeDatabaseAuditMetadata
نام عملیات پروفایلر
اتصال RequestType REALTIME است اتصال همزمان
قطع ارتباط RequestType REALTIME است قطع همزمان
بخوانید RequestType REALTIME است خواندن در زمان واقعی
بخوانید RequestType REST است استراحت-مطالعه
بنویس RequestType REALTIME است نوشتن در زمان واقعی
بنویس RequestType REST است استراحت-نوشتن
به‌روزرسانی RequestType به REALTIME است.
PreconditionType بررسی کنید.
به‌روزرسانی بلادرنگ
تراکنش بلادرنگ
به‌روزرسانی RequestType REST است.
PreconditionType بررسی کنید.
استراحت-به‌روزرسانی
تراکنش استراحت
شنوندهگوش دادن RequestType REALTIME است شنونده-گوش دادن
شنوندهگوش ندادن RequestType REALTIME است شنونده-گوش ندادن
روشن/خاموش RequestType REALTIME است روشن-قطع-قرار دادن
به‌روزرسانی OnDisconnect RequestType REALTIME است هنگام قطع اتصال، به‌روزرسانی
روشن/خاموش/لغو RequestType REALTIME است قطع-قطع-لغو
اجرای‌آن‌دیسکنت RequestType REALTIME است قطع اتصال هنگام اجرا