Firebase के सुरक्षा नियमों को मैनेज और डिप्लॉय करें

Firebase आपको Security Rules को मैनेज करने के लिए कई टूल उपलब्ध कराता है. इनमें से हर टूल, खास मामलों में काम आता है. साथ ही, हर टूल एक ही बैकएंड Firebase Security Rules मैनेजमेंट एपीआई का इस्तेमाल करता है.

मैनेजमेंट एपीआई को कॉल करने के लिए, चाहे किसी भी टूल का इस्तेमाल किया जाए, यह:

  • यह नियमों के सोर्स को इंजेस्ट करता है: नियमों का एक सेट, आम तौर पर एक कोड फ़ाइल जिसमें Firebase Security Rules स्टेटमेंट होते हैं.
  • यह सोर्स को ऐसे नियमों के सेट के तौर पर सेव करता है जिसमें बदलाव नहीं किया जा सकता.
  • यह रिलीज़ में हर नियम के सेट को डिप्लॉय करने की प्रोसेस को ट्रैक करता है. Firebase Security Rules की सुविधा वाली सेवाएं, किसी प्रोजेक्ट की रिलीज़ को देखती हैं, ताकि सुरक्षित संसाधन के लिए किए गए हर अनुरोध का आकलन किया जा सके.
  • इससे नियमों के सेट के सिंटैक्टिक और सिमैंटिक टेस्ट किए जा सकते हैं.

Firebase सीएलआई का इस्तेमाल करना

Firebase सीएलआई की मदद से, लोकल सोर्स अपलोड किए जा सकते हैं और रिलीज़ डिप्लॉय की जा सकती हैं. सीएलआई के Firebase Local Emulator Suite की मदद से, सोर्स की पूरी तरह से लोकल टेस्टिंग की जा सकती है.

सीएलआई का इस्तेमाल करके, अपने ऐप्लिकेशन कोड के साथ वर्शन कंट्रोल के तहत नियमों को रखा जा सकता है. साथ ही, नियमों को अपनी मौजूदा डिप्लॉयमेंट प्रोसेस के हिस्से के तौर पर डिप्लॉय किया जा सकता है.

कॉन्फ़िगरेशन फ़ाइल जनरेट करना

Firebase सीएलआई का इस्तेमाल करके Firebase प्रोजेक्ट को कॉन्फ़िगर करने पर, आपकी प्रोजेक्ट डायरेक्ट्री में .rules कॉन्फ़िगरेशन फ़ाइल बन जाती है. अपने Firebase प्रोजेक्ट को कॉन्फ़िगर करने के लिए, इस कमांड का इस्तेमाल करें:

Cloud Firestore

// Set up Firestore in your project directory, creates a .rules file
firebase init firestore

Realtime Database

// Set up Realtime Database in your project directory, creates a .rules file
firebase init database

Cloud Storage

// Set up Storage in your project directory, creates a .rules file
firebase init storage

नियमों में बदलाव करना और उन्हें अपडेट करना

.rules कॉन्फ़िगरेशन फ़ाइल में जाकर, सीधे अपने नियमों के सोर्स में बदलाव करें.

पक्का करें कि Firebase सीएलआई में किए गए बदलाव, Firebase कंसोल में दिखें. इसके अलावा, Firebase कंसोल या Firebase सीएलआई का इस्तेमाल करके, लगातार अपडेट किए जा सकते हैं. ऐसा न करने पर, हो सकता है कि Firebase कंसोल में किए गए अपडेट ओवरराइट हो जाएं.

अपडेट की जांच करना

Local Emulator Suite, सुरक्षा के नियमों की सुविधा वाले सभी प्रॉडक्ट के लिए एम्युलेटर उपलब्ध कराता है. हर एम्युलेटर के लिए सुरक्षा नियमों का इंजन, नियमों का सिंटैक्स और सिमैंटिक, दोनों तरह से आकलन करता है. इस तरह, यह सुरक्षा नियमों के मैनेजमेंट एपीआई की ओर से उपलब्ध कराए जाने वाले सिंटैक्स टेस्ट से बेहतर है.

अगर सीएलआई का इस्तेमाल किया जा रहा है, तो Firebase Security Rules टेस्टिंग के लिए Suite एक बेहतरीन टूल है. अपने अपडेट को स्थानीय तौर पर टेस्ट करने के लिए, Local Emulator Suite का इस्तेमाल करें. साथ ही, यह पुष्टि करें कि आपके ऐप्लिकेशन के Security Rules आपकी उम्मीद के मुताबिक काम कर रहे हैं.

