برای اینکه یک برنامه افزودنی اقدامات مشخص شده خود را انجام دهد، Firebase به هر نمونه از یک برنامه افزودنی نصب شده دسترسی محدودی به پروژه و داده های آن از طریق یک حساب سرویس اعطا می کند.
حساب سرویس چیست؟
حساب سرویس نوع خاصی از حساب کاربری گوگل است. این نشان دهنده یک کاربر غیر انسانی است که می تواند تماس های مجاز API را با سرویس های 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 و 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 کدام منبع اضافه شود. اگر حذف شود، به طور پیشفرض روی مقادیر پشتیبانی شده عبارتند از |
دامنه نقش ها را کاهش دهید
برنامه های افزودنی باید از اصل حداقل امتیاز پیروی کنند و فقط درخواست دسترسی به منابع مورد نیاز خود را داشته باشند. با استفاده از قسمت 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 |