Check out what’s new from Firebase@ Google I/O 2021, and join our alpha program for early access to the new Remote Config personalization feature. Learn more

Firebase सुरक्षा नियम प्रबंधित और परिनियोजित करें

फायरबेस सीएलआई का प्रयोग करें

Firebase CLI का उपयोग करके नियमों को संपादित और परिनियोजित करें। सीएलआई का उपयोग करने से आप अपने नियमों को अपने एप्लिकेशन कोड के साथ संस्करण नियंत्रण में रख सकते हैं और अपनी मौजूदा परिनियोजन प्रक्रिया के हिस्से के रूप में नियमों को लागू कर सकते हैं।

एक कॉन्फ़िगरेशन फ़ाइल उत्पन्न करें

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

क्लाउड फायरस्टोर

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

रीयलटाइम डेटाबेस

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

बादल भंडारण

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

अपने नियम संपादित करें और अपडेट करें

अपने नियमों को सीधे .rules कॉन्फ़िगरेशन फ़ाइल में संपादित करें। सुनिश्चित करें कि आपके द्वारा Firebase CLI में किया गया कोई भी संपादन Firebase कंसोल में दिखाई देता है, या कि आप Firebase कंसोल या Firebase CLI का उपयोग करके लगातार अपडेट करते रहते हैं। अन्यथा, आप Firebase कंसोल में किए गए किसी भी अपडेट को अधिलेखित कर सकते हैं।

अपने अपडेट का परीक्षण करें

स्थानीय रूप से अपने अपडेट का परीक्षण करने के लिए फायरबेस एमुलेटर का उपयोग करें और पुष्टि करें कि आपके ऐप के नियम आपके इच्छित व्यवहार को प्रदर्शित करते हैं।

अपने अपडेट तैनात करें

एक बार जब आप अपने नियमों को अपडेट और परीक्षण कर लेते हैं, तो उन्हें उत्पादन में तैनात करें। अपने नियमों को अकेले चुनिंदा रूप से परिनियोजित करने या उन्हें अपनी सामान्य परिनियोजन प्रक्रिया के भाग के रूप में परिनियोजित करने के लिए निम्न आदेशों का उपयोग करें।

क्लाउड फायरस्टोर

// Deploy your .rules file
firebase deploy --only firestore:rules

रीयलटाइम डेटाबेस

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

बादल भंडारण

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

फायरबेस कंसोल का प्रयोग करें

आप Firebase कंसोल से नियमों को संपादित और परिनियोजित भी कर सकते हैं।

अपने नियम संपादित करें और अपडेट करें

  1. फायरबेस कंसोल खोलें और अपना प्रोजेक्ट चुनें।
  2. फिर, उत्पाद नेविगेशन से रीयलटाइम डाटाबेस, बादल Firestore या भंडारण का चयन करें, तो नियम संपादक को नेविगेट करने के लिए नियम क्लिक करें।
  3. अपने नियमों को सीधे संपादक में संपादित करें।

अपने अपडेट का परीक्षण करें

आप नियम सिम्युलेटर का उपयोग करके सीधे Firebase कंसोल में अपने नियम व्यवहार का परीक्षण कर सकते हैं। नियम संपादक में सिम्युलेटर स्क्रीन खोलें, सेटिंग्स संशोधित करें और रन पर क्लिक करें। संपादक के शीर्ष पर पुष्टिकरण संदेश देखें।

अपने अपडेट तैनात करें

एक बार जब आप संतुष्ट हो जाएं कि आपके अपडेट आपकी अपेक्षा के अनुरूप हैं, तो प्रकाशित करें पर क्लिक करें

व्यवस्थापक SDK का उपयोग करें

आप सुरक्षा नियमों को प्रोग्रामेटिक रूप से बनाने, प्रबंधित करने और लागू करने के लिए Node.js के लिए व्यवस्थापक SDK का उपयोग कर सकते हैं। इस प्रोग्रामेटिक एक्सेस के साथ, आप यह कर सकते हैं:

  • नियमों के प्रबंधन के लिए कस्टम टूल, स्क्रिप्ट, डैशबोर्ड और CI/CD पाइपलाइन लागू करें।
  • अनेक Firebase प्रोजेक्ट में नियमों को अधिक आसानी से प्रबंधित करें.

