لكي يتمكن أحد الامتدادات من تنفيذ إجراءاته المحددة، يمنح Firebase كل مثيل من الامتداد المثبت وصولاً محدودًا إلى المشروع وبياناته عبر حساب الخدمة .
ما هو حساب الخدمة؟
حساب الخدمة هو نوع خاص من حساب مستخدم Google. وهو يمثل مستخدمًا غير بشري يمكنه إجراء مكالمات API معتمدة لخدمات Google.
أثناء تثبيت ملحق، يقوم Firebase بإنشاء حساب خدمة للملحق في المشروع. كل مثيل مثبت للامتداد له حساب خدمة خاص به. إذا تم إلغاء تثبيت مثيل ملحق، فسيقوم Firebase بحذف حساب خدمة الملحق.
حسابات الخدمة التي تم إنشاؤها للإضافات تكون بالتنسيق:
ext- extension-instance-id @ project-id .iam.gserviceaccount.com
يحد Firebase من وصول الامتداد إلى المشروع وبياناته عن طريق تعيين أدوار محددة (حزم من الأذونات) لحساب الخدمة الخاص بالامتداد. عندما تقوم بإنشاء ملحق، فإنك تحدد الأدوار التي يتطلبها ملحقك للعمل، ثم تقوم بإدراج هذه الأدوار وسبب احتياج ملحقك إلى هذه الأدوار في ملف extension.yaml
الخاص بك (انظر المثال في أسفل هذه الصفحة).
حدد الأدوار التي يتطلبها ملحقك
عندما تقوم بإنشاء ملحقك، فإنك تحدد مستوى الوصول الذي يتطلبه ملحقك لتشغيله.
أثناء التثبيت، تطالب واجهة سطر أوامر Firebase المستخدم بقبول مستوى الوصول الذي يمنحه كل دور. إذا كان ملحقك يطلب أدوارًا أكثر مما يحتاجه فعليًا، فمن غير المرجح أن يقوم المستخدمون بتثبيته.
تحديد ما إذا كان ملحقك يتفاعل مع منتج ما:
إذا كان ملحقك يتفاعل مع منتج ما ، فأنت بحاجة إلى منح ملحقك حق الوصول إلى هذا المنتج.
على سبيل المثال، إذا كان ملحقك يكتب البيانات إلى مثيل قاعدة بيانات Realtime، فإن ملحقك يحتاج إلى دور قاعدة بيانات Realtime (على وجه التحديد،
firebasedatabase.admin
).إذا كان ملحقك يستمع فقط إلى حدث تشغيل من أحد المنتجات ، فلن يحتاج ملحقك إلى دور مرتبط بهذا المنتج.
على سبيل المثال، إذا تم تشغيل ملحقك عند الكتابة إلى مثيل قاعدة بيانات Realtime (لكنه لا يكتب أي شيء إلى قاعدة البيانات)، فإن ملحقك لا يحتاج إلى دور قاعدة بيانات Realtime.
بعد تحديد المنتجات التي يتفاعل معها ملحقك، يتعين عليك تحديد الدور المطلوب لهذا التفاعل المحدد. تقدم بعض المنتجات أدوارًا مختلفة اعتمادًا على الإجراء أو مجموعة الإجراءات التي يتم تنفيذها.
على سبيل المثال، لنفترض أن ملحقك يتفاعل مع مجموعة التخزين السحابي. سيسمح دور
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 الخاصة بالمورد التي يجب إضافة هذا الدور إليها. إذا تم حذفه، فسيتم تعيينه افتراضيًا على القيم المدعومة هي |
تقليل نطاق الأدوار
يجب أن تتبع الإضافات مبدأ الامتيازات الأقل وتطلب فقط الوصول إلى الموارد التي تحتاجها. يمكنك تحديد نطاق الوصول إلى الملحق باستخدام حقل 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 |