अपने अपडेट डिप्लॉय करना

Security Rules को अपडेट और टेस्ट करने के बाद, सोर्स को प्रोडक्शन में डिप्लॉय करें.

Cloud Firestore Security Rules के लिए, .rules फ़ाइलों को अपने डिफ़ॉल्ट और अन्य नाम वाले डेटाबेस से जोड़ें. इसके लिए, firebase.json फ़ाइल की समीक्षा करें और उसे अपडेट करें.

सिर्फ़ Security Rules को डिप्लॉय करने के लिए, इन निर्देशों का इस्तेमाल करें या उन्हें अपनी सामान्य डिप्लॉयमेंट प्रोसेस के हिस्से के तौर पर डिप्लॉय करें.

Cloud Firestore

// Deploy rules for all databases configured in your firebase.json
firebase deploy --only firestore:rules
// Deploy rules for the specified database configured in your firebase.json firebase deploy --only firestore:<databaseId>

Realtime Database

// Deploy your .rules file
firebase deploy --only database

Cloud Storage

// Deploy your .rules file
firebase deploy --only storage

Firebase कंसोल का इस्तेमाल करना

Firebase कंसोल से, Security Rules सोर्स में बदलाव भी किया जा सकता है. साथ ही, उन्हें रिलीज़ के तौर पर डिप्लॉय किया जा सकता है. Firebase कंसोल यूज़र इंटरफ़ेस (यूआई) में बदलाव करने पर, सिंटैक्स की जांच की जाती है. साथ ही, Security Rules प्लेग्राउंड का इस्तेमाल करके, सिमैंटिक जांच की जा सकती है.

नियमों में बदलाव करना और उन्हें अपडेट करना

  1. Firebase कंसोल खोलें और अपना प्रोजेक्ट चुनें.
  2. इसके बाद, प्रॉडक्ट नेविगेशन से Realtime Database, Cloud Firestore या स्टोरेज को चुनें. फिर Security Rules एडिटर पर जाने के लिए, नियम पर क्लिक करें.
  3. सीधे एडिटर में जाकर अपने नियमों में बदलाव करें.

अपडेट की जांच करना

एडिटर के यूज़र इंटरफ़ेस (यूआई) में सिंटैक्स की जांच करने के अलावा, सिमैंटिक Security Rules व्यवहार की जांच भी की जा सकती है. इसके लिए, अपने प्रोजेक्ट के डेटाबेस और स्टोरेज के संसाधनों का इस्तेमाल करें. साथ ही, Security Rules प्लेग्राउंड का इस्तेमाल करके, सीधे Firebase कंसोल में जांच करें. Security Rules एडिटर में Rules Playground स्क्रीन खोलें, सेटिंग में बदलाव करें, और Run पर क्लिक करें. एडिटर में सबसे ऊपर, पुष्टि करने वाला मैसेज देखें.

अपने अपडेट डिप्लॉय करना

जब आपको लगे कि आपके अपडेट आपकी उम्मीद के मुताबिक हैं, तो पब्लिश करें पर क्लिक करें.

Admin SDK का इस्तेमाल करना

Node.js के लिए Admin SDK नियम सेट का इस्तेमाल किया जा सकता है. प्रोग्राम के हिसाब से, अपने-आप होने वाली प्रोसेस के ऐक्सेस की मदद से ये काम किए जा सकते हैं:

  • नियमों को मैनेज करने के लिए, कस्टम टूल, स्क्रिप्ट, डैशबोर्ड, और सीआई/सीडी पाइपलाइन लागू करें.
  • एक से ज़्यादा Firebase प्रोजेक्ट में नियमों को ज़्यादा आसानी से मैनेज करना.

प्रोग्राम के हिसाब से नियमों को अपडेट करते समय, यह बहुत ज़रूरी है कि आपके ऐप्लिकेशन के ऐक्सेस कंट्रोल में अनचाहे बदलाव न हों. अपना Admin SDK कोड लिखते समय, सुरक्षा का खास ध्यान रखें. खास तौर पर, नियमों को अपडेट या डिप्लॉय करते समय.

