برای اینکه یک برنامه افزودنی اقدامات مشخص شده خود را انجام دهد، Firebase به هر نمونه از یک برنامه افزودنی نصب شده دسترسی محدودی به پروژه و داده های آن از طریق یک حساب سرویس اعطا می کند.
حساب سرویس چیست؟
حساب سرویس نوع خاصی از حساب کاربری گوگل است. این نشان دهنده یک کاربر غیر انسانی است که می تواند تماس های مجاز API را با سرویس های Google برقرار کند.
در طول نصب یک افزونه، Firebase یک حساب سرویس برای برنامه افزودنی در پروژه ایجاد می کند. هر نمونه نصب شده یک برنامه افزودنی دارای حساب سرویس مخصوص به خود است. اگر یک نمونه برنامه افزودنی حذف نصب شود، Firebase حساب سرویس برنامه افزودنی را حذف می کند.
حسابهای سرویس ایجاد شده برای برنامههای افزودنی به شکل زیر هستند:
ext- extension-instance-id @ project-id .iam.gserviceaccount.com
Firebase دسترسی یک برنامه افزودنی به پروژه و داده های آن را با اختصاص نقش های خاص (بسته های مجوزها) به حساب سرویس برنامه افزودنی محدود می کند. هنگامی که یک برنامه افزودنی ایجاد میکنید، تعیین میکنید که برنامه افزودنی شما به چه نقشهایی برای کار کردن نیاز دارد، سپس این نقشها و دلیل نیاز برنامه افزودنی شما به این نقشها را در فایل extension.yaml
خود فهرست میکنید (به مثال در پایین این صفحه مراجعه کنید).
تعیین کنید که برنامه افزودنی شما به چه نقش هایی نیاز دارد
هنگامی که برنامه افزودنی خود را ایجاد می کنید، سطح دسترسی مورد نیاز برنامه افزودنی خود را تعیین می کنید.
در حین نصب، Firebase CLI از کاربر می خواهد که سطح دسترسی اعطا شده توسط هر نقش را بپذیرد. اگر برنامه افزودنی شما نقشهای بیشتری از آنچه واقعاً نیاز دارد درخواست کند، ممکن است کاربران کمتر آن را نصب کنند.
تعیین کنید که برنامه افزودنی شما با یک محصول تعامل دارد یا خیر:
اگر برنامه افزودنی شما با یک محصول تعامل دارد ، باید به برنامه افزودنی خود اجازه دسترسی به آن محصول را بدهید.
به عنوان مثال، اگر برنامه افزودنی شما داده ها را در یک نمونه پایگاه داده بیدرنگ می نویسد ، پس برنامه افزودنی شما به نقش پایگاه داده بیدرنگ نیاز دارد (به طور خاص،
firebasedatabase.admin
).اگر برنامه افزودنی شما فقط به یک رویداد محرک از یک محصول گوش می دهد ، پس برنامه افزودنی شما نیازی به نقش مرتبط با آن محصول ندارد .
به عنوان مثال، اگر برنامه افزودنی شما بر روی یک نمونه از پایگاه داده بیدرنگ نوشتن را آغاز کند (اما چیزی در پایگاه داده نمی نویسد)، پس برنامه افزودنی شما به نقش پایگاه داده بیدرنگ نیاز ندارد .
پس از اینکه مشخص کردید برنامه افزودنی شما با کدام محصولات تعامل دارد ، باید تصمیم بگیرید که کدام نقش برای آن تعامل خاص مورد نیاز است. برخی از محصولات بسته به عمل یا مجموعه اقدامات انجام شده نقش های متفاوتی را ارائه می دهند.
برای مثال، بگویید برنامه افزودنی شما با یک سطل فضای ذخیرهسازی ابری تعامل دارد. نقش
storage.objectCreator
به برنامه افزودنی اجازه میدهد تا یک شی در یک سطل فضای ذخیرهسازی ابری ایجاد کند ، اما این نقش به برنامه افزودنی اجازه مشاهده، حذف یا بازنویسی اشیاء را نمیدهد. برای فعال کردن برنامه افزودنی برای انجام این اقدامات اضافی، باید به جای آن نقشstorage.objectAdmin
را اختصاص دهید.
برای مشاهده تمام نقش های پشتیبانی شده ای که ممکن است به حساب سرویس برنامه افزودنی خود اختصاص دهید، به بخش پایین این صفحه مراجعه کنید. برای اطلاع از توضیحات هر نقش و مجوزهای داده شده، از اسناد Firebase یا اسناد Google Cloud دیدن کنید. همچنین میتوانید نقشها را در پنل IAM و Admin کنسول Google Cloud جستجو کنید.
نحوه اختصاص نقش به افزونه
نقش های IAM مورد نیاز برای عملکرد برنامه افزودنی خود را در بخش roles
فایل extension.yaml
خود فهرست کنید.
در اینجا یک مثال برای یک برنامه افزودنی است که به یک مسیر مشخص شده پایگاه داده بیدرنگ Firebase گوش می دهد. پس از راهاندازی، برنامه افزودنی ایمیل حساب کاربری (تعامل با احراز هویت Firebase) را بهروزرسانی میکند و یک اعلان (تعامل با Firebase Cloud Messaging) ارسال میکند. به موارد زیر توجه کنید:
- حتی اگر برنامه افزودنی از یک رویداد پایگاه داده بیدرنگ فعال شود ، نقش
firebasedatabase.admin
فهرست نشده است (گوش دادن به عنوان یک تعامل در نظر گرفته نمی شود). - از آنجایی که برنامه افزودنی با احراز هویت و پیامرسانی ابری تعامل دارد ، برنامه افزودنی برای دسترسی به آن محصولات به نقشهایی نیاز دارد (به ترتیب
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 |
فضای ذخیره سازی ابری برای Firebase | storage.admin storage.objectAdmin storage.objectCreator storage.objectViewer |
توزیع برنامه Firebase | firebaseappdistro.admin firebaseappdistro.viewer |
احراز هویت Firebase | firebaseauth.admin firebaseauth.viewer |
تست Firebase A/B | firebaseabt.admin firebaseabt.viewer |
Firebase Cloud Messaging | firebasenotifications.admin firebasenotifications.viewer |
Firebase Crashlytics | firebasecrashlytics.admin firebasecrashlytics.viewer |
میزبانی Firebase | firebasehosting.admin firebasehosting.viewer |
Firebase In-App Messaging | firebaseinappmessaging.admin firebaseinappmessaging.viewer |
Firebase ML | firebaseml.admin firebaseml.viewer |
نظارت بر عملکرد Firebase | firebaseperformance.viewer firebaseperformance.reader firebaseperformance.writer |
پایگاه داده بیدرنگ Firebase | firebasedatabase.admin firebasedatabase.viewer |
قوانین امنیتی | firebaserules.viewer firebaserules.developer firebaserules.deployer |
تجزیه و تحلیل ترافیک گوگل | firebaseanalytics.admin firebaseanalytics.viewer |
محصولات Google Cloud
با این نقش ها در اسناد Google Cloud آشنا شوید.
اگر برنامه افزودنی شما با... | یکی از این نقش ها را تعیین کنید... |
---|---|
اقدامات | اقدامات.ادمین اقدامات.بیننده |
اپیگی | apigee.analyticsAgent apigee.analyticsEditor apigee.analyticsViewer apigee.apiCreator apigee.deployer apigee.developerAdmin apigee.readOnlyAdmin apigee.synchronizerManager |
موتور برنامه | 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 |
میخانه / فرعی | 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 |