قم بإعداد الوصول المناسب للامتداد

لكي يتمكن أحد الامتدادات من تنفيذ إجراءاته المحددة، يمنح Firebase كل مثيل من الامتداد المثبت وصولاً محدودًا إلى المشروع وبياناته عبر حساب الخدمة .

ما هو حساب الخدمة؟

حساب الخدمة هو نوع خاص من حساب مستخدم Google. وهو يمثل مستخدمًا غير بشري يمكنه إجراء مكالمات API معتمدة لخدمات Google.

أثناء تثبيت ملحق، يقوم Firebase بإنشاء حساب خدمة للملحق في المشروع. كل مثيل مثبت للامتداد له حساب خدمة خاص به. إذا تم إلغاء تثبيت مثيل ملحق، فسيقوم Firebase بحذف حساب خدمة الملحق.

حسابات الخدمة التي تم إنشاؤها للإضافات تكون بالتنسيق:

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

يحد Firebase من وصول الامتداد إلى المشروع وبياناته عن طريق تعيين أدوار محددة (حزم من الأذونات) لحساب الخدمة الخاص بالامتداد. عندما تقوم بإنشاء ملحق، فإنك تحدد الأدوار التي يتطلبها ملحقك للعمل، ثم تقوم بإدراج هذه الأدوار وسبب احتياج ملحقك إلى هذه الأدوار في ملف extension.yaml الخاص بك (انظر المثال في أسفل هذه الصفحة).

حدد الأدوار التي يتطلبها ملحقك

عندما تقوم بإنشاء ملحقك، فإنك تحدد مستوى الوصول الذي يتطلبه ملحقك لتشغيله.

أثناء التثبيت، تطالب واجهة سطر أوامر Firebase المستخدم بقبول مستوى الوصول الذي يمنحه كل دور. إذا كان ملحقك يطلب أدوارًا أكثر مما يحتاجه فعليًا، فمن غير المرجح أن يقوم المستخدمون بتثبيته.

  1. تحديد ما إذا كان ملحقك يتفاعل مع منتج ما:

    • إذا كان ملحقك يتفاعل مع منتج ما ، فأنت بحاجة إلى منح ملحقك حق الوصول إلى هذا المنتج.

      على سبيل المثال، إذا كان ملحقك يكتب البيانات إلى مثيل قاعدة بيانات Realtime، فإن ملحقك يحتاج إلى دور قاعدة بيانات Realtime (على وجه التحديد، firebasedatabase.admin ).

    • إذا كان ملحقك يستمع فقط إلى حدث تشغيل من أحد المنتجات ، فلن يحتاج ملحقك إلى دور مرتبط بهذا المنتج.

      على سبيل المثال، إذا تم تشغيل ملحقك عند الكتابة إلى مثيل قاعدة بيانات Realtime (لكنه لا يكتب أي شيء إلى قاعدة البيانات)، فإن ملحقك لا يحتاج إلى دور قاعدة بيانات Realtime.

  2. بعد تحديد المنتجات التي يتفاعل معها ملحقك، يتعين عليك تحديد الدور المطلوب لهذا التفاعل المحدد. تقدم بعض المنتجات أدوارًا مختلفة اعتمادًا على الإجراء أو مجموعة الإجراءات التي يتم تنفيذها.

    على سبيل المثال، لنفترض أن ملحقك يتفاعل مع مجموعة التخزين السحابي. سيسمح دور storage.objectCreator للامتداد بإنشاء كائن في مجموعة التخزين السحابي، لكن هذا الدور لن يسمح للامتداد بعرض الكائنات أو حذفها أو الكتابة فوقها. لتمكين الامتداد من تنفيذ تلك الإجراءات الإضافية، تحتاج إلى تعيين دور storage.objectAdmin بدلاً من ذلك.

ارجع إلى القسم الموجود أسفل هذه الصفحة لعرض جميع الأدوار المدعومة التي يمكنك تعيينها لحساب خدمة الملحق الخاص بك. للتعرف على وصف كل دور والأذونات الممنوحة له، قم بزيارة وثائق Firebase أو وثائق Google Cloud . يمكنك أيضًا البحث عن الأدوار في لوحة IAM & Admin بوحدة تحكم Google Cloud.

كيفية تعيين الأدوار إلى ملحق

قم بإدراج أدوار IAM المطلوبة لتشغيل الامتداد الخاص بك في قسم roles في ملف extension.yaml الخاص بك.

فيما يلي مثال على ملحق يستمع إلى مسار قاعدة بيانات Firebase Realtime المحدد. عند تشغيله، يقوم الامتداد بتحديث البريد الإلكتروني لحساب المستخدم (التفاعل مع مصادقة Firebase) ويرسل إشعارًا (التفاعل مع Firebase Cloud Messaging). لاحظ ما يلي:

  • على الرغم من أن الامتداد يتم تشغيله من حدث Realtime Database، إلا أن دور 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 الخاصة بالمورد التي يجب إضافة هذا الدور إليها. إذا تم حذفه، فسيتم تعيينه افتراضيًا على 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 ).