एक और ज़रूरी बात यह है कि Firebase Security Rules रिलीज़ को पूरी तरह से लागू होने में कुछ मिनट लगते हैं. नियमों को डिप्लॉय करने के लिए Admin SDK का इस्तेमाल करते समय, पक्का करें कि रेस कंडिशन से बचा जाए. इसमें आपका ऐप्लिकेशन तुरंत उन नियमों पर निर्भर करता है जिन्हें डिप्लॉय करने की प्रोसेस अभी पूरी नहीं हुई है. अगर आपके इस्तेमाल के उदाहरण में, ऐक्सेस कंट्रोल के नियमों को बार-बार अपडेट करने की ज़रूरत पड़ती है, तो Cloud Firestore का इस्तेमाल करके समाधान ढूंढें. इसे बार-बार अपडेट करने के बावजूद, रेस कंडिशन को कम करने के लिए डिज़ाइन किया गया है.

इन सीमाओं का भी ध्यान रखें:

  • सीरियलाइज़ किए जाने पर, नियमों का साइज़ UTF-8 कोड में बदले गए टेक्स्ट के 256 KiB से कम होना चाहिए.
  • किसी प्रोजेक्ट में, डिप्लॉय किए गए ज़्यादा से ज़्यादा 2,500 नियम सेट हो सकते हैं. यह सीमा पूरी होने के बाद, नए नियम सेट बनाने से पहले आपको कुछ पुराने नियम सेट मिटाने होंगे.

Cloud Storage या Cloud Firestore के नियमों के सेट बनाना और उन्हें डिप्लॉय करना

Admin SDK की मदद से सुरक्षा के नियमों को मैनेज करने के लिए, आम तौर पर इस्तेमाल किए जाने वाले वर्कफ़्लो में ये तीन अलग-अलग चरण शामिल हो सकते हैं:

  1. नियमों वाली फ़ाइल का सोर्स बनाना (ज़रूरी नहीं)
  2. नियमों का सेट बनाना
  3. नियमों के नए सेट को रिलीज़ या डिप्लॉय करना

एसडीके, Cloud Storage और Cloud Firestore के सुरक्षा नियमों के लिए, इन चरणों को एक ही एपीआई कॉल में जोड़ने का तरीका उपलब्ध कराता है. उदाहरण के लिए:

    const source = `service cloud.firestore {
      match /databases/{database}/documents {
        match /carts/{cartID} {
          allow create: if request.auth != null && request.auth.uid == request.resource.data.ownerUID;
          allow read, update, delete: if request.auth != null && request.auth.uid == resource.data.ownerUID;
        }
      }
    }`;
    // Alternatively, load rules from a file
    // const fs = require('fs');
    // const source = fs.readFileSync('path/to/firestore.rules', 'utf8');

    await admin.securityRules().releaseFirestoreRulesetFromSource(source);

releaseFirestoreRulesetFromSource() के साथ Cloud Storage नियमों के लिए भी यही पैटर्न काम करता है.

इसके अलावा, नियमों की फ़ाइल को इन-मेमोरी ऑब्जेक्ट के तौर पर बनाया जा सकता है. साथ ही, नियमों का सेट बनाकर उसे अलग से डिप्लॉय किया जा सकता है, ताकि इन इवेंट को बेहतर तरीके से कंट्रोल किया जा सके. उदाहरण के लिए:

    const rf = admin.securityRules().createRulesFileFromSource('firestore.rules', source);
    const rs = await admin.securityRules().createRuleset(rf);
    await admin.securityRules().releaseFirestoreRuleset(rs);

Realtime Database के नियमों के सेट अपडेट करें

Admin SDK की मदद से Realtime Database के नियम सेट अपडेट करने के लिए, admin.database के getRules() और setRules() तरीके इस्तेमाल करें. नियमों के सेट को JSON फ़ॉर्मैट में या टिप्पणियों के साथ स्ट्रिंग के तौर पर वापस पाया जा सकता है.

नियमों के सेट को अपडेट करने के लिए:

    const source = `{
      "rules": {
        "scores": {
          ".indexOn": "score",
          "$uid": {
            ".read": "$uid == auth.uid",
            ".write": "$uid == auth.uid"
          }
        }
      }
    }`;
    await admin.database().setRules(source);

नियमों के सेट मैनेज करना

