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

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

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

حساب سرویس نوع خاصی از حساب کاربری Google است. این حساب نشان‌دهنده کاربر غیرانسانی است که می‌تواند تماس‌های مجاز با میانای برنامه‌سازی کاربردی با سرویس‌های 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 و سرپرست کنسول Google Cloud جستجو کنید.

نحوه واگذار کردن نقش‌ها به افزونه

نقش‌های «مدیریت هویت و دسترسی» موردنیاز برای عملکرد افزونه‌تان را در بخش 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 می‌توانید دامنه دسترسی افزونه را محدود کنید. برای مثال، اگر افزونه شما نیاز به نوشتن اشیاء در مخزن Cloud Storage دارد، می‌توانید از نقش زیر استفاده کنید:

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 بیشتر بدانید.

اگر افزونه شما با… تعامل دارد یکی‌از این نقش‌ها را واگذار کنید...
کنش‌ها actions.Admin
actions.Viewer
Apigee 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.owner
chat.reader
Cloud Asset cloudasset.owner
cloudasset.viewer
Cloud Data Fusion datafusion.admin
datafusion.viewer
Cloud Debugger clouddebugger.agent
clouddebugger.user
توابع ابری cloudfunctions.invoker
cloudfunctions.viewer
Cloud IAP iap.admin
iap.httpsResourceAccessor
iap.settingsAdmin
iap.tunnelResourceAccessor
Cloud IoT cloudiot.deviceController
cloudiot.editor
cloudiot.provisioner
cloudiot.viewer
Stackdriver Profiler cloudprofiler.agent
cloudprofiler.user
Cloud Scheduler cloudscheduler.admin
cloudscheduler.jobRunner
cloudscheduler.viewer
Cloud Security Scanner cloudsecurityscanner.editor
cloudsecurityscanner.runner
cloudsecurityscanner.viewer
Cloud SQL cloudsql.client
cloudsql.editor
cloudsql.viewer
Cloud Trace cloudtrace.admin
cloudtrace.agent
cloudtrace.user
Dataflow dataflow.developer
dataflow.viewer
dataflow.worker
Dialogflow dialogflow.admin
dialogflow.client
dialogflow.reader
Cloud Data Loss Prevention dlp.reader
dlp.user
گزارش‌دهی خطا errorreporting.user
errorreporting.viewer
errorreporting.writer
Eventarc eventarc.publisher
eventarc.eventReceiver
Cloud Filestore file.editor
file.viewer
درحال ثبت گزارش logging.configWriter
logging.logWriter
logging.privateLogViewer
logging.viewer
موتور یادگیری ماشین ml.developer
ml.jobOwner
ml.modelOwner
ml.modelUser
ml.operationOwner
ml.viewer
پایش monitoring.editor
monitoring.metricWriter
monitoring.viewer
دفترهای یادداشت هوشواره‌ای notebooks.admin
notebooks.viewer
Pub/Sub pubsub.editor
pubsub.publisher
pubsub.subscriber
pubsub.viewer
Memorystore Redis redis.editor
redis.viewer
Cloud Run run.invoker
منبع source.reader
source.writer
Cloud Spanner spanner.databaseAdmin
spanner.databaseReader
spanner.databaseUser
spanner.viewer
استفاده از خدمات serviceusage.apiKeysMetadataViewer
Cloud Storage Transfer Service storagetransfer.user
storagetransfer.viewer
Cloud Transcoder transcoder.admin
transcoder.viewer
هوش مصنوعی Vertex aiplatform.user
غیره identitytoolkit.admin
identitytoolkit.viewer