नियमों को प्रोग्रामेटिक रूप से अपडेट करते समय, अपने ऐप के एक्सेस कंट्रोल में अनपेक्षित परिवर्तन करने से बचना बहुत महत्वपूर्ण है। सुरक्षा को ध्यान में रखते हुए अपना व्यवस्थापक SDK कोड लिखें, विशेष रूप से नियमों को अपडेट या परिनियोजित करते समय।

ध्यान में रखने वाली एक और महत्वपूर्ण बात यह है कि फायरबेस सुरक्षा नियमों को पूरी तरह से लागू होने में कई मिनट लगते हैं। नियमों को परिनियोजित करने के लिए व्यवस्थापक SDK का उपयोग करते समय, सुनिश्चित करें कि उन दौड़ स्थितियों से बचें, जिनमें आपका ऐप तुरंत उन नियमों पर निर्भर करता है, जिनका परिनियोजन अभी पूरा नहीं हुआ है। यदि आपके उपयोग के मामले में नियंत्रण नियमों तक पहुंचने के लिए लगातार अपडेट की आवश्यकता होती है, तो क्लाउड फायरस्टोर का उपयोग करने वाले समाधानों पर विचार करें, जिसे लगातार अपडेट के बावजूद दौड़ की स्थिति को कम करने के लिए डिज़ाइन किया गया है।

इन सीमाओं पर भी ध्यान दें:

  • क्रमबद्ध होने पर नियम UTF-8 एन्कोडेड टेक्स्ट के 64 KiB से छोटे होने चाहिए।
  • एक परियोजना में अधिकतम 2500 कुल परिनियोजित नियम हो सकते हैं। एक बार यह सीमा पूरी हो जाने के बाद, आपको नए नियम बनाने से पहले कुछ पुराने नियमों को हटाना होगा।

क्लाउड स्टोरेज या क्लाउड फायरस्टोर नियम सेट बनाएं और तैनात करें

व्यवस्थापक SDK के साथ सुरक्षा नियमों के प्रबंधन के लिए एक सामान्य कार्यप्रवाह में तीन अलग-अलग चरण शामिल हो सकते हैं:

  1. एक नियम फ़ाइल बनाएँ (वैकल्पिक)
  2. एक नियम बनाएं
  3. नया नियम जारी करें या परिनियोजित करें

एसडीके इन चरणों को क्लाउड स्टोरेज और क्लाउड फायरस्टोर सुरक्षा नियमों के लिए एकल एपीआई कॉल में संयोजित करने के लिए एक विधि प्रदान करता है। उदाहरण के लिए:

    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() साथ क्लाउड स्टोरेज नियमों के लिए काम करता है।

वैकल्पिक रूप से, आप इन-मेमोरी ऑब्जेक्ट के रूप में नियम फ़ाइल बना सकते हैं, नियम बना सकते हैं, और इन घटनाओं के करीब नियंत्रण के लिए अलग से नियम सेट को तैनात कर सकते हैं। उदाहरण के लिए:

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

रीयलटाइम डेटाबेस नियम सेट अपडेट करें

व्यवस्थापक एसडीके के साथ रीयलटाइम डेटाबेस नियमों को अपडेट करने के लिए, getRules() के getRules() और setRules() विधियों का admin.database । आप JSON प्रारूप में, या टिप्पणियों के साथ एक स्ट्रिंग के रूप में नियमों को पुनः प्राप्त कर सकते हैं।

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

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

नियमों का प्रबंधन करें

बड़े नियमों को प्रबंधित करने में सहायता के लिए, व्यवस्थापक SDK आपको admin.securityRules().listRulesetMetadata साथ सभी मौजूदा नियमों को 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;
      }
    }

समय के साथ 2500-नियम सीमा तक पहुंचने वाले बहुत बड़े नियमों के लिए, आप एक निश्चित समय चक्र पर सबसे पुराने नियमों को हटाने के लिए तर्क बना सकते हैं। उदाहरण के लिए, 30 दिनों से अधिक समय तक परिनियोजित किए गए सभी नियम सेट को हटाने के लिए:

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