किसी एक्सटेंशन को तय की गई कार्रवाइयां करने के लिए, 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 और एडमिन पैनल में भी भूमिकाएं देखी जा सकती हैं.
किसी एक्सटेंशन को भूमिकाएं असाइन करने का तरीका
अपनी extension.yaml
फ़ाइल के roles
सेक्शन में, उन 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 |
Hangouts चैट |
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 ट्रांसफ़र सेवा |
storagetransfer.user storagetransfer.viewer |
Cloud Transcoder |
transcoder.admin transcoder.viewer |
Vertex AI | aiplatform.user |
अन्य |
identitytoolkit.admin identitytoolkit.viewer |