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

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

حساب کاربری خدماتی چیست؟

حساب کاربری سرویس ، نوع خاصی از حساب کاربری گوگل است که نشان دهنده یک کاربر غیرانسانی است که می‌تواند فراخوانی‌های API مجاز را به سرویس‌های گوگل انجام دهد.

در حین نصب یک افزونه، فایربیس یک حساب سرویس برای افزونه در پروژه ایجاد می‌کند. هر نمونه نصب شده از یک افزونه، حساب سرویس مخصوص به خود را دارد. اگر یک نمونه افزونه حذف نصب شود، فایربیس حساب سرویس افزونه را حذف می‌کند.

حساب‌های سرویس ایجاد شده برای افزونه‌ها به این شکل هستند:

ext- extension-instance-id @ project-id .iam.gserviceaccount.com

فایربیس با اختصاص نقش‌های خاص (مجموعه مجوزها) به حساب سرویس افزونه، دسترسی یک افزونه به یک پروژه و داده‌های آن را محدود می‌کند. هنگام ساخت یک افزونه، تعیین می‌کنید که افزونه شما برای کار به کدام نقش‌ها نیاز دارد، سپس این نقش‌ها و دلیل نیاز افزونه به این نقش‌ها را در فایل extension.yaml خود فهرست می‌کنید (به مثال پایین این صفحه مراجعه کنید).

مشخص کنید که افزونه شما به چه نقش‌هایی نیاز دارد

وقتی افزونه خود را می‌سازید، سطح دسترسی مورد نیاز افزونه برای کار را تعیین می‌کنید.

در حین نصب، رابط خط فرمان Firebase از کاربر می‌خواهد که سطح دسترسی اعطا شده توسط هر نقش را بپذیرد. اگر افزونه شما نقش‌های بیشتری از آنچه واقعاً نیاز دارد درخواست کند، احتمال نصب آن توسط کاربران کمتر خواهد بود.

  1. مشخص کنید که آیا افزونه شما با یک محصول تعامل دارد یا خیر:

    • اگر افزونه شما با یک محصول تعامل دارد ، باید به افزونه خود دسترسی به آن محصول را بدهید.

      برای مثال، اگر افزونه‌ی شما داده‌ها را در یک نمونه‌ی Realtime Database می‌نویسد ، آنگاه افزونه‌ی شما به یک نقش Realtime Database (به‌طور خاص، firebasedatabase.admin ) نیاز دارد.

    • اگر افزونه شما فقط منتظر یک رویداد فعال‌سازی از یک محصول است ، در این صورت افزونه شما به نقشی مرتبط با آن محصول نیاز ندارد .

      برای مثال، اگر افزونه شما هنگام نوشتن در یک نمونه Realtime Database فعال شود (اما چیزی در پایگاه داده ننویسد)، افزونه شما به نقش Realtime Database نیازی ندارد .

  2. بعد از اینکه مشخص کردید افزونه شما با کدام محصولات تعامل دارد ، باید تصمیم بگیرید که کدام نقش برای آن تعامل خاص مورد نیاز است. برخی از محصولات بسته به عمل یا مجموعه اقدامات انجام شده، نقش‌های متفاوتی ارائه می‌دهند.

    برای مثال، فرض کنید افزونه شما با یک 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 منبع اضافه شود. در صورت حذف، به طور پیش‌فرض projects/${project_id} قرار می‌گیرد.

مقادیر پشتیبانی‌شده projects/* و projects/*/buckets/* هستند.

کاهش دامنه نقش‌ها

افزونه‌ها باید از اصل حداقل امتیاز پیروی کنند و فقط درخواست دسترسی به منابعی را که نیاز دارند، داشته باشند. شما می‌توانید با استفاده از فیلد 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