دسترسی مناسب را برای افزونه تنظیم کنید

برای اینکه یک برنامه افزودنی اقدامات مشخص شده خود را انجام دهد، Firebase به هر نمونه از یک برنامه افزودنی نصب شده دسترسی محدودی به پروژه و داده های آن از طریق یک حساب سرویس اعطا می کند.

حساب سرویس چیست؟

حساب سرویس نوع خاصی از حساب کاربری گوگل است. این نشان دهنده یک کاربر غیر انسانی است که می تواند تماس های مجاز API را با سرویس های Google برقرار کند.

در طول نصب یک افزونه، Firebase یک حساب سرویس برای برنامه افزودنی در پروژه ایجاد می کند. هر نمونه نصب شده یک برنامه افزودنی دارای حساب سرویس مخصوص به خود است. اگر یک نمونه برنامه افزودنی حذف نصب شود، Firebase حساب سرویس برنامه افزودنی را حذف می کند.

حساب‌های سرویس ایجاد شده برای برنامه‌های افزودنی به شکل زیر هستند:

ext- extension-instance-id @ project-id .iam.gserviceaccount.com

Firebase دسترسی یک برنامه افزودنی به پروژه و داده های آن را با اختصاص نقش های خاص (بسته های مجوزها) به حساب سرویس برنامه افزودنی محدود می کند. هنگامی که یک برنامه افزودنی ایجاد می‌کنید، تعیین می‌کنید که برنامه افزودنی شما به چه نقش‌هایی برای کار کردن نیاز دارد، سپس این نقش‌ها و دلیل نیاز برنامه افزودنی شما به این نقش‌ها را در فایل extension.yaml خود فهرست می‌کنید (به مثال در پایین این صفحه مراجعه کنید).

تعیین کنید که برنامه افزودنی شما به چه نقش هایی نیاز دارد

هنگامی که برنامه افزودنی خود را ایجاد می کنید، سطح دسترسی مورد نیاز برنامه افزودنی خود را تعیین می کنید.

در حین نصب، Firebase CLI از کاربر می خواهد که سطح دسترسی اعطا شده توسط هر نقش را بپذیرد. اگر برنامه افزودنی شما نقش‌های بیشتری از آنچه واقعاً نیاز دارد درخواست کند، ممکن است کاربران کمتر آن را نصب کنند.

  1. تعیین کنید که برنامه افزودنی شما با یک محصول تعامل دارد یا خیر:

    • اگر برنامه افزودنی شما با یک محصول تعامل دارد ، باید به برنامه افزودنی خود اجازه دسترسی به آن محصول را بدهید.

      به عنوان مثال، اگر برنامه افزودنی شما داده ها را در یک نمونه Realtime Database می نویسد ، پس برنامه افزودنی شما به نقش Realtime Database نیاز دارد (به طور خاص، firebasedatabase.admin ).

    • اگر برنامه افزودنی شما فقط به یک رویداد محرک از یک محصول گوش می دهد ، پس برنامه افزودنی شما نیازی به نقش مرتبط با آن محصول ندارد .

      به عنوان مثال، اگر برنامه افزودنی شما بر روی یک نمونه Realtime Database نوشتن را آغاز کند (اما چیزی در پایگاه داده نمی نویسد)، پس برنامه افزودنی شما به نقش Realtime Database نیاز ندارد .

  2. پس از اینکه مشخص کردید برنامه افزودنی شما با کدام محصولات تعامل دارد ، باید تصمیم بگیرید که کدام نقش برای آن تعامل خاص مورد نیاز است. برخی از محصولات بسته به عمل یا مجموعه اقدامات انجام شده نقش های متفاوتی را ارائه می دهند.

    برای مثال، بگویید برنامه افزودنی شما با یک سطل Cloud Storage تعامل دارد. نقش storage.objectCreator به برنامه افزودنی اجازه می‌دهد تا یک شی در یک سطل Cloud Storage ایجاد کند ، اما این نقش به برنامه افزودنی اجازه مشاهده، حذف یا بازنویسی اشیاء را نمی‌دهد. برای فعال کردن برنامه افزودنی برای انجام این اقدامات اضافی، باید به جای آن نقش storage.objectAdmin را اختصاص دهید.

برای مشاهده تمام نقش های پشتیبانی شده ای که ممکن است به حساب سرویس برنامه افزودنی خود اختصاص دهید، به بخش پایین این صفحه مراجعه کنید. برای اطلاع از توضیحات هر نقش و مجوزهای داده شده، از اسناد Firebase یا اسناد Google Cloud دیدن کنید. همچنین می‌توانید نقش‌ها را در پنل IAM و Admin کنسول Google Cloud جستجو کنید.