منتجات فايربايس

إذا كان ملحقك يتفاعل مع... قم بتعيين أحد هذه الأدوار...
سحابة فايرستور datastore.importExportAdmin
datastore.indexAdmin
datastore.owner
datastore.user
datastore.viewer
التخزين السحابي لـ Firebase Storage.admin
Storage.objectAdmin
Storage.objectCreator
تخزين.objectViewer
توزيع تطبيقات Firebase firebaseappdistro.admin
firebaseappdistro.viewer
مصادقة Firebase firebaseauth.admin
firebaseauth.viewer
اختبار Firebase A/B firebaseabt.admin
firebaseabt.viewer
المراسلة السحابية من Firebase firebasenotifications.admin
firebasenotifications.viewer
Firebase Crashlytics firebasecrashlytics.admin
firebasecrashlytics.viewer
استضافة Firebase firebasehosting.admin
firebasehosting.viewer
المراسلة داخل التطبيق من Firebase firebaseinappmessaging.admin
firebaseinappmessaging.viewer
فايربيس مل firebaseml.admin
firebaseml.viewer
مراقبة أداء Firebase firebaseperformance.viewer
firebaseperformance.reader
firebaseperformance.writer
قاعدة بيانات Firebase في الوقت الحقيقي firebasedatabase.admin
firebasatabase.viewer
قواعد الأمن firebaserules.viewer
firebaserules.developer
firebaserules.deployer
تحليلات كوكل firebaseanalytics.admin
firebaseanalytics.viewer

منتجات جوجل السحابية

تعرف على هذه الأدوار في وثائق Google Cloud .

إذا كان ملحقك يتفاعل مع... قم بتعيين أحد هذه الأدوار...
أجراءات الإجراءات.المشرف
action.Viewer
أبيجي 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.predictor
automl.viewer
BigQuery bigquery.connectionAdmin
bigquery.connectionUser
bigquery.dataEditor
bigquery.dataOwner
bigquery.dataViewer
bigquery.jobUser
bigquery.metadataViewer
bigquery.readSessionUser
bigquery.user
سحابة بيج تابل bigtable.reader
bigtable.user
bigtable.viewer
الفواتير billing.viewer
دردشات Hangout chat.owner
chat.reader
الأصول السحابية cloudasset.owner
cloudasset.viewer
دمج البيانات السحابية datafusion.admin
datafusion.viewer
مصحح الأخطاء السحابية clouddebugger.agent
clouddebugger.user
وظائف السحابة cloudfunctions.invocer
cloudfunctions.viewer
الشراء داخل السحابة iap.admin
iap.httpsResourceAccessor
iap.settingsAdmin
iap.tunnelResourceAccessor
إنترنت الأشياء السحابي cloudiot.deviceController
cloudiot.editor
cloudiot.provisioner
cloudiot.viewer
ملف التعريف Stackdriver cloudprofiler.agent
cloudprofiler.user
جدولة السحابة 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
dataflow.worker
تدفق الحوار Diagramflow.admin
Diagramflow.client
قارئ الحوار
منع فقدان البيانات السحابية dlp.reader
dlp.user
الإبلاغ عن الأخطاء errorreporting.user
errorreporting.viewer
errorreporting.writer
إيفينتارك Eventarc.publisher
Eventarc.eventReceiver
مخزن الملفات السحابية محرر الملف
file.viewer
تسجيل logging.configWriter
logWriter
logging.privateLogViewer
logging.viewer
محرك التعلم الآلي ml.developer
ml.jobOwner
ml.modelOwner
ml.modelUser
ml.operationOwner
ml.viewer
يراقب Monitoring.editor
Monitoring.metricWriter
Monitoring.viewer
دفاتر الذكاء الاصطناعي دفاتر الملاحظات.admin
دفاتر الملاحظات.viewer
حانة/فرعية pubsub.editor
pubsub.publisher
pubsub.subscriber
pubsub.viewer
مخزن الذاكرة ريديس redis.editor
redis.viewer
تشغيل السحابة run.invocer
مصدر source.reader
المصدر. الكاتب
مفتاح السحابة Spanner.databaseAdmin
Spanner.databaseReader
Spanner.databaseUser
المفك.viewer
استخدام الخدمة Serviceusage.apiKeysMetadataViewer
خدمة نقل التخزين السحابي Storagetransfer.user
Storagetransfer.viewer
محول السحابة transcoder.admin
transcoder.viewer
فيرتكس الذكاء الاصطناعي aiplatform.user
آخر Identitytoolkit.admin
id.identtoolkit.viewer