बड़े नियमों के सेट को मैनेज करने में मदद करने के लिए, Admin SDK आपको admin.securityRules().listRulesetMetadata के साथ सभी मौजूदा नियमों की सूची बनाने की सुविधा देता है. उदाहरण के लिए:

    const allRulesets = [];
    let pageToken = null;
    while (true) {
      const result = await admin.securityRules().listRulesetMetadata(pageToken: pageToken);
      allRulesets.push(...result.rulesets);
      pageToken = result.nextPageToken;
      if (!pageToken) {
        break;
      }
    }

अगर आपके पास बहुत बड़ा डिप्लॉयमेंट है और समय के साथ 2,500 रूलसेट की सीमा पूरी हो जाती है, तो आपके पास एक तय समय के बाद सबसे पुराने नियमों को मिटाने का लॉजिक बनाने का विकल्प होता है. उदाहरण के लिए, 30 दिनों से ज़्यादा समय से डिप्लॉय किए गए सभी नियम सेट मिटाने के लिए:

    const thirtyDays = new Date(Date.now() - THIRTY_DAYS_IN_MILLIS);
    const promises = [];
    allRulesets.forEach((rs) => {
      if (new Date(rs.createTime) < thirtyDays) {
        promises.push(admin.securityRules().deleteRuleset(rs.name));
      }
    });
    await Promise.all(promises);
    console.log(`Deleted ${promises.length} rulesets.`);

REST API का इस्तेमाल करना

ऊपर बताए गए टूल, कई तरह के वर्कफ़्लो के लिए सही हैं. इनमें आपके प्रोजेक्ट में मौजूद कई Cloud Firestore डेटाबेस के लिए Firebase Security Rules मैनेजमेंट शामिल है. हालांकि, हो सकता है कि आप Management API का इस्तेमाल करके, Firebase Security Rules को मैनेज और डिप्लॉय करना चाहें. मैनेजमेंट एपीआई आपको सबसे ज़्यादा सुविधाएं देता है.

इन सीमाओं का भी ध्यान रखें:

  • सीरियलाइज़ किए जाने पर, नियमों का साइज़ UTF-8 कोड में बदले गए टेक्स्ट के 256 KiB से कम होना चाहिए.
  • किसी प्रोजेक्ट में, डिप्लॉय किए गए ज़्यादा से ज़्यादा 2,500 नियम सेट हो सकते हैं. यह सीमा पूरी होने के बाद, नए नियम सेट बनाने से पहले आपको कुछ पुराने नियम सेट मिटाने होंगे.

REST का इस्तेमाल करके, Cloud Firestore या Cloud Storage के नियमों के सेट बनाना और उन्हें डिप्लॉय करना

इस सेक्शन में दिए गए उदाहरणों में Firestore Security Rules का इस्तेमाल किया गया है. हालांकि, ये Cloud Storage Security Rules पर भी लागू होते हैं.

एपीआई कॉल करने के लिए, उदाहरणों में cURL का भी इस्तेमाल किया जाता है. सेट अप करने और पुष्टि करने वाले टोकन पास करने के चरण हटा दिए गए हैं. रेफ़रंस दस्तावेज़ के साथ इंटिग्रेट किए गए एपीआई एक्सप्लोरर का इस्तेमाल करके, इस एपीआई के साथ एक्सपेरिमेंट किया जा सकता है.

मैनेजमेंट एपीआई का इस्तेमाल करके, नियमों का सेट बनाने और उसे डिप्लॉय करने के लिए, आम तौर पर ये तरीके अपनाए जाते हैं:

  1. नियमों के लिए फ़ाइल सोर्स बनाना
  2. नियमों का सेट बनाना
  3. नियमों के नए सेट को रिलीज़ (डिप्लॉय) करें.

कोई सोर्स बनाएं

मान लें कि आप अपने secure_commerce Firebase प्रोजेक्ट पर काम कर रहे हैं और आपको अपने प्रोजेक्ट में east_store नाम के डेटाबेस में लॉक-डाउन Cloud Firestore Security Rules को डिप्लॉय करना है.

इन नियमों को firestore.rules फ़ाइल में लागू किया जा सकता है.

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

नियमों का सेट बनाना

अब इस फ़ाइल के लिए, base64 कोड में बदला गया फ़िंगरप्रिंट जनरेट करें. इसके बाद, इस फ़ाइल में मौजूद सोर्स का इस्तेमाल करके, projects.rulesets.create REST कॉल की मदद से नियमों का सेट बनाने के लिए ज़रूरी पेलोड को भरा जा सकता है. यहां firestore.rules के कॉन्टेंट को REST पेलोड में डालने के लिए, cat कमांड का इस्तेमाल करें.