نحوه اختصاص نقش به افزونه

نقش های IAM مورد نیاز برای عملکرد برنامه افزودنی خود را در بخش roles فایل extension.yaml خود فهرست کنید.

در اینجا یک مثال برای یک برنامه افزودنی است که به یک مسیر مشخص شده Firebase Realtime Database گوش می دهد. پس از راه‌اندازی، برنامه افزودنی ایمیل حساب کاربری (تعامل با Firebase Authentication ) را به‌روزرسانی می‌کند و یک اعلان ارسال می‌کند (تعامل با Firebase Cloud Messaging ). به موارد زیر توجه کنید:

  • حتی اگر برنامه افزودنی از یک رویداد Realtime Database فعال شود ، نقش firebasedatabase.admin فهرست نشده است (گوش دادن به عنوان یک تعامل در نظر گرفته نمی شود).
  • از آنجایی که برنامه افزودنی با Authentication و Cloud Messaging تعامل دارد ، برنامه افزودنی برای دسترسی به آن محصولات به نقش‌هایی نیاز دارد (به ترتیب firebaseauth.admin و firebasenotifications.admin ).
# extension.yaml
...

# Roles assigned to the extension's service account by Firebase during installation
roles:
  - role: firebaseauth.admin
    reason: Required to update the email address of the user account

  - role: firebasenotifications.admin
    reason: Required to send a notification that the email address has been updated

...

در فایل extension.yaml خود، از فیلدهای زیر برای اختصاص نقش به حساب سرویس یک برنامه افزودنی استفاده کنید:

میدان تایپ کنید توضیحات
role
(الزامی)
رشته نام نقش IAM مورد نیاز برنامه افزودنی برای فعالیت
reason
(الزامی)
رشته

توضیح مختصری از دلیل نیاز برنامه افزودنی به دسترسی اعطا شده توسط نقش

اطمینان حاصل کنید که جزئیات کافی را ارائه کرده اید تا کاربر بتواند بفهمد که چگونه برنامه افزودنی از نقش استفاده می کند.

resource
(اختیاری)
رشته

این نقش باید به سیاست IAM کدام منبع اضافه شود. اگر حذف شود، به طور پیش‌فرض روی projects/${project_id} قرار می‌گیرد.

