एक्सटेंशन को तय किए गए काम करने के लिए, Firebase इंस्टॉल किए गए एक्सटेंशन के हर इंस्टेंस को सेवा खाते के ज़रिए, प्रोजेक्ट और उसके डेटा का सीमित ऐक्सेस देता है.
सेवा खाता क्या होता है?
सेवा खाता, Google उपयोगकर्ता खाता होता है. यह किसी ऐसे सिस्टम या मशीन का प्रतिनिधित्व करता है जिसके पास Google की सेवाओं के लिए, एपीआई कॉल करने की अनुमति होती है.
एक्सटेंशन इंस्टॉल करने के दौरान, Firebase प्रोजेक्ट में एक्सटेंशन के लिए एक सेवा खाता बनाता है. एक्सटेंशन के हर इंस्टॉल किए गए इंस्टेंस का अपना सेवा खाता होता है. अगर एक्सटेंशन के किसी इंस्टेंस को अनइंस्टॉल किया जाता है, तो Firebase, एक्सटेंशन के सेवा खाते को मिटा देता है.
एक्सटेंशन के लिए बनाए गए सेवा खाते इस फ़ॉर्मैट में होते हैं:
ext-extension-instance-id@project-id.iam.gserviceaccount.com
Firebase, किसी एक्सटेंशन के सेवा खाते को कुछ भूमिकाएं (अनुमतियों के बंडल) असाइन करके, किसी प्रोजेक्ट और उसके डेटा को ऐक्सेस करने के लिए एक्सटेंशन की अनुमतियों को सीमित करता है. एक्सटेंशन बनाते समय, यह तय किया जाता है कि एक्सटेंशन को काम करने के लिए किन भूमिकाओं की ज़रूरत है. इसके बाद, इन भूमिकाओं और एक्सटेंशन को इनकी ज़रूरत क्यों है, इसकी जानकारी अपनी extension.yaml
फ़ाइल में दी जाती है. इस पेज के सबसे नीचे उदाहरण देखें.
तय करें कि आपके एक्सटेंशन को किन भूमिकाओं की ज़रूरत है
एक्सटेंशन बनाते समय, यह तय किया जाता है कि एक्सटेंशन को काम करने के लिए किस लेवल के ऐक्सेस की ज़रूरत है.
इंस्टॉल करने के दौरान, Firebase CLI उपयोगकर्ता को हर भूमिका के लिए दिए गए ऐक्सेस लेवल को स्वीकार करने के लिए कहता है. अगर आपका एक्सटेंशन, ज़रूरत से ज़्यादा भूमिकाओं के लिए अनुरोध करता है, तो हो सकता है कि लोग इसे इंस्टॉल न करें.
यह पता लगाएं कि आपका एक्सटेंशन किसी प्रॉडक्ट के साथ इंटरैक्ट करता है या नहीं:
अगर आपका एक्सटेंशन किसी प्रॉडक्ट के साथ इंटरैक्ट करता है, तो आपको अपने एक्सटेंशन को उस प्रॉडक्ट का ऐक्सेस देना होगा.
उदाहरण के लिए, अगर आपका एक्सटेंशन किसी Realtime Database इंस्टेंस में डेटा लिखता है, तो आपके एक्सटेंशन को Realtime Database की भूमिका (खास तौर पर,
firebasedatabase.admin
) की ज़रूरत होती है.अगर आपका एक्सटेंशन सिर्फ़ किसी प्रॉडक्ट से ट्रिगर होने वाले इवेंट को सुनता है, तो आपके एक्सटेंशन को उस प्रॉडक्ट से जुड़ी भूमिका की ज़रूरत नहीं होती.
उदाहरण के लिए, अगर आपका एक्सटेंशन Realtime Database इंस्टेंस में लिखने पर ट्रिगर होता है, लेकिन डेटाबेस में कुछ भी नहीं लिखता है, तो आपके एक्सटेंशन को Realtime Database की भूमिका की ज़रूरत नहीं है.
यह तय करने के बाद कि आपका एक्सटेंशन किन प्रॉडक्ट के साथ इंटरैक्ट करता है, आपको यह तय करना होगा कि उस इंटरैक्शन के लिए कौनसी भूमिका ज़रूरी है. कुछ प्रॉडक्ट में, की गई कार्रवाई या कार्रवाइयों के सेट के आधार पर अलग-अलग भूमिकाएं होती हैं.
उदाहरण के लिए, मान लें कि आपका एक्सटेंशन किसी Cloud Storage बकेट के साथ इंटरैक्ट करता है.
storage.objectCreator
भूमिका की मदद से एक्सटेंशन, Cloud Storage बकेट में कोई ऑब्जेक्ट बना सकता है. हालांकि, इस भूमिका की मदद से एक्सटेंशन, ऑब्जेक्ट को देख, मिटा या बदल नहीं सकता. एक्सटेंशन को ये अतिरिक्त कार्रवाइयां करने की अनुमति देने के लिए, आपको उसेstorage.objectAdmin
भूमिका असाइन करनी होगी.
इस पेज पर सबसे नीचे दिए गए सेक्शन में जाकर, उन सभी भूमिकाओं के बारे में जानें जिन्हें एक्सटेंशन के सेवा खाते को असाइन किया जा सकता है. हर भूमिका के बारे में जानकारी और दी गई अनुमतियों के बारे में जानने के लिए, Firebase से जुड़ा दस्तावेज़ या Google Cloud से जुड़ा दस्तावेज़ पढ़ें. Google Cloud Console के IAM और एडमिन पैनल में जाकर भी भूमिकाएं देखी जा सकती हैं.
किसी एक्सटेंशन को भूमिकाएं असाइन करने का तरीका
roles
सेक्शन में, अपने extension.yaml
फ़ाइल में एक्सटेंशन को चलाने के लिए ज़रूरी IAM भूमिकाओं की सूची बनाएं.
यहां एक ऐसे एक्सटेंशन का उदाहरण दिया गया है जो तय किए गए 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
फ़ील्ड का इस्तेमाल करके, एक्सटेंशन के ऐक्सेस के दायरे को सीमित किया जा सकता है.
उदाहरण के लिए, अगर आपके एक्सटेंशन को Cloud Storage बकेट में ऑब्जेक्ट लिखने हैं, तो
आपके पास यह भूमिका इस्तेमाल करने का विकल्प है:
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}
) के साथ काम करता है.
एक्सटेंशन के लिए इस्तेमाल की जा सकने वाली भूमिकाएं
यहां दी गई टेबल में, Firebase प्रॉडक्ट के साथ इंटरैक्ट करने के लिए, आईएएम की भूमिकाओं की सूची दी गई है. इस टेबल में मौजूद ज़्यादातर भूमिकाएं, Firebase के प्रॉडक्ट-लेवल की भूमिकाएं हैं. हालांकि, कुछ भूमिकाओं को सीधे तौर पर Google Cloud मैनेज करता है. खास तौर पर, Cloud Firestore और Cloud Storage.
Firebase प्रॉडक्ट
अगर आपका एक्सटेंशन...के साथ इंटरैक्ट करता है | इनमें से कोई एक भूमिका असाइन करें... |
---|---|
Cloud Firestore |
datastore.importExportAdmin datastore.indexAdmin datastore.owner datastore.user datastore.viewer |
Cloud Storage for Firebase |
storage.admin storage.objectAdmin storage.objectCreator storage.objectViewer |
Firebase App Distribution |
firebaseappdistro.admin firebaseappdistro.viewer |
Firebase Authentication |
firebaseauth.admin firebaseauth.viewer |
Firebase A/B Testing |
firebaseabt.admin firebaseabt.viewer |
Firebase Cloud Messaging |
firebasenotifications.admin firebasenotifications.viewer |
Firebase Crashlytics |
firebasecrashlytics.admin firebasecrashlytics.viewer |
Firebase Hosting |
firebasehosting.admin firebasehosting.viewer |
Firebase In-App Messaging |
firebaseinappmessaging.admin firebaseinappmessaging.viewer |
Firebase ML |
firebaseml.admin firebaseml.viewer |
Firebase Performance Monitoring |
firebaseperformance.viewer firebaseperformance.reader firebaseperformance.writer |
Firebase Realtime Database |
firebasedatabase.admin firebasedatabase.viewer |
सुरक्षा के नियम |
firebaserules.viewer firebaserules.developer firebaserules.deployer |
Google Analytics |
firebaseanalytics.admin firebaseanalytics.viewer |
Google Cloud के प्रॉडक्ट
इन भूमिकाओं के बारे में जानने के लिए, Google Cloud का दस्तावेज़ पढ़ें.
अगर आपका एक्सटेंशन...के साथ इंटरैक्ट करता है | इनमें से कोई एक भूमिका असाइन करें... |
---|---|
कार्रवाइयां |
actions.Admin actions.Viewer |
Apigee |
apigee.analyticsAgent apigee.analyticsEditor apigee.analyticsViewer apigee.apiCreator apigee.deployer apigee.developerAdmin apigee.readOnlyAdmin apigee.synchronizerManager |
App Engine |
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 Chats |
chat.owner chat.reader |
Cloud Asset |
cloudasset.owner cloudasset.viewer |
Cloud Data Fusion |
datafusion.admin datafusion.viewer |
Cloud Debugger |
clouddebugger.agent clouddebugger.user |
Cloud Functions |
cloudfunctions.invoker cloudfunctions.viewer |
Cloud IAP |
iap.admin iap.httpsResourceAccessor iap.settingsAdmin iap.tunnelResourceAccessor |
Cloud IoT |
cloudiot.deviceController cloudiot.editor cloudiot.provisioner cloudiot.viewer |
Stackdriver Profiler |
cloudprofiler.agent cloudprofiler.user |
Cloud Scheduler |
cloudscheduler.admin cloudscheduler.jobRunner cloudscheduler.viewer |
Cloud Security Scanner |
cloudsecurityscanner.editor cloudsecurityscanner.runner cloudsecurityscanner.viewer |
Cloud SQL |
cloudsql.client cloudsql.editor cloudsql.viewer |
Cloud Trace |
cloudtrace.admin cloudtrace.agent cloudtrace.user |
डेटाफ़्लो |
dataflow.developer dataflow.viewer dataflow.worker |
Dialogflow |
dialogflow.admin dialogflow.client dialogflow.reader |
Cloud का डेटा लीक होने की रोकथाम |
dlp.reader dlp.user |
रिपोर्ट करते समय गड़बड़ी हुई |
errorreporting.user errorreporting.viewer errorreporting.writer |
Eventarc |
eventarc.publisher eventarc.eventReceiver |
Cloud Filestore |
file.editor file.viewer |
लॉगिंग |
logging.configWriter logging.logWriter logging.privateLogViewer logging.viewer |
मशीन लर्निंग इंजन |
ml.developer ml.jobOwner ml.modelOwner ml.modelUser ml.operationOwner ml.viewer |
मॉनिटर करने के लिए |
monitoring.editor monitoring.metricWriter monitoring.viewer |
AI Notebooks |
notebooks.admin notebooks.viewer |
Pub/Sub |
pubsub.editor pubsub.publisher pubsub.subscriber pubsub.viewer |
Memorystore Redis |
redis.editor redis.viewer |
Cloud Run | run.invoker |
स्रोत |
source.reader source.writer |
Cloud Spanner |
spanner.databaseAdmin spanner.databaseReader spanner.databaseUser spanner.viewer |
सेवा उपयोग | serviceusage.apiKeysMetadataViewer |
Cloud Storage Transfer Service |
storagetransfer.user storagetransfer.viewer |
Cloud Transcoder |
transcoder.admin transcoder.viewer |
Vertex AI | aiplatform.user |
अन्य |
identitytoolkit.admin identitytoolkit.viewer |