ट्रैकिंग के लिए, इसे अपने east_store डेटाबेस से जोड़ने के लिए, attachment_point को east_store पर सेट करें.

curl -X POST -d '{
  "source": {
    "files": [
      {
        "content": "' $(cat storage.rules) '",
        "name": "firestore.rules",
        "fingerprint": <sha fingerprint>
      },
    "attachment_point": "firestore.googleapis.com/databases/east_store"
    ]
  }
}' 'https://firebaserules.googleapis.com/v1/projects/secure_commerce/rulesets'

एपीआई, पुष्टि करने से जुड़ा जवाब और नियमों के सेट का नाम दिखाता है. उदाहरण के लिए, projects/secure_commerce/rulesets/uuid123.

नियमों का सेट रिलीज़ (डिप्लॉय) करना

अगर नियमों का सेट मान्य है, तो आखिरी चरण में नियमों के नए सेट को किसी नाम वाली रिलीज़ में डिप्लॉय करें.

curl -X POST -d '{
  "name": "projects/secure_commerce/releases/cloud.firestore/east_store"  ,
  "rulesetName": "projects/secure_commerce/rulesets/uuid123"
}' 'https://firebaserules.googleapis.com/v1/projects/secure_commerce/releases'

ध्यान रखें कि Firebase Security Rules रिलीज़ को पूरी तरह से लागू होने में कुछ मिनट लगते हैं. डिप्लॉय करने के लिए मैनेजमेंट REST API का इस्तेमाल करते समय, रेस कंडिशन से बचना चाहिए. इसमें आपका ऐप्लिकेशन तुरंत उन नियमों पर निर्भर करता है जिन्हें डिप्लॉय करने की प्रोसेस अभी पूरी नहीं हुई है.

REST का इस्तेमाल करके, Realtime Database के नियमों के सेट अपडेट करना

Realtime Database, Security Rules को मैनेज करने के लिए अपना REST इंटरफ़ेस उपलब्ध कराता है. REST के ज़रिए Firebase Realtime Database Security Rules को मैनेज करना देखें.

REST की मदद से रूलसेट मैनेज करना

नियमों के बड़े डिप्लॉयमेंट को मैनेज करने के लिए, मैनेजमेंट एपीआई, नियमों के सेट और रिलीज़ बनाने के लिए REST तरीके के अलावा, ये तरीके भी उपलब्ध कराता है:

  • नियमों के सेट की सूची देखना, उन्हें पाना, और मिटाना
  • नियमों की सूची देखना, उन्हें पाना, और मिटाना रिलीज़

अगर आपके पास बहुत बड़ा डिप्लॉयमेंट है और समय के साथ 2,500 रूलसेट की सीमा पूरी हो जाती है, तो आपके पास एक तय समय के बाद सबसे पुराने नियमों को मिटाने का लॉजिक बनाने का विकल्प होता है. उदाहरण के लिए, 30 दिनों से ज़्यादा समय से डिप्लॉय किए गए सभी रूलसेट मिटाने के लिए, projects.rulesets.list तरीके को कॉल किया जा सकता है. साथ ही, Ruleset ऑब्जेक्ट की JSON सूची को उनकी createTime कुंजियों पर पार्स किया जा सकता है. इसके बाद, ruleset_id के हिसाब से, संबंधित रूलसेट पर project.rulesets.delete को कॉल किया जा सकता है.

REST की मदद से अपडेट की जांच करना

आखिर में, Management API की मदद से, अपने प्रोडक्शन प्रोजेक्ट में Cloud Firestore और Cloud Storage संसाधनों पर सिंटैक्टिक और सिमैंटिक टेस्ट चलाए जा सकते हैं.

एपीआई के इस कॉम्पोनेंट की मदद से जांच करने में ये शामिल हैं:

  1. TestCase ऑब्जेक्ट के सेट को दिखाने के लिए, TestSuite JSON ऑब्जेक्ट तय करना
  2. TestSuite सबमिट करना
  3. पार्स करने पर TestResult ऑब्जेक्ट मिले

