برای اینکه یک افزونه بتواند اقدامات مشخص شده خود را انجام دهد، فایربیس به هر نمونه از افزونه نصب شده، از طریق یک حساب کاربری سرویس، دسترسی محدودی به پروژه و دادههای آن اعطا میکند.
حساب کاربری خدماتی چیست؟
حساب کاربری سرویس ، نوع خاصی از حساب کاربری گوگل است که نشان دهنده یک کاربر غیرانسانی است که میتواند فراخوانیهای API مجاز را به سرویسهای گوگل انجام دهد.
در حین نصب یک افزونه، فایربیس یک حساب سرویس برای افزونه در پروژه ایجاد میکند. هر نمونه نصب شده از یک افزونه، حساب سرویس مخصوص به خود را دارد. اگر یک نمونه افزونه حذف نصب شود، فایربیس حساب سرویس افزونه را حذف میکند.
حسابهای سرویس ایجاد شده برای افزونهها به این شکل هستند:
ext- extension-instance-id @ project-id .iam.gserviceaccount.com
فایربیس با اختصاص نقشهای خاص (مجموعه مجوزها) به حساب سرویس افزونه، دسترسی یک افزونه به یک پروژه و دادههای آن را محدود میکند. هنگام ساخت یک افزونه، تعیین میکنید که افزونه شما برای کار به کدام نقشها نیاز دارد، سپس این نقشها و دلیل نیاز افزونه به این نقشها را در فایل extension.yaml خود فهرست میکنید (به مثال پایین این صفحه مراجعه کنید).
مشخص کنید که افزونه شما به چه نقشهایی نیاز دارد
وقتی افزونه خود را میسازید، سطح دسترسی مورد نیاز افزونه برای کار را تعیین میکنید.
در حین نصب، رابط خط فرمان Firebase از کاربر میخواهد که سطح دسترسی اعطا شده توسط هر نقش را بپذیرد. اگر افزونه شما نقشهای بیشتری از آنچه واقعاً نیاز دارد درخواست کند، احتمال نصب آن توسط کاربران کمتر خواهد بود.
مشخص کنید که آیا افزونه شما با یک محصول تعامل دارد یا خیر:
اگر افزونه شما با یک محصول تعامل دارد ، باید به افزونه خود دسترسی به آن محصول را بدهید.
برای مثال، اگر افزونهی شما دادهها را در یک نمونهی Realtime Database مینویسد ، آنگاه افزونهی شما به یک نقش Realtime Database (بهطور خاص،
firebasedatabase.admin) نیاز دارد.اگر افزونه شما فقط منتظر یک رویداد فعالسازی از یک محصول است ، در این صورت افزونه شما به نقشی مرتبط با آن محصول نیاز ندارد .
برای مثال، اگر افزونه شما هنگام نوشتن در یک نمونه Realtime Database فعال شود (اما چیزی در پایگاه داده ننویسد)، افزونه شما به نقش Realtime Database نیازی ندارد .
بعد از اینکه مشخص کردید افزونه شما با کدام محصولات تعامل دارد ، باید تصمیم بگیرید که کدام نقش برای آن تعامل خاص مورد نیاز است. برخی از محصولات بسته به عمل یا مجموعه اقدامات انجام شده، نقشهای متفاوتی ارائه میدهند.
برای مثال، فرض کنید افزونه شما با یک Cloud Storage Bucket) در تعامل است. نقش
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 ).
محصولات فایربیس
| اگر افزونه شما با ... تعامل دارد | یکی از این نقشها را به او واگذار کنید... |
|---|---|
| Cloud Firestore | datastore.importExportAdmin datastore.indexadmin مالک فروشگاه داده کاربر پایگاه داده نمایشگر داده |
| Cloud Storage for Firebase | ذخیره سازی.مدیر storage.objectAdmin سازندهی شیء ذخیرهسازی نمایشگر شیء ذخیرهسازی |
| Firebase App Distribution | firebaseappdistro.admin firebaseappdistro.viewer |
| Firebase Authentication | firebaseaut.admin firebaseauth.viewer |
| Firebase A/B Testing | firebaseabt.admin نمایشگر firebaseabt |
| Firebase Cloud Messaging | اعلانهای فایربیس. مدیر نمایشگر اعلانهای پایگاه آتش |
| Firebase Crashlytics | firebasecrashlytics.admin firebasecrashlytics.viewer |
| Firebase Hosting | فایربیس هاستینگ.مدیر firebasehosting.viewer |
| Firebase In-App Messaging | firebaseinappmessaging.admin نمایشگر پیامهای firebaseinapp |
| Firebase ML | firebaseml.admin نمایشگر firebaseml |
| Firebase Performance Monitoring | firebaseperformance.viewer firebaseperformance.reader firebaseperformance.writer |
| Firebase Realtime Database | پایگاه داده مبتنی بر آتش.مدیر نمایشگر پایگاه داده مبتنی بر آتش |
| قوانین امنیتی | firebaserules.viewer firebaserules.developer firebaserules.deployer |
| Google Analytics | firebaseanalytics.admin firebaseanalytics.viewer |
محصولات گوگل کلود
برای آشنایی با این نقشها، به مستندات Google Cloud مراجعه کنید.
| اگر افزونه شما با ... تعامل دارد | یکی از این نقشها را به او واگذار کنید... |
|---|---|
| اقدامات | اقدامات.مدیر اقدامات.نمایشگر |
| آپیجی | apigee.analyticsAgent apigee.analyticsویرایشگر نمایشگر تحلیلی apigee apigee.apiCreator آپیجی.دپلویر مدیر توسعهدهنده apigee apigee.readOnlyAdmin مدیر همگامسازی apigee |
| App Engine | appengine.appAdmin appengine.نمایشگر برنامه appengine.codeViewer موتور برنامه.استقرار دهنده appengine.serviceAdmin |
| اتوامال | ویرایشگر خودکار پیشبینیکننده خودکار نمایشگر خودکار |
| بیگکوئری | bigquery.connectionAdmin bigquery.connectionUser ویرایشگر داده bigquery bigquery.dataOwn bigquery.dataViewer bigquery.jobUser bigquery.metadataViewer bigquery.readSessionUser bigquery.user |
| ابر بیگ تیبل | بیگ تیبل ریدر کاربر bigtable نمایشگر بزرگ |
| صورتحساب | نمایشگر صورتحساب |
| چتهای هنگاوت | مالک چت چت.خواننده |
| دارایی ابری | مالک دارایی ابری نمایشگر دارایی ابری |
| ادغام دادههای ابری | دیتافیوژن.admin نمایشگر دادهپردازی |
| اشکالزدای ابری | clouddebugger.agent clouddebugger.کاربر |
| توابع ابری | توابع ابری.فراخواننده cloudfunctions.viewer |
| ابر IAP | iap.admin iap.httpsResourceAccessor تنظیمات iap مدیر iap.tunnelResourceAccessor |
| اینترنت اشیا ابری | cloudiot.deviceController کلودیوت.ویرایشگر cloudiot.provisioner cloudiot.viewer |
| پروفایلر استکدرایور | cloudprofiler.agent cloudprofiler.user |
| Cloud Scheduler | cloudscheduler.admin cloudscheduler.jobRunner cloudscheduler.viewer |
| اسکنر امنیتی ابری | اسکنر امنیت ابری.ویرایشگر اسکنر امنیتی ابری. دونده اسکنر امنیت ابری.بیننده |
| SQL ابری | cloudsql.client ویرایشگر cloudsql cloudsql.viewer |
| ردیابی ابر | cloudtrace.admin cloudtrace.agent cloudtrace.user |
| جریان داده | توسعهدهندهی جریان داده نمایشگر جریان داده جریان داده.کارگر |
| دیالوگفلو | dialogflow.admin dialogflow.client dialogflow.reader |
| پیشگیری از دست دادن دادههای ابری | خواننده dlp کاربر dlp |
| گزارش خطا | گزارش خطا.کاربر نمایشگر گزارش خطا گزارش خطا.نویسنده |
| ایونتارک | ناشر eventarc eventtarc.eventReceiver |
| فروشگاه فایل ابری | ویرایشگر فایل نمایشگر فایل |
| ثبت وقایع | logging.configWriter logging.logWriter logging.privateLogViewer مشاهدهگر گزارش وقایع |
| موتور یادگیری ماشین | توسعهدهنده ml مالک شغل ml مالک مدل ml ml.modelUser مالک عملیات ml نمایشگر میلیلیتر |
| نظارت | نظارت.ویرایشگر نظارت.metricWriter نمایشگر نظارت |
| نوتبوکهای هوش مصنوعی | نوت بوک ها.مدیر نوت بوک.بیننده |
| Pub/Sub | ویرایشگر pubsub ناشر مشترک pubsub نمایشگر pubsub |
| مموریاستور ردیس | ویرایشگر redis نمایشگر ردیس |
| اجرای ابری | اجرا.فراخوان |
| منبع | منبع.خواننده منبع.نویسنده |
| آچار ابری | آچار.پایگاه دادهمدیر spanner.databaseReader کاربر پایگاه داده spanner آچار.بیننده |
| کاربرد سرویس | serviceusage.apiKeysنمایشگر فراداده |
| سرویس انتقال فضای ذخیرهسازی ابری | انتقال حافظه.کاربر نمایشگر انتقال ذخیرهسازی |
| کدگذار ابری | کدگذار.مدیر نمایشگر کدگذار |
| هوش مصنوعی ورتکس | کاربر aiplatform |
| دیگر | identitytoolkit.admin identitytoolkit.viewer |