फायरबेस आपको अपने नियमों को प्रबंधित करने के लिए कई उपकरण प्रदान करता है, प्रत्येक विशेष मामलों में उपयोगी होता है, और प्रत्येक एक ही बैकएंड फायरबेस सुरक्षा नियम प्रबंधन एपीआई का उपयोग करता है।
इससे कोई फर्क नहीं पड़ता कि इसे लागू करने के लिए किस उपकरण का उपयोग किया जाता है, प्रबंधन एपीआई:
- एक नियम स्रोत को अंतर्ग्रहण करता है: नियमों का एक सेट, आमतौर पर एक कोड फ़ाइल जिसमें फ़ायरबेस सुरक्षा नियम विवरण होते हैं।
- अंतर्ग्रहण स्रोत को एक अपरिवर्तनीय नियम-समूह के रूप में संग्रहीत करता है।
- रिलीज़ में प्रत्येक नियमसेट की तैनाती को ट्रैक करता है। फायरबेस सुरक्षा नियम-सक्षम सेवाएँ किसी सुरक्षित संसाधन के लिए प्रत्येक अनुरोध का मूल्यांकन करने के लिए किसी प्रोजेक्ट के लिए रिलीज़ की तलाश करती हैं।
- किसी नियम-सेट के वाक्यविन्यास और अर्थ संबंधी परीक्षण चलाने की क्षमता प्रदान करता है।
फायरबेस सीएलआई का प्रयोग करें
फायरबेस सीएलआई के साथ, आप स्थानीय स्रोत अपलोड कर सकते हैं और रिलीज़ तैनात कर सकते हैं। सीएलआई का फायरबेस लोकल एमुलेटर सूट आपको स्रोतों का पूर्ण स्थानीय परीक्षण करने की सुविधा देता है।
सीएलआई का उपयोग करने से आप अपने नियमों को अपने एप्लिकेशन कोड के साथ संस्करण नियंत्रण में रख सकते हैं और नियमों को अपनी मौजूदा तैनाती प्रक्रिया के हिस्से के रूप में तैनात कर सकते हैं।
एक कॉन्फ़िगरेशन फ़ाइल जनरेट करें
जब आप फायरबेस सीएलआई का उपयोग करके अपने फायरबेस प्रोजेक्ट को कॉन्फ़िगर करते हैं, तो आप अपनी प्रोजेक्ट निर्देशिका में एक .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.json
फ़ाइल की समीक्षा और अद्यतन करके .rules
फ़ाइलों को अपने डिफ़ॉल्ट और अतिरिक्त नामित डेटाबेस के साथ संबद्ध करें।
अपने नियमों को अकेले चुनिंदा रूप से तैनात करने या उन्हें अपनी सामान्य तैनाती प्रक्रिया के हिस्से के रूप में तैनात करने के लिए निम्नलिखित आदेशों का उपयोग करें।
क्लाउड फायरस्टोर
// 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>
रीयलटाइम डेटाबेस
// Deploy your .rules file firebase deploy --only database
घन संग्रहण
// Deploy your .rules file firebase deploy --only storage
फायरबेस कंसोल का उपयोग करें
आप नियम स्रोतों को संपादित भी कर सकते हैं और उन्हें फायरबेस कंसोल से रिलीज़ के रूप में तैनात कर सकते हैं। जब आप फायरबेस कंसोल यूआई में संपादन करते हैं तो सिंटैक्टिक परीक्षण किया जाता है, और सिमेंटिक परीक्षण रूल्स प्लेग्राउंड का उपयोग करके उपलब्ध होता है।
अपने नियम संपादित करें और अपडेट करें
- फायरबेस कंसोल खोलें और अपना प्रोजेक्ट चुनें।
- फिर, उत्पाद नेविगेशन से रीयलटाइम डेटाबेस , क्लाउड फायरस्टोर या स्टोरेज का चयन करें, फिर नियम संपादक पर नेविगेट करने के लिए नियमों पर क्लिक करें।
- अपने नियमों को सीधे संपादक में संपादित करें।
अपने अपडेट का परीक्षण करें
संपादक यूआई में सिंटैक्स का परीक्षण करने के अलावा, आप रूल्स प्लेग्राउंड का उपयोग करके सीधे फायरबेस कंसोल में अपने प्रोजेक्ट के डेटाबेस और स्टोरेज संसाधनों का उपयोग करके सिमेंटिक रूल्स व्यवहार का परीक्षण कर सकते हैं। नियम संपादक में रूल्स प्लेग्राउंड स्क्रीन खोलें, सेटिंग्स संशोधित करें और रन पर क्लिक करें। संपादक के शीर्ष पर पुष्टिकरण संदेश देखें।
अपने अपडेट तैनात करें
एक बार जब आप संतुष्ट हो जाएं कि आपके अपडेट आपकी अपेक्षा के अनुरूप हैं, तो प्रकाशित करें पर क्लिक करें।
व्यवस्थापक SDK का उपयोग करें
आप Node.js नियमसेट के लिए एडमिन SDK का उपयोग कर सकते हैं। इस प्रोग्रामेटिक एक्सेस के साथ, आप यह कर सकते हैं:
- नियमों के प्रबंधन के लिए कस्टम टूल, स्क्रिप्ट, डैशबोर्ड और सीआई/सीडी पाइपलाइन लागू करें।
- अनेक फायरबेस प्रोजेक्टों में नियमों को अधिक आसानी से प्रबंधित करें।
नियमों को प्रोग्रामेटिक रूप से अपडेट करते समय, अपने ऐप के एक्सेस कंट्रोल में अनपेक्षित परिवर्तन करने से बचना बहुत महत्वपूर्ण है। अपना एडमिन एसडीके कोड सुरक्षा को ध्यान में रखते हुए लिखें, खासकर नियमों को अपडेट या तैनात करते समय।
ध्यान रखने योग्य एक और महत्वपूर्ण बात यह है कि फायरबेस सुरक्षा नियम रिलीज़ को पूरी तरह से प्रचारित होने में कई मिनट का समय लगता है। नियमों को तैनात करने के लिए एडमिन एसडीके का उपयोग करते समय, सुनिश्चित करें कि दौड़ की स्थितियों से बचें जिसमें आपका ऐप तुरंत उन नियमों पर निर्भर करता है जिनकी तैनाती अभी तक पूरी नहीं हुई है। यदि आपके उपयोग के मामले में एक्सेस कंट्रोल नियमों के लिए लगातार अपडेट की आवश्यकता होती है, तो क्लाउड फायरस्टोर का उपयोग करके समाधान पर विचार करें, जो लगातार अपडेट के बावजूद दौड़ की स्थिति को कम करने के लिए डिज़ाइन किया गया है।
इन सीमाओं पर भी ध्यान दें:
- क्रमबद्ध होने पर नियम UTF-8 एन्कोडेड टेक्स्ट के 256 KiB से छोटे होने चाहिए।
- एक प्रोजेक्ट में अधिकतम 2500 कुल तैनात नियमसेट हो सकते हैं। एक बार यह सीमा पूरी हो जाने पर, आपको नए नियम बनाने से पहले कुछ पुराने नियम सेट हटाने होंगे।
क्लाउड स्टोरेज या क्लाउड फायरस्टोर नियमसेट बनाएं और तैनात करें
व्यवस्थापक SDK के साथ सुरक्षा नियमों के प्रबंधन के लिए एक विशिष्ट वर्कफ़्लो में तीन अलग-अलग चरण शामिल हो सकते हैं:
- एक नियम फ़ाइल स्रोत बनाएँ (वैकल्पिक)
- एक नियमावली बनाएं
- नया नियम सेट जारी करें, या तैनात करें
एसडीके क्लाउड स्टोरेज और क्लाउड फायरस्टोर सुरक्षा नियमों के लिए इन चरणों को एकल एपीआई कॉल में संयोजित करने की एक विधि प्रदान करता है। उदाहरण के लिए:
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);
रीयलटाइम डेटाबेस नियम सेट अपडेट करें
एडमिन एसडीके के साथ रीयलटाइम डेटाबेस नियमसेट को अपडेट करने के लिए, 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.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.createTime) < thirtyDays) {
promises.push(admin.securityRules().deleteRuleset(rs.name));
}
});
await Promise.all(promises);
console.log(`Deleted ${promises.length} rulesets.`);
REST API का उपयोग करें
ऊपर वर्णित उपकरण आपके प्रोजेक्ट में कई क्लाउड फायरस्टोर डेटाबेस के लिए फायरबेस सुरक्षा नियम प्रबंधन सहित विभिन्न वर्कफ़्लो के लिए उपयुक्त हैं, लेकिन आप प्रबंधन एपीआई का उपयोग करके फायरबेस सुरक्षा नियमों को प्रबंधित और तैनात करना चाह सकते हैं। प्रबंधन एपीआई आपको सबसे अधिक लचीलापन देता है।
इन सीमाओं पर भी ध्यान दें:
- क्रमबद्ध होने पर नियम UTF-8 एन्कोडेड टेक्स्ट के 256 KiB से छोटे होने चाहिए।
- एक प्रोजेक्ट में अधिकतम 2500 कुल तैनात नियमसेट हो सकते हैं। एक बार यह सीमा पूरी हो जाने पर, आपको नए नियम बनाने से पहले कुछ पुराने नियम सेट हटाने होंगे।
REST के साथ क्लाउड फायरस्टोर या क्लाउड स्टोरेज नियमसेट बनाएं और तैनात करें
इस अनुभाग के उदाहरण फायरस्टोर नियमों का उपयोग करते हैं, हालांकि वे क्लाउड स्टोरेज नियमों पर भी लागू होते हैं।
उदाहरण एपीआई कॉल करने के लिए cURL का भी उपयोग करते हैं। प्रमाणीकरण टोकन सेट अप करने और पास करने के चरण छोड़े गए हैं। आप संदर्भ दस्तावेज़ के साथ एकीकृत एपीआई एक्सप्लोरर का उपयोग करके इस एपीआई के साथ प्रयोग कर सकते हैं।
प्रबंधन एपीआई का उपयोग करके नियम-सेट बनाने और तैनात करने के विशिष्ट चरण हैं:
- नियम फ़ाइल स्रोत बनाएँ
- एक नियमावली बनाएं
- नया नियम सेट जारी (तैनात) करें।
एक स्रोत बनाएं
आइए मान लें कि आप अपने secure_commerce
फायरबेस प्रोजेक्ट पर काम कर रहे हैं और अपने प्रोजेक्ट में east_store
नामक डेटाबेस में लॉक-डाउन क्लाउड फायरस्टोर नियमों को तैनात करना चाहते हैं।
आप इन नियमों को firestore.rules
फ़ाइल में लागू कर सकते हैं।
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
एक नियमावली बनाएं
अब, इस फ़ाइल के लिए बेस64-एन्कोडेड फ़िंगरप्रिंट जनरेट करें। फिर आप 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'
ध्यान रखें कि फायरबेस सुरक्षा नियम रिलीज़ को पूरी तरह से प्रचारित होने में कई मिनट का समय लगता है। तैनात करने के लिए प्रबंधन REST API का उपयोग करते समय, सुनिश्चित करें कि दौड़ की स्थितियों से बचें जिसमें आपका ऐप तुरंत उन नियमों पर निर्भर करता है जिनकी तैनाती अभी तक पूरी नहीं हुई है।
रीयलटाइम डेटाबेस नियमसेट को REST के साथ अपडेट करें
रीयलटाइम डेटाबेस नियमों के प्रबंधन के लिए अपना स्वयं का REST इंटरफ़ेस प्रदान करता है। REST के माध्यम से फायरबेस रीयलटाइम डेटाबेस नियमों का प्रबंधन देखें।
REST के साथ नियम-सेट प्रबंधित करें
बड़े नियमों के परिनियोजन को प्रबंधित करने में सहायता के लिए, नियमसेट और रिलीज़ बनाने के लिए REST विधि के अलावा, प्रबंधन API निम्नलिखित तरीके प्रदान करता है:
- नियमों को सूचीबद्ध करें, प्राप्त करें और हटाएं
- नियम विज्ञप्तियों को सूचीबद्ध करें, प्राप्त करें और हटाएं
बहुत बड़ी तैनाती के लिए जो समय के साथ 2500 नियम निर्धारित सीमा तक पहुंचती है, आप एक निश्चित समय चक्र पर सबसे पुराने नियमों को हटाने के लिए तर्क बना सकते हैं। उदाहरण के लिए, 30 दिनों से अधिक समय से तैनात सभी नियमों को हटाने के लिए, आप projects.rulesets.list
पद्धति को कॉल कर सकते हैं, उनके createTime
कुंजियों पर Ruleset
ऑब्जेक्ट की JSON सूची को पार्स कर सकते हैं, ruleset_id
द्वारा संबंधित नियमों पर project.rulesets.delete
कॉल कर सकते हैं। .
REST के साथ अपने अपडेट का परीक्षण करें
अंत में, प्रबंधन एपीआई आपको अपने उत्पादन परियोजनाओं में क्लाउड फायरस्टोर और क्लाउड स्टोरेज संसाधनों पर सिंटैक्टिक और सिमेंटिक परीक्षण चलाने की अनुमति देता है।
एपीआई के इस घटक के साथ परीक्षण में निम्न शामिल हैं:
-
TestCase
ऑब्जेक्ट के एक सेट का प्रतिनिधित्व करने के लिएTestSuite
JSON ऑब्जेक्ट को परिभाषित करना -
TestSuite
सबमिट करना - पार्सिंग ने
TestResult
ऑब्जेक्ट लौटाए
आइए एक testcase.json
फ़ाइल में एक TestCase
के साथ एक TestSuite
ऑब्जेक्ट को परिभाषित करें। इस उदाहरण में, हम उन नियमों पर चलने के लिए परीक्षण सूट के साथ-साथ REST पेलोड के साथ नियम भाषा स्रोत को इनलाइन पास करते हैं। हम एक नियम मूल्यांकन अपेक्षा और ग्राहक अनुरोध निर्दिष्ट करते हैं जिसके विरुद्ध नियम का परीक्षण किया जाना है। आप यह भी निर्दिष्ट कर सकते हैं कि परीक्षण रिपोर्ट कितनी पूर्ण है, सभी नियमों के परिणामों को इंगित करने के लिए "पूर्ण" मान का उपयोग करके भाषा अभिव्यक्तियों को रिपोर्ट में शामिल किया जाना चाहिए, जिसमें वे अभिव्यक्तियां भी शामिल हैं जो अनुरोध से मेल नहीं खाती थीं।
{ "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
(जिसमें परीक्षण की सफलता/असफलता स्थिति, डिबग संदेशों की सूची, विज़िट किए गए नियम अभिव्यक्तियों की सूची और उनकी मूल्यांकन रिपोर्ट शामिल है) स्थिति सफलता के साथ पुष्टि करेगी कि पहुंच उचित रूप से अनुमति दी गई है।
क्रॉस-सर्विस क्लाउड स्टोरेज सुरक्षा नियमों के लिए अनुमतियाँ प्रबंधित करें
यदि आप क्लाउड स्टोरेज सुरक्षा नियम बनाते हैं जो सुरक्षा स्थितियों का मूल्यांकन करने के लिए क्लाउड फायरस्टोर दस्तावेज़ सामग्री का उपयोग करते हैं, तो आपको दो उत्पादों को कनेक्ट करने की अनुमति सक्षम करने के लिए फायरबेस कंसोल या फायरबेस सीएलआई में संकेत दिया जाएगा।
यदि आप ऐसी क्रॉस-सर्विस सुरक्षा को अक्षम करने का निर्णय लेते हैं:
सबसे पहले, सुविधा को अक्षम करने से पहले, अपने नियमों को संपादित करें, क्लाउड फायरस्टोर तक पहुंचने के लिए नियम फ़ंक्शन का उपयोग करने वाले सभी कथनों को हटा दें। अन्यथा, सुविधा अक्षम होने के बाद, नियम मूल्यांकन के कारण आपके संग्रहण अनुरोध विफल हो जाएंगे।
भूमिकाओं को निरस्त करने के लिए क्लाउड गाइड का पालन करके "फायरबेस रूल्स फायरस्टोर सर्विस एजेंट" भूमिका को हटाने के लिए Google क्लाउड कंसोल में IAM पेज का उपयोग करें।
अगली बार जब आप फायरबेस सीएलआई या फायरबेस कंसोल से क्रॉस-सर्विस नियम सहेजेंगे तो आपको सुविधा को फिर से सक्षम करने के लिए कहा जाएगा।