आइए, testcase.json फ़ाइल में एक TestCase वाले TestSuite ऑब्जेक्ट के बारे में बताएं. इस उदाहरण में, हम REST पेलोड के साथ इनलाइन Security Rules भाषा सोर्स को पास करते हैं. साथ ही, उन नियमों पर चलाने के लिए टेस्ट सुइट भी पास करते हैं. हम नियमों के आकलन की उम्मीद और क्लाइंट के अनुरोध के बारे में बताते हैं. इसके आधार पर, नियमों के सेट की जांच की जाती है. यह भी बताया जा सकता है कि टेस्ट रिपोर्ट कितनी पूरी है. इसके लिए, "FULL" वैल्यू का इस्तेमाल करें. इससे यह पता चलता है कि रिपोर्ट में सभी Security Rules भाषा के एक्सप्रेशन के नतीजे शामिल किए जाने चाहिए. इनमें वे एक्सप्रेशन भी शामिल हैं जो अनुरोध से मैच नहीं हुए.

 {
  "source":
  {
    "files":
    [
      {
        "name": "firestore.rules",
        "content": "service cloud.firestore {
          match /databases/{database}/documents {
            match /users/{userId}{
              allow read: if (request.auth.uid == userId);
            }
            function doc(subpath) {
              return get(/databases/$(database)/documents/$(subpath)).data;
            }
            function isAccountOwner(accountId) {
              return request.auth.uid == accountId 
                  || doc(/users/$(request.auth.uid)).accountId == accountId;
            }
            match /licenses/{accountId} {
              allow read: if isAccountOwner(accountId);
            }
          }
        }"
      }
    ]
  },
  "testSuite":
  {
    "testCases":
    [
      {
        "expectation": "ALLOW",
        "request": {
           "auth": {"uid": "123"},
           "path": "/databases/(default)/documents/licenses/abcd",
           "method": "get"},
        "functionMocks": [
            {
            "function": "get",
            "args": [{"exact_value": "/databases/(default)/documents/users/123"}],
            "result": {"value": {"data": {"accountId": "abcd"}}}
            }
          ]
      }
    ]
  }
}

इसके बाद, हम इस TestSuite को projects.test तरीके से आकलन के लिए सबमिट कर सकते हैं.

curl -X POST -d '{
    ' $(cat testcase.json) '
}' 'https://firebaserules.googleapis.com/v1/projects/secure_commerce/rulesets/uuid123:test'

वापस किया गया TestReport (जिसमें टेस्ट की सफलता/असफलता की स्थिति, डीबग मैसेज की सूचियां, विज़िट किए गए नियमों के एक्सप्रेशन की सूचियां, और उनकी आकलन रिपोर्ट शामिल हैं) सफलता की स्थिति के साथ पुष्टि करेगा कि ऐक्सेस की अनुमति सही तरीके से दी गई है.

क्रॉस-सर्विस Cloud Storage Security Rules के लिए अनुमतियां मैनेज करना

अगर आपने Cloud Storage Security Rules बनाए हैं, जो Cloud Firestore दस्तावेज़ के कॉन्टेंट का इस्तेमाल करते हैं, ताकि सुरक्षा की शर्तों का आकलन किया जा सके, तो आपको Firebase कंसोल या Firebase सीएलआई में, दोनों प्रॉडक्ट को कनेक्ट करने की अनुमतियां चालू करने के लिए कहा जाएगा.

अगर आपको अलग-अलग सेवाओं के लिए सुरक्षा की इस सुविधा को बंद करना है, तो:

  1. सबसे पहले, इस सुविधा को बंद करने से पहले, अपने नियमों में बदलाव करें. इसके लिए, Cloud Firestore को ऐक्सेस करने के लिए Security Rules फ़ंक्शन का इस्तेमाल करने वाले सभी स्टेटमेंट हटाएं. अगर ऐसा नहीं किया जाता है, तो सुविधा बंद होने के बाद, Security Rules की समीक्षाओं की वजह से स्टोरेज के आपके अनुरोध अस्वीकार हो जाएंगे.

  2. "Firebase Rules Firestore Service Agent" की भूमिका को मिटाने के लिए, Google Cloud Console में IAM पेज का इस्तेमाल करें. इसके लिए, भूमिकाओं को वापस लेने के लिए Cloud गाइड में दिया गया तरीका अपनाएं.

अगली बार Firebase सीएलआई या Firebase कंसोल से, क्रॉस-सर्विस के नियम सेव करने पर, आपको इस सुविधा को फिर से चालू करने के लिए कहा जाएगा.