مقادیر پشتیبانی شده عبارتند از projects/* و projects/*/buckets/* .

دامنه نقش ها را کاهش دهید

برنامه های افزودنی باید از اصل حداقل امتیاز پیروی کنند و فقط درخواست دسترسی به منابع مورد نیاز خود را داشته باشند. با استفاده از قسمت role.resource می توانید دامنه دسترسی یک برنامه افزودنی را محدود کنید. برای مثال، اگر برنامه افزودنی شما نیاز به نوشتن اشیاء در یک سطل ذخیره‌سازی ابری دارد، می‌توانید از نقش زیر استفاده کنید:

roles:
  - role: storage.objectCreator
    reason: Needed in order to write
    resource: projects/${PROJECT_ID}/buckets/${STORAGE_BUCKET}

این به برنامه افزودنی اجازه می‌دهد فقط به سطل مورد نیاز خود دسترسی داشته باشد و نه دیگران در همان پروژه.

این فیلد از پروژه‌ها ( projects/{project_id} ) و سطل‌های ذخیره‌سازی ( projects/{project_id}/buckets/{bucket_id} ) پشتیبانی می‌کند.

نقش های پشتیبانی شده برای برنامه های افزودنی

جدول زیر نقش های پشتیبانی شده IAM را برای تعامل با محصولات Firebase فهرست می کند. بیشتر نقش‌های این جدول نقش‌های سطح محصول Firebase هستند، اما برخی از آنها مستقیماً توسط Google Cloud مدیریت می‌شوند (مخصوصاً Cloud Firestore و Cloud Storage ).

محصولات Firebase

اگر برنامه افزودنی شما با... یکی از این نقش ها را تعیین کنید...
Cloud Firestore datastore.importExportAdmin
datastore.indexAdmin
datastore.owner
datastore.user
datastore.viewer
Cloud Storage for Firebase storage.admin
storage.objectAdmin
storage.objectCreator
storage.objectViewer
Firebase App Distribution firebaseappdistro.admin
firebaseappdistro.viewer
Firebase Authentication firebaseauth.admin
firebaseauth.viewer
Firebase A/B Testing firebaseabt.admin
firebaseabt.viewer
Firebase Cloud Messaging firebasenotifications.admin
firebasenotifications.viewer
Firebase Crashlytics firebasecrashlytics.admin
firebasecrashlytics.viewer
Firebase Hosting firebasehosting.admin
firebasehosting.viewer
Firebase In-App Messaging firebaseinappmessaging.admin
firebaseinappmessaging.viewer
Firebase ML firebaseml.admin
firebaseml.viewer
Firebase Performance Monitoring firebaseperformance.viewer
firebaseperformance.reader
firebaseperformance.writer
Firebase Realtime Database firebasedatabase.admin
firebasedatabase.viewer
قوانین امنیتی firebaserules.viewer
firebaserules.developer
firebaserules.deployer
Google Analytics firebaseanalytics.admin
firebaseanalytics.viewer

محصولات Google Cloud

با این نقش ها در اسناد Google Cloud آشنا شوید.

اگر برنامه افزودنی شما با... یکی از این نقش ها را تعیین کنید...
اقدامات اقدامات.ادمین
اقدامات.بیننده
اپیگی apigee.analyticsAgent
apigee.analyticsEditor
apigee.analyticsViewer
apigee.apiCreator
apigee.deployer
apigee.developerAdmin
apigee.readOnlyAdmin
apigee.synchronizerManager
App Engine appengine.appAdmin
appengine.appViewer
appengine.codeViewer
appengine.deployer
appengine.serviceAdmin
AutoML automl.editor
automl.predictor
automl.viewer
BigQuery bigquery.connectionAdmin
bigquery.connectionUser
bigquery.dataEditor
bigquery.dataOwner
bigquery.dataViewer
bigquery.jobUser
bigquery.metadataViewer
bigquery.readSessionUser
bigquery.user
Cloud Bigtable bigtable.reader
bigtable.user
bigtable.viewer
صورتحساب billing.viewer
چت های Hangout چت.مالک
chat.reader
دارایی ابری cloudasset.owner
cloudasset.viewer
Cloud Data Fusion datafusion.admin
datafusion.viewer
دیباگر ابری clouddebugger.agent
clouddebugger.user
توابع ابری cloudfunctions.invoker
cloudfunctions.viewer
IAP ابری iap.admin
iap.httpsResourceAccessor
iap.settingsAdmin
iap.tunnelResourceAccessor
اینترنت اشیاء ابری cloudiot.deviceController
cloudiot.editor
cloudiot.provisioner
cloudiot.viewer
Stackdriver Profiler cloudprofiler.agent
cloudprofiler.user
Cloud Scheduler cloudscheduler.admin
cloudscheduler.jobRunner
cloudscheduler.viewer
اسکنر امنیت ابری cloudsecurityscanner.editor
cloudsecurityscanner.runner
cloudsecurityscanner.viewer
ابر SQL cloudsql.client
cloudsql.editor
cloudsql.viewer
ردیابی ابری cloudtrace.admin
cloudtrace.agent
cloudtrace.user
جریان داده dataflow.developer
dataflow.viewer
جریان داده.کارگر
جریان گفتگو dialogflow.admin
dialogflow.client
dialogflow.reader
پیشگیری از از دست دادن داده های ابری dlp.reader
dlp.user
گزارش خطا errorreporting.user
error reporting.viewer
error Reporting.writer
رویدادارک eventtarc.publisher
eventtarc.eventReceiver
Cloud Filestore فایل.ویرایشگر
file.viewer
ورود به سیستم logging.configWriter
logging.logWriter
logging.privateLogViewer
logging.viewer
موتور یادگیری ماشین ml.developer
ml.jobOwner
ml.modelOwner
ml.modelUser
ml.operationOwner
ml.viewer
نظارت نظارت.ویرایشگر
monitoring.metricWriter
نظارت.بیننده
نوت بوک های هوش مصنوعی notebooks.admin
notebooks.viewer
Pub/Sub pubsub.editor
pubsub.publisher
pubsub.subscriber
pubsub.viewer
Memorystor Redis redis.editor
redis.viewer
Cloud Run run.invoker
منبع منبع.خواننده
منبع.نویسنده
آچار ابری spanner.databaseAdmin
spanner.databaseReader
spanner.databaseUser
آچار.بیننده
استفاده از خدمات serviceusage.apiKeysMetadataViewer
سرویس انتقال فضای ذخیره سازی ابری Storagetransfer.user
Storagetransfer.viewer
رمزگذار ابری transcoder.admin
transcoder.viewer
Vertex AI aiplatform.user
دیگر identitettoolkit.admin
IDtoolkit.viewer