برای اینکه افزونه بتواند کنشهای مشخصشدهاش را انجام دهد، Firebase به هر نمونه از افزونه نصبشده دسترسی محدودی به پروژه و دادههای آن ازطریق حساب سرویس اعطا میکند.
حساب سرویس چیست؟
حساب سرویس نوع خاصی از حساب کاربری Google است. این حساب نشاندهنده کاربر غیرانسانی است که میتواند تماسهای مجاز با میانای برنامهسازی کاربردی با سرویسهای Google برقرار کند.
درطول نصب افزونه، Firebase یک حساب سرویس برای افزونه در پروژه ایجاد میکند. هر نمونه نصبشده از افزونه، حساب سرویس خودش را دارد. اگر نمونه افزونهای حذف نصب شود، Firebase حساب سرویس افزونه را حذف میکند.
حسابهای سرویس ایجادشده برای افزونهها در این قالب هستند:
ext-extension-instance-id@project-id.iam.gserviceaccount.com
Firebase دسترسی افزونه به پروژه و دادههای آن را با اختصاص دادن
نقشهای (دستههای اجازهها) خاص
به حساب سرویس افزونه محدود میکند. وقتی افزونهای میسازید،
تعیین میکنید که افزونهتان برای کار کردن به چه نقشهایی نیاز دارد، سپس این
نقشها و دلیل نیاز افزونهتان به این نقشها را در فایل extension.yaml
خود فهرست میکنید (نمونه را در پایین این صفحه ببینید).
مشخص کردن نقشهای موردنیاز افزونه
وقتی افزونهتان را میسازید، سطح دسترسی موردنیاز افزونه برای عملکرد را تعیین میکنید.
درطول نصب، Firebase CLI از کاربر میخواهد سطح دسترسی اعطاشده توسط هر نقش را بپذیرد. اگر افزونه شما نقشهای بیشتری نسبتبه آنچه واقعاً نیاز دارد درخواست کند، ممکن است کاربران کمتر تمایل به نصب آن داشته باشند.
تعیین کنید که آیا افزونه شما با محصولی تعامل دارد یا نه:
اگر افزونه شما با محصولی تعامل دارد، باید به افزونهتان اجازه دهید به آن محصول دسترسی داشته باشد.
برای مثال، اگر افزونه شما دادهها را در نمونه Realtime Database مینویسد، افزونه شما به نقش Realtime Database (بهطور خاص،
firebasedatabase.admin) نیاز دارد.اگر افزونه شما فقط برای رویداد راهانداز از محصولی گوش میدهد، افزونه شما به نقشی مرتبط با آن محصول نیاز ندارد.
برای مثال، اگر افزونه شما هنگام نوشتن در نمونه Realtime Database راهاندازی شود (اما چیزی در پایگاه داده ننویسد)، افزونه شما به نقش Realtime Database نیاز ندارد.
پساز اینکه مشخص کردید افزونه شما با کدام محصولات تعامل دارد، باید تصمیم بگیرید که کدام نقش برای آن تعامل خاص لازم است. برخیاز محصولات بسته به کنش یا مجموعه کنشهای انجامشده، نقشهای متفاوتی ارائه میدهند.
برای مثال، فرض کنید افزونه شما با یک دسته 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 کدام منبع باید به این نقش اضافه شود. اگر حذف شود،
بهطور پیشفرض
مقادیر پشتیبانیشده |
کاهش دامنه نقشها
افزونهها باید از اصل حداقل امتیاز پیروی کنند و فقط دسترسی به منابعی را که نیاز دارند درخواست کنند.
بااستفاده از فیلد 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 |