Firebase چندین ابزار را برای مدیریت Rules خود در اختیار شما قرار می دهد که هر کدام در موارد خاص مفید هستند و هر کدام از آنها با استفاده از یک API مدیریت قوانین امنیتی Firebase Security استفاده می کنند.
مهم نیست از کدام ابزار برای فراخوانی آن استفاده می شود، API مدیریت:
- یک منبع قوانین را دریافت می کند: مجموعه ای از قوانین، معمولاً یک فایل کد حاوی عبارات Firebase Security Rules .
- منبع دریافت شده را به عنوان یک مجموعه قوانین تغییرناپذیر ذخیره می کند.
- استقرار هر مجموعه قوانین را در یک نسخه ردیابی می کند. سرویسهای دارای قوانین امنیتی Firebase برای ارزیابی هر درخواست برای یک منبع ایمن، انتشار یک پروژه را جستجو میکنند.
- قابلیت اجرای تست های نحوی و معنایی یک مجموعه قوانین را فراهم می کند.
از Firebase CLI استفاده کنید
با Firebase CLI ، می توانید منابع محلی را آپلود کرده و نسخه های منتشر شده را گسترش دهید. Firebase Local Emulator Suite CLI به شما امکان می دهد آزمایش محلی کامل منابع را انجام دهید.
استفاده از CLI به شما این امکان را می دهد که قوانین خود را با کد برنامه خود تحت کنترل نسخه نگه دارید و قوانین را به عنوان بخشی از فرآیند استقرار موجود خود مستقر کنید.
یک فایل پیکربندی ایجاد کنید
هنگامی که پروژه Firebase خود را با استفاده از Firebase CLI پیکربندی می کنید، یک فایل پیکربندی .rules
در فهرست پروژه خود ایجاد می کنید. برای شروع پیکربندی پروژه Firebase از دستور زیر استفاده کنید:
// 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 را بازنویسی کنید.
به روز رسانی های خود را تست کنید
Local Emulator Suite شبیه سازهایی را برای همه محصولات دارای قوانین امنیتی فعال ارائه می دهد. موتور قوانین امنیتی برای هر شبیهساز، هم ارزیابی نحوی و هم معنایی قوانین را انجام میدهد، بنابراین از آزمایش نحوی که API مدیریت قوانین امنیتی ارائه میدهد، فراتر میرود.
اگر با CLI کار می کنید، Suite یک ابزار عالی برای تست Firebase Security Rules است. از Local Emulator Suite برای آزمایش به روز رسانی های خود به صورت محلی استفاده کنید و تأیید کنید که Rules برنامه شما رفتار مورد نظر شما را نشان می دهد.
به روز رسانی های خود را مستقر کنید
هنگامی که Rules خود را بهروزرسانی و آزمایش کردید، منابع را برای تولید مستقر کنید.
برای Cloud Firestore Security Rules ، فایلهای .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
از کنسول Firebase استفاده کنید
همچنین میتوانید منابع Rules را ویرایش کنید و آنها را بهعنوان نسخههایی از کنسول Firebase استفاده کنید. تست نحوی هنگام ویرایش در رابط کاربری کنسول Firebase انجام میشود و آزمایش معنایی با استفاده از Rules Playground در دسترس است.
قوانین خود را ویرایش و به روز کنید
- کنسول Firebase را باز کنید و پروژه خود را انتخاب کنید.
- سپس، Realtime Database ، Cloud Firestore یا Storage را از پیمایش محصول انتخاب کنید، سپس روی Rules کلیک کنید تا به ویرایشگر Rules بروید.
- قوانین خود را مستقیماً در ویرایشگر ویرایش کنید.
به روز رسانی های خود را تست کنید
علاوه بر آزمایش نحو در رابط کاربری ویرایشگر، میتوانید رفتار Rules معنایی را با استفاده از پایگاه داده پروژه و منابع ذخیرهسازی، مستقیماً در کنسول Firebase و با استفاده از Rules Playground آزمایش کنید. صفحه Rules Playground را در ویرایشگر Rules باز کنید، تنظیمات را تغییر دهید و روی Run کلیک کنید. به دنبال پیام تایید در بالای ویرایشگر بگردید.
به روز رسانی های خود را مستقر کنید
وقتی از اینکه بهروزرسانیهای شما همان چیزی است که انتظار دارید راضی شدید، روی انتشار کلیک کنید.
از Admin SDK استفاده کنید
می توانید از Admin SDK برای مجموعه قوانین Node.js استفاده کنید. با این دسترسی برنامه ای، می توانید:
- ابزارهای سفارشی، اسکریپت ها، داشبوردها و خطوط لوله CI/CD را برای مدیریت قوانین پیاده سازی کنید.
- قوانین را به راحتی در چندین پروژه Firebase مدیریت کنید.
هنگام به روز رسانی قوانین به صورت برنامه ای، بسیار مهم است که از ایجاد تغییرات ناخواسته در کنترل دسترسی برنامه خود اجتناب کنید. کد Admin SDK خود را با در نظر گرفتن امنیت بنویسید، به خصوص هنگام به روز رسانی یا استقرار قوانین.
نکته مهم دیگری که باید در نظر داشت این است که انتشار کامل Firebase Security Rules چند دقیقه طول می کشد. هنگام استفاده از Admin SDK برای استقرار قوانین، مطمئن شوید که از شرایط مسابقه ای که در آن برنامه شما بلافاصله به قوانینی که استقرار آنها هنوز کامل نشده است متکی است، اجتناب کنید. اگر مورد استفاده شما به بهروزرسانیهای مکرر برای دسترسی به قوانین کنترل نیاز دارد، راهحلهایی را با استفاده از Cloud Firestore در نظر بگیرید، که برای کاهش شرایط مسابقه با وجود بهروزرسانیهای مکرر طراحی شده است.
به این محدودیت ها نیز توجه کنید:
- قوانین هنگام سریال سازی باید کوچکتر از 256 کیلوبایت متن کدگذاری شده UTF-8 باشند.
- یک پروژه می تواند حداکثر 2500 مجموعه قوانین مستقر شده داشته باشد. پس از رسیدن به این محدودیت، قبل از ایجاد قوانین جدید، باید برخی از قوانین قدیمی را حذف کنید.
مجموعه قوانین Cloud Storage یا Cloud Firestore را ایجاد و استقرار دهید
یک گردش کار معمولی برای مدیریت قوانین امنیتی با Admin SDK می تواند شامل سه مرحله مجزا باشد:
- ایجاد منبع فایل قوانین (اختیاری)
- یک مجموعه قوانین ایجاد کنید
- مجموعه قوانین جدید را منتشر کنید، یا به کار بگیرید
SDK روشی را برای ترکیب این مراحل در یک فراخوانی API واحد برای قوانین امنیتی 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);
همین الگو برای قوانین Cloud Storage با releaseFirestoreRulesetFromSource()
کار می کند.
همچنین، میتوانید فایل قوانین را بهعنوان یک شی در حافظه ایجاد کنید، مجموعه قوانین را ایجاد کنید و مجموعه قوانین را بهطور جداگانه برای کنترل دقیقتر این رویدادها مستقر کنید. به عنوان مثال:
const rf = admin.securityRules().createRulesFileFromSource('firestore.rules', source);
const rs = await admin.securityRules().createRuleset(rf);
await admin.securityRules().releaseFirestoreRuleset(rs);
مجموعه قوانین Realtime Database به روز کنید
برای به روز رسانی قوانین Realtime Database با Admin SDK ، از متدهای 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);
مجموعه قوانین را مدیریت کنید
برای کمک به مدیریت مجموعه قوانین بزرگ، 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;
}
}
برای استقرارهای بسیار بزرگ که در طول زمان به محدودیت مجموعه قوانین 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 استفاده کنید
ابزارهایی که در بالا توضیح داده شد به خوبی برای گردشهای کاری مختلف، از جمله مدیریت Firebase Security Rules برای پایگاههای اطلاعاتی Cloud Firestore متعدد در پروژه شما مناسب هستند، اما ممکن است بخواهید Firebase Security Rules با استفاده از خود API مدیریت مدیریت و استقرار دهید. API مدیریت بیشترین انعطاف را به شما می دهد.
به این محدودیت ها نیز توجه کنید:
- قوانین هنگام سریال سازی باید کوچکتر از 256 کیلوبایت متن کدگذاری شده UTF-8 باشند.
- یک پروژه می تواند حداکثر 2500 مجموعه قوانین مستقر شده داشته باشد. پس از رسیدن به این محدودیت، قبل از ایجاد قوانین جدید، باید برخی از قوانین قدیمی را حذف کنید.
مجموعه قوانین Cloud Firestore یا Cloud Storage را با REST ایجاد و استقرار کنید
مثالهای موجود در این بخش Rules Firestore استفاده میکنند، اگرچه در مورد Rules Cloud Storage نیز اعمال میشوند.
نمونه ها همچنین از cURL برای برقراری تماس های API استفاده می کنند. مراحل تنظیم و ارسال توکن های احراز هویت حذف شده است. می توانید با استفاده از API Explorer یکپارچه شده با مستندات مرجع، این API را آزمایش کنید.
مراحل معمولی برای ایجاد و استقرار یک مجموعه قوانین با استفاده از API مدیریت عبارتند از:
- ایجاد منابع فایل قوانین
- یک مجموعه قوانین ایجاد کنید
- مجموعه قوانین جدید را آزاد کنید (استقرار کنید).
یک منبع ایجاد کنید
بیایید فرض کنیم که روی پروژه secure_commerce
Firebase خود کار می کنید و می خواهید Rules Cloud Firestore قفل شده را در پایگاه داده پروژه خود به نام east_store
مستقر کنید.
می توانید این قوانین را در فایل firestore.rules
پیاده سازی کنید.
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
یک مجموعه قوانین ایجاد کنید
اکنون برای این فایل یک اثر انگشت کدگذاری شده با base64 ایجاد کنید. سپس می توانید از منبع موجود در این فایل برای پر کردن بار مورد نیاز برای ایجاد یک مجموعه قوانین با calls projects.rulesets.create
REST استفاده کنید. در اینجا، از دستور cat
برای درج محتویات firestore.rules
در payload REST استفاده کنید.
برای ردیابی، برای مرتبط کردن آن با پایگاه داده 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'
API یک پاسخ اعتبارسنجی و یک نام مجموعه قوانین، برای مثال 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 چند دقیقه طول می کشد. هنگام استفاده از مدیریت API REST برای استقرار، مطمئن شوید که از شرایط مسابقه ای که در آن برنامه شما فوراً به قوانینی که استقرار آنها هنوز کامل نشده است متکی است، اجتناب کنید.
مجموعه قوانین Realtime Database با REST به روز کنید
Realtime Database رابط REST خود را برای مدیریت Rules فراهم می کند. به مدیریت Rules Realtime Database Firebase از طریق REST مراجعه کنید.
مجموعه قوانین را با REST مدیریت کنید
برای کمک به مدیریت استقرار قوانین بزرگ، علاوه بر روش REST برای ایجاد مجموعه قوانین و نسخهها، API مدیریت روشهایی را ارائه میکند:
- مجموعه قوانین را فهرست، دریافت و حذف کنید
- فهرست، دریافت و حذف قوانین منتشر شده
برای استقرارهای بسیار بزرگ که در طول زمان به محدودیت مجموعه قوانین 2500 می رسند، می توانید منطقی برای حذف قدیمی ترین قوانین در یک چرخه زمانی ثابت ایجاد کنید. به عنوان مثال، برای حذف همه قوانین مستقر برای بیش از 30 روز، میتوانید روش projects.rulesets.list
را فراخوانی کنید، فهرست JSON اشیاء Ruleset
را در کلیدهای createTime
آنها تجزیه کنید، سپس project.rulesets.delete
را روی مجموعه قوانین مربوطه توسط ruleset_id
فراخوانی کنید.
به روز رسانی های خود را با REST آزمایش کنید
در نهایت، API مدیریت به شما اجازه می دهد تا در پروژه های تولیدی خود، تست های نحوی و معنایی را بر روی منابع Cloud Firestore و Cloud Storage اجرا کنید.
آزمایش با این جزء از API شامل موارد زیر است:
- تعریف یک شیء JSON
TestSuite
برای نمایش مجموعه ای از اشیاءTestCase
- در حال ارسال
TestSuite
- تجزیه اشیاء
TestResult
برگشتی
بیایید یک شی TestSuite
را با یک TestCase
در یک فایل testcase.json
تعریف کنیم. در این مثال، منبع زبان Rules را به صورت درون خطی با بار REST، در کنار مجموعه آزمایشی ارسال می کنیم تا روی آن قوانین اجرا شود. ما انتظارات ارزیابی قوانین و درخواست مشتری را مشخص می کنیم که مجموعه قوانین در برابر آن باید آزمایش شود. همچنین میتوانید مشخص کنید که گزارش آزمون چقدر کامل است، با استفاده از مقدار "FULL" برای نشان دادن نتایج برای تمام عبارات زبان 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
برگشتی (شامل وضعیت SUCCESS/FAILURE آزمایش، لیست پیامهای اشکالزدایی، فهرست عبارات قوانین بازدید شده و گزارشهای ارزیابی آنها) با وضعیت SUCCESS تأیید میکند که دسترسی به درستی مجاز است.
مجوزها را برای Cloud Storage Security Rules سرویس متقابل مدیریت کنید
اگر Cloud Storage Security Rules ایجاد کنید که از محتویات سند Cloud Firestore برای ارزیابی شرایط امنیتی استفاده می کند، در کنسول Firebase یا Firebase CLI از شما خواسته می شود تا مجوزها را برای اتصال دو محصول فعال کنید.
اگر تصمیم به غیرفعال کردن چنین امنیت خدمات متقابل دارید:
ابتدا، قبل از غیرفعال کردن این ویژگی، قوانین خود را ویرایش کنید و تمام عباراتی را که از توابع Rules برای دسترسی به Cloud Firestore استفاده میکنند، حذف کنید. در غیر این صورت، پس از غیرفعال شدن این ویژگی، ارزیابی Rules باعث میشود درخواستهای ذخیرهسازی شما با شکست مواجه شود.
از صفحه IAM در Google Cloud Console استفاده کنید تا نقش "Firebase Rules Firestore Service Agent" را با دنبال کردن راهنمای Cloud برای لغو نقشها حذف کنید.
دفعه بعد که قوانین سرویس متقابل را از Firebase CLI یا کنسول Firebase ذخیره می کنید، از شما خواسته می شود که این ویژگی را دوباره فعال کنید.
،Firebase چندین ابزار را برای مدیریت Rules خود در اختیار شما قرار می دهد که هر کدام در موارد خاص مفید هستند و هر کدام از آنها با استفاده از یک API مدیریت قوانین امنیتی Firebase Security استفاده می کنند.
مهم نیست از کدام ابزار برای فراخوانی آن استفاده می شود، API مدیریت:
- یک منبع قوانین را دریافت می کند: مجموعه ای از قوانین، معمولاً یک فایل کد حاوی عبارات Firebase Security Rules .
- منبع دریافت شده را به عنوان یک مجموعه قوانین تغییرناپذیر ذخیره می کند.
- استقرار هر مجموعه قوانین را در یک نسخه ردیابی می کند. سرویسهای دارای قوانین امنیتی Firebase برای ارزیابی هر درخواست برای یک منبع ایمن، انتشار یک پروژه را جستجو میکنند.
- قابلیت اجرای تست های نحوی و معنایی یک مجموعه قوانین را فراهم می کند.
از Firebase CLI استفاده کنید
با Firebase CLI ، می توانید منابع محلی را آپلود کرده و نسخه های منتشر شده را گسترش دهید. Firebase Local Emulator Suite CLI به شما امکان می دهد آزمایش محلی کامل منابع را انجام دهید.
استفاده از CLI به شما این امکان را می دهد که قوانین خود را با کد برنامه خود تحت کنترل نسخه نگه دارید و قوانین را به عنوان بخشی از فرآیند استقرار موجود خود مستقر کنید.
یک فایل پیکربندی ایجاد کنید
هنگامی که پروژه Firebase خود را با استفاده از Firebase CLI پیکربندی می کنید، یک فایل پیکربندی .rules
در فهرست پروژه خود ایجاد می کنید. برای شروع پیکربندی پروژه Firebase از دستور زیر استفاده کنید:
// 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 را بازنویسی کنید.
به روز رسانی های خود را تست کنید
Local Emulator Suite شبیه سازهایی را برای همه محصولات دارای قوانین امنیتی فعال ارائه می دهد. موتور قوانین امنیتی برای هر شبیهساز، هم ارزیابی نحوی و هم معنایی قوانین را انجام میدهد، بنابراین از آزمایش نحوی که API مدیریت قوانین امنیتی ارائه میدهد، فراتر میرود.
اگر با CLI کار می کنید، Suite یک ابزار عالی برای تست Firebase Security Rules است. از Local Emulator Suite برای آزمایش به روز رسانی های خود به صورت محلی استفاده کنید و تأیید کنید که Rules برنامه شما رفتار مورد نظر شما را نشان می دهد.
به روز رسانی های خود را مستقر کنید
هنگامی که Rules خود را بهروزرسانی و آزمایش کردید، منابع را برای تولید مستقر کنید.
برای Cloud Firestore Security Rules ، فایلهای .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
از کنسول Firebase استفاده کنید
همچنین میتوانید منابع Rules را ویرایش کنید و آنها را بهعنوان نسخههایی از کنسول Firebase استفاده کنید. تست نحوی هنگام ویرایش در رابط کاربری کنسول Firebase انجام میشود و آزمایش معنایی با استفاده از Rules Playground در دسترس است.
قوانین خود را ویرایش و به روز کنید
- کنسول Firebase را باز کنید و پروژه خود را انتخاب کنید.
- سپس، Realtime Database ، Cloud Firestore یا Storage را از پیمایش محصول انتخاب کنید، سپس روی Rules کلیک کنید تا به ویرایشگر Rules بروید.
- قوانین خود را مستقیماً در ویرایشگر ویرایش کنید.
به روز رسانی های خود را تست کنید
علاوه بر آزمایش نحو در رابط کاربری ویرایشگر، میتوانید رفتار Rules معنایی را با استفاده از پایگاه داده پروژه و منابع ذخیرهسازی، مستقیماً در کنسول Firebase و با استفاده از Rules Playground آزمایش کنید. صفحه Rules Playground را در ویرایشگر Rules باز کنید، تنظیمات را تغییر دهید و روی Run کلیک کنید. به دنبال پیام تایید در بالای ویرایشگر بگردید.
به روز رسانی های خود را مستقر کنید
وقتی از اینکه بهروزرسانیهای شما همان چیزی است که انتظار دارید راضی شدید، روی انتشار کلیک کنید.
از Admin SDK استفاده کنید
می توانید از Admin SDK برای مجموعه قوانین Node.js استفاده کنید. با این دسترسی برنامه ای، می توانید:
- ابزارهای سفارشی، اسکریپت ها، داشبوردها و خطوط لوله CI/CD را برای مدیریت قوانین پیاده سازی کنید.
- قوانین را به راحتی در چندین پروژه Firebase مدیریت کنید.
هنگام به روز رسانی قوانین به صورت برنامه ای، بسیار مهم است که از ایجاد تغییرات ناخواسته در کنترل دسترسی برنامه خود اجتناب کنید. کد Admin SDK خود را با در نظر گرفتن امنیت بنویسید، به خصوص هنگام به روز رسانی یا استقرار قوانین.
نکته مهم دیگری که باید در نظر داشت این است که انتشار کامل Firebase Security Rules چند دقیقه طول می کشد. هنگام استفاده از Admin SDK برای استقرار قوانین، مطمئن شوید که از شرایط مسابقه ای که در آن برنامه شما بلافاصله به قوانینی که استقرار آنها هنوز کامل نشده است متکی است، اجتناب کنید. اگر مورد استفاده شما به بهروزرسانیهای مکرر برای دسترسی به قوانین کنترل نیاز دارد، راهحلهایی را با استفاده از Cloud Firestore در نظر بگیرید، که برای کاهش شرایط مسابقه با وجود بهروزرسانیهای مکرر طراحی شده است.
به این محدودیت ها نیز توجه کنید:
- قوانین هنگام سریال سازی باید کوچکتر از 256 کیلوبایت متن کدگذاری شده UTF-8 باشند.
- یک پروژه می تواند حداکثر 2500 مجموعه قوانین مستقر شده داشته باشد. پس از رسیدن به این محدودیت، قبل از ایجاد قوانین جدید، باید برخی از قوانین قدیمی را حذف کنید.
مجموعه قوانین Cloud Storage یا Cloud Firestore را ایجاد و استقرار دهید
یک گردش کار معمولی برای مدیریت قوانین امنیتی با Admin SDK می تواند شامل سه مرحله مجزا باشد:
- ایجاد منبع فایل قوانین (اختیاری)
- یک مجموعه قوانین ایجاد کنید
- مجموعه قوانین جدید را منتشر کنید، یا به کار بگیرید
SDK روشی را برای ترکیب این مراحل در یک فراخوانی API واحد برای قوانین امنیتی 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);
همین الگو برای قوانین Cloud Storage با releaseFirestoreRulesetFromSource()
کار می کند.
همچنین، میتوانید فایل قوانین را بهعنوان یک شی در حافظه ایجاد کنید، مجموعه قوانین را ایجاد کنید و مجموعه قوانین را بهطور جداگانه برای کنترل دقیقتر این رویدادها مستقر کنید. به عنوان مثال:
const rf = admin.securityRules().createRulesFileFromSource('firestore.rules', source);
const rs = await admin.securityRules().createRuleset(rf);
await admin.securityRules().releaseFirestoreRuleset(rs);
مجموعه قوانین Realtime Database به روز کنید
برای به روز رسانی قوانین Realtime Database با Admin SDK ، از متدهای 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);
مجموعه قوانین را مدیریت کنید
برای کمک به مدیریت مجموعه قوانین بزرگ، 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;
}
}
برای استقرارهای بسیار بزرگ که در طول زمان به محدودیت مجموعه قوانین 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 استفاده کنید
ابزارهایی که در بالا توضیح داده شد به خوبی برای گردشهای کاری مختلف، از جمله مدیریت Firebase Security Rules برای پایگاههای اطلاعاتی Cloud Firestore متعدد در پروژه شما مناسب هستند، اما ممکن است بخواهید Firebase Security Rules با استفاده از خود API مدیریت مدیریت و استقرار دهید. API مدیریت بیشترین انعطاف را به شما می دهد.
به این محدودیت ها نیز توجه کنید:
- قوانین هنگام سریال سازی باید کوچکتر از 256 کیلوبایت متن کدگذاری شده UTF-8 باشند.
- یک پروژه می تواند حداکثر 2500 مجموعه قوانین مستقر شده داشته باشد. پس از رسیدن به این محدودیت، قبل از ایجاد قوانین جدید، باید برخی از قوانین قدیمی را حذف کنید.
مجموعه قوانین Cloud Firestore یا Cloud Storage را با REST ایجاد و استقرار کنید
مثالهای موجود در این بخش Rules Firestore استفاده میکنند، اگرچه در مورد Rules Cloud Storage نیز اعمال میشوند.
نمونه ها همچنین از cURL برای برقراری تماس های API استفاده می کنند. مراحل تنظیم و ارسال توکن های احراز هویت حذف شده است. می توانید با استفاده از API Explorer یکپارچه شده با مستندات مرجع، این API را آزمایش کنید.
مراحل معمولی برای ایجاد و استقرار یک مجموعه قوانین با استفاده از API مدیریت عبارتند از:
- ایجاد منابع فایل قوانین
- یک مجموعه قوانین ایجاد کنید
- مجموعه قوانین جدید را آزاد کنید (استقرار کنید).
یک منبع ایجاد کنید
بیایید فرض کنیم که روی پروژه secure_commerce
Firebase خود کار می کنید و می خواهید Rules Cloud Firestore قفل شده را در پایگاه داده پروژه خود به نام east_store
مستقر کنید.
می توانید این قوانین را در فایل firestore.rules
پیاده سازی کنید.
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
یک مجموعه قوانین ایجاد کنید
اکنون برای این فایل یک اثر انگشت کدگذاری شده با base64 ایجاد کنید. سپس می توانید از منبع موجود در این فایل برای پر کردن بار مورد نیاز برای ایجاد یک مجموعه قوانین با calls projects.rulesets.create
REST استفاده کنید. در اینجا، از دستور cat
برای درج محتویات firestore.rules
در payload REST استفاده کنید.
برای ردیابی، برای مرتبط کردن آن با پایگاه داده 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'
API یک پاسخ اعتبارسنجی و یک نام مجموعه قوانین، برای مثال 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 چند دقیقه طول می کشد. هنگام استفاده از مدیریت API REST برای استقرار، مطمئن شوید که از شرایط مسابقه ای که در آن برنامه شما فوراً به قوانینی که استقرار آنها هنوز کامل نشده است متکی است، اجتناب کنید.
مجموعه قوانین Realtime Database با REST به روز کنید
Realtime Database رابط REST خود را برای مدیریت Rules فراهم می کند. به مدیریت Rules Realtime Database Firebase از طریق REST مراجعه کنید.
مجموعه قوانین را با REST مدیریت کنید
برای کمک به مدیریت استقرار قوانین بزرگ، علاوه بر روش REST برای ایجاد مجموعه قوانین و نسخهها، API مدیریت روشهایی را ارائه میکند:
- مجموعه قوانین را فهرست، دریافت و حذف کنید
- فهرست، دریافت و حذف قوانین منتشر شده
برای استقرارهای بسیار بزرگ که در طول زمان به محدودیت مجموعه قوانین 2500 می رسند، می توانید منطقی برای حذف قدیمی ترین قوانین در یک چرخه زمانی ثابت ایجاد کنید. به عنوان مثال، برای حذف همه قوانین مستقر برای بیش از 30 روز، میتوانید روش projects.rulesets.list
را فراخوانی کنید، فهرست JSON اشیاء Ruleset
را در کلیدهای createTime
آنها تجزیه کنید، سپس project.rulesets.delete
را روی مجموعه قوانین مربوطه توسط ruleset_id
فراخوانی کنید.
به روز رسانی های خود را با REST آزمایش کنید
در نهایت، API مدیریت به شما اجازه می دهد تا در پروژه های تولیدی خود، تست های نحوی و معنایی را بر روی منابع Cloud Firestore و Cloud Storage اجرا کنید.
آزمایش با این جزء از API شامل موارد زیر است:
- تعریف یک شیء JSON
TestSuite
برای نمایش مجموعه ای از اشیاءTestCase
- در حال ارسال
TestSuite
- تجزیه اشیاء
TestResult
برگشتی
بیایید یک شی TestSuite
را با یک TestCase
در یک فایل testcase.json
تعریف کنیم. در این مثال، منبع زبان Rules را به صورت درون خطی با بار REST، در کنار مجموعه آزمایشی ارسال می کنیم تا روی آن قوانین اجرا شود. ما انتظارات ارزیابی قوانین و درخواست مشتری را مشخص می کنیم که مجموعه قوانین در برابر آن باید آزمایش شود. همچنین میتوانید مشخص کنید که گزارش آزمون چقدر کامل است، با استفاده از مقدار "FULL" برای نشان دادن نتایج برای تمام عبارات زبان 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
برگشتی (شامل وضعیت SUCCESS/FAILURE آزمایش، لیست پیامهای اشکالزدایی، فهرست عبارات قوانین بازدید شده و گزارشهای ارزیابی آنها) با وضعیت SUCCESS تأیید میکند که دسترسی به درستی مجاز است.
مجوزها را برای Cloud Storage Security Rules سرویس متقابل مدیریت کنید
اگر Cloud Storage Security Rules ایجاد کنید که از محتویات سند Cloud Firestore برای ارزیابی شرایط امنیتی استفاده می کند، در کنسول Firebase یا Firebase CLI از شما خواسته می شود تا مجوزها را برای اتصال دو محصول فعال کنید.
اگر تصمیم به غیرفعال کردن چنین امنیت خدمات متقابل دارید:
ابتدا، قبل از غیرفعال کردن این ویژگی، قوانین خود را ویرایش کنید و تمام عباراتی را که از توابع Rules برای دسترسی به Cloud Firestore استفاده میکنند، حذف کنید. در غیر این صورت، پس از غیرفعال شدن این ویژگی، ارزیابی Rules باعث میشود درخواستهای ذخیرهسازی شما با شکست مواجه شود.
از صفحه IAM در Google Cloud Console استفاده کنید تا نقش "Firebase Rules Firestore Service Agent" را با دنبال کردن راهنمای Cloud برای لغو نقشها حذف کنید.
دفعه بعد که قوانین سرویس متقابل را از Firebase CLI یا کنسول Firebase ذخیره می کنید، از شما خواسته می شود که این ویژگی را دوباره فعال کنید.
،Firebase چندین ابزار را برای مدیریت Rules خود در اختیار شما قرار می دهد که هر کدام در موارد خاص مفید هستند و هر کدام از آنها با استفاده از یک API مدیریت قوانین امنیتی Firebase Security استفاده می کنند.
مهم نیست از کدام ابزار برای فراخوانی آن استفاده می شود، API مدیریت:
- یک منبع قوانین را دریافت می کند: مجموعه ای از قوانین، معمولاً یک فایل کد حاوی عبارات Firebase Security Rules .
- منبع دریافت شده را به عنوان یک مجموعه قوانین تغییرناپذیر ذخیره می کند.
- استقرار هر مجموعه قوانین را در یک نسخه ردیابی می کند. سرویسهای دارای قوانین امنیتی Firebase برای ارزیابی هر درخواست برای یک منبع ایمن، انتشار یک پروژه را جستجو میکنند.
- قابلیت اجرای تست های نحوی و معنایی یک مجموعه قوانین را فراهم می کند.
از Firebase CLI استفاده کنید
با Firebase CLI ، می توانید منابع محلی را آپلود کرده و نسخه های منتشر شده را گسترش دهید. Firebase Local Emulator Suite CLI به شما امکان می دهد آزمایش محلی کامل منابع را انجام دهید.
استفاده از CLI به شما این امکان را می دهد که قوانین خود را با کد برنامه خود تحت کنترل نسخه نگه دارید و قوانین را به عنوان بخشی از فرآیند استقرار موجود خود مستقر کنید.
یک فایل پیکربندی ایجاد کنید
هنگامی که پروژه Firebase خود را با استفاده از Firebase CLI پیکربندی می کنید، یک فایل پیکربندی .rules
در فهرست پروژه خود ایجاد می کنید. برای شروع پیکربندی پروژه Firebase از دستور زیر استفاده کنید:
// 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 را بازنویسی کنید.
به روز رسانی های خود را تست کنید
Local Emulator Suite شبیه سازهایی را برای همه محصولات دارای قوانین امنیتی فعال ارائه می دهد. موتور قوانین امنیتی برای هر شبیهساز، هم ارزیابی نحوی و هم معنایی قوانین را انجام میدهد، بنابراین از آزمایش نحوی که API مدیریت قوانین امنیتی ارائه میدهد، فراتر میرود.
اگر با CLI کار می کنید، Suite یک ابزار عالی برای تست Firebase Security Rules است. از Local Emulator Suite برای آزمایش به روز رسانی های خود به صورت محلی استفاده کنید و تأیید کنید که Rules برنامه شما رفتار مورد نظر شما را نشان می دهد.
به روز رسانی های خود را مستقر کنید
هنگامی که Rules خود را بهروزرسانی و آزمایش کردید، منابع را برای تولید مستقر کنید.
برای Cloud Firestore Security Rules ، فایلهای .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
از کنسول Firebase استفاده کنید
همچنین میتوانید منابع Rules را ویرایش کنید و آنها را بهعنوان نسخههایی از کنسول Firebase استفاده کنید. تست نحوی هنگام ویرایش در رابط کاربری کنسول Firebase انجام میشود و آزمایش معنایی با استفاده از Rules Playground در دسترس است.
قوانین خود را ویرایش و به روز کنید
- کنسول Firebase را باز کنید و پروژه خود را انتخاب کنید.
- سپس، Realtime Database ، Cloud Firestore یا Storage را از پیمایش محصول انتخاب کنید، سپس روی Rules کلیک کنید تا به ویرایشگر Rules بروید.
- قوانین خود را مستقیماً در ویرایشگر ویرایش کنید.
به روز رسانی های خود را تست کنید
علاوه بر آزمایش نحو در رابط کاربری ویرایشگر، میتوانید رفتار Rules معنایی را با استفاده از پایگاه داده پروژه و منابع ذخیرهسازی، مستقیماً در کنسول Firebase و با استفاده از Rules Playground آزمایش کنید. صفحه نمایش زمین را در ویرایشگر Rules باز کنید ، تنظیمات را تغییر داده و روی Run کلیک کنید. به دنبال پیام تأیید در بالای ویرایشگر باشید.
به روزرسانی های خود را مستقر کنید
هنگامی که راضی شدید که به روزرسانی های شما همان چیزی است که انتظار دارید ، روی انتشار کلیک کنید.
از مدیر SDK استفاده کنید
می توانید از Admin SDK برای قوانین Node.js استفاده کنید. با این دسترسی برنامه ای ، می توانید:
- ابزارهای سفارشی ، اسکریپت ها ، داشبورد و خطوط لوله CI/CD را برای مدیریت قوانین پیاده سازی کنید.
- قوانین را به راحتی در چندین پروژه Firebase مدیریت کنید.
هنگام به روزرسانی قوانین به صورت برنامه ای ، از ایجاد تغییرات ناخواسته در کنترل دسترسی برای برنامه خود بسیار مهم است. کد Admin SDK خود را با توجه به امنیت در ذهن ، به ویژه هنگام به روزرسانی یا استقرار قوانین بنویسید.
نکته مهم دیگر که باید در نظر داشته باشید این است که Firebase Security Rules برای انتشار کامل چندین دقیقه طول می کشد. هنگام استفاده از Admin SDK برای استقرار قوانین ، حتماً از شرایط مسابقه ای که برنامه شما بلافاصله به قوانینی که استقرار آنها هنوز کامل نشده است ، جلوگیری کنید. اگر مورد استفاده شما برای دسترسی به قوانین کنترل نیاز به به روزرسانی های مکرر دارد ، با استفاده از Cloud Firestore ، راه حل هایی را در نظر بگیرید که برای کاهش شرایط مسابقه با وجود به روزرسانی های مکرر طراحی شده است.
همچنین به این محدودیت ها توجه داشته باشید:
- قوانین باید در هنگام سریالی کوچکتر از 256 KIB از متن رمزگذاری شده UTF-8 باشد.
- یک پروژه می تواند حداکثر 2500 قانون مستقر در کل داشته باشد. پس از رسیدن به این حد ، قبل از ایجاد موارد جدید باید برخی از قوانین قدیمی را حذف کنید.
ایجاد و استقرار قوانین Cloud Firestore Cloud Storage یا Cloud
یک گردش کار معمولی برای مدیریت قوانین امنیتی با Admin SDK می تواند شامل سه مرحله گسسته باشد:
- ایجاد یک منبع پرونده قوانین (اختیاری)
- یک مجموعه قوانین ایجاد کنید
- قوانین جدید را منتشر یا مستقر کنید
SDK روشی را برای ترکیب این مراحل در یک فراخوان API برای 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);
این الگوی مشابه برای قوانین Cloud Storage با releaseFirestoreRulesetFromSource()
کار می کند.
از طرف دیگر ، می توانید پرونده قوانین را به عنوان یک شیء حافظه ایجاد کنید ، قوانین را ایجاد کنید و قوانین را به طور جداگانه برای کنترل دقیق تر این رویدادها مستقر کنید. به عنوان مثال:
const rf = admin.securityRules().createRulesFileFromSource('firestore.rules', source);
const rs = await admin.securityRules().createRuleset(rf);
await admin.securityRules().releaseFirestoreRuleset(rs);
قوانین Realtime Database را به روز کنید
برای به روزرسانی قوانین Realtime Database با Admin SDK ، از روشهای 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);
مجموعه قوانین را مدیریت کنید
برای کمک به مدیریت قوانین بزرگ ، 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;
}
}
برای استقرارهای بسیار بزرگ که با گذشت زمان به 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 استفاده کنید
ابزارهای توضیح داده شده در بالا به خوبی برای گردش کار مختلف ، از جمله مدیریت Firebase Security Rules برای چندین پایگاه داده Cloud Firestore در پروژه شما مناسب است ، اما ممکن است بخواهید با استفاده از خود API مدیریت ، Firebase Security Rules مدیریت و مستقر کنید. API مدیریت بیشترین انعطاف پذیری را به شما می دهد.
همچنین به این محدودیت ها توجه داشته باشید:
- قوانین باید در هنگام سریالی کوچکتر از 256 KIB از متن رمزگذاری شده UTF-8 باشد.
- یک پروژه می تواند حداکثر 2500 قانون مستقر در کل داشته باشد. پس از رسیدن به این حد ، قبل از ایجاد موارد جدید باید برخی از قوانین قدیمی را حذف کنید.
ایجاد و استقرار قوانین Cloud Firestore یا Cloud Storage با استراحت
مثالهای موجود در این بخش Rules Firestore استفاده می کنند ، اگرچه در مورد Rules Cloud Storage نیز اعمال می شود.
نمونه ها همچنین از Curl برای برقراری تماس API استفاده می کنند. مراحل تنظیم و عبور نشانه های احراز هویت حذف شده است. شما می توانید با استفاده از API Explorer که با مستندات مرجع یکپارچه شده است ، با این API آزمایش کنید.
مراحل معمولی برای ایجاد و استقرار یک قانون با استفاده از API مدیریت عبارتند از:
- منابع پرونده را ایجاد کنید
- یک مجموعه قوانین ایجاد کنید
- قوانین جدید را منتشر کنید (مستقر کنید).
یک منبع ایجاد کنید
بیایید فرض کنیم شما در حال کار بر روی پروژه Firebase secure_commerce
خود هستید و می خواهید Rules Cloud Firestore Locked-Down-Down را در یک پایگاه داده در پروژه خود به نام east_store
مستقر کنید.
شما می توانید این قوانین را در یک پرونده firestore.rules
پیاده سازی کنید.
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
یک مجموعه قوانین ایجاد کنید
اکنون یک اثر انگشت رمزگذاری شده Base64 برای این پرونده ایجاد کنید. سپس می توانید از منبع موجود در این پرونده برای جمع آوری بار مورد نیاز برای ایجاد یک قانون با projects.rulesets.create
تماس استراحت استفاده کنید. در اینجا ، از دستور cat
برای وارد کردن محتویات firestore.rules
در بار بقیه استفاده کنید.
برای ردیابی ، این مسئله را با پایگاه داده 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'
API یک پاسخ اعتبار سنجی و یک نام Ruleset را برمی گرداند ، به عنوان مثال 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 چند دقیقه طول می کشد تا به طور کامل پخش شود. هنگام استفاده از API Management REST برای استقرار ، حتما از شرایط مسابقه ای که برنامه شما بلافاصله به قوانینی که استقرار آنها هنوز کامل نشده است ، جلوگیری کنید.
قوانین Realtime Database را با استراحت به روز کنید
Realtime Database رابط استراحت خاص خود را برای مدیریت Rules فراهم می کند. به مدیریت Rules Realtime Database FIREBASE از طریق استراحت مراجعه کنید.
با استراحت قوانین را مدیریت کنید
برای کمک به مدیریت استقرار قوانین بزرگ ، علاوه بر یک روش استراحت برای ایجاد قوانین و انتشار ، API مدیریت روش هایی را ارائه می دهد:
- لیست ، دریافت و حذف قوانین
- نسخه های لیست ، دریافت و حذف قوانین را حذف کنید
برای استقرارهای بسیار بزرگ که با گذشت زمان به 2500 قانون محدود می شوند ، می توانید منطقی ایجاد کنید تا قدیمی ترین قوانین را در یک چرخه زمانی ثابت حذف کنید. به عنوان مثال ، برای حذف کلیه قوانین مستقر شده برای بیش از 30 روز ، می توانید با projects.rulesets.list
تماس بگیرید ، لیست JSON از اشیاء Ruleset
را در کلیدهای createTime
خود تجزیه کنید ، سپس با project.rulesets.delete
در قوانین مربوطه توسط ruleset_id
تماس بگیرید.
به روزرسانی های خود را با استراحت آزمایش کنید
سرانجام ، API مدیریت به شما امکان می دهد تست های نحوی و معنایی را در مورد Cloud Firestore و Cloud Storage در پروژه های تولیدی خود انجام دهید.
آزمایش با این مؤلفه API شامل موارد زیر است:
- تعریف یک شیء JSON
TestSuite
برای نشان دادن مجموعه ای از اشیاءTestCase
- ارسال
TestSuite
- تجزیه و تحلیل اشیاء
TestResult
برگشتی
بیایید یک شیء TestSuite
را با یک TestCase
واحد در یک پرونده testcase.json
تعریف کنیم. در این مثال ، ما منبع Rules را با بار استراحت ، در کنار مجموعه آزمون به صورت خطی منتقل می کنیم تا بر اساس آن قوانین اجرا کنیم. ما انتظار ارزیابی قوانین را مشخص می کنیم و درخواست مشتری را که باید از آن استفاده شود ، مورد آزمایش قرار می دهد. شما همچنین می توانید مشخص کنید که گزارش آزمون چگونه کامل است ، با استفاده از ارزش "کامل" برای نشان دادن نتایج برای همه 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 CLI از شما خواسته می شود تا مجوزها را برای اتصال این دو محصول فراهم کنید.
اگر تصمیم دارید چنین امنیت خدمات متقابل را غیرفعال کنید:
اول ، قبل از غیرفعال کردن ویژگی ، قوانین خود را ویرایش کرده و تمام بیانیه هایی را که از توابع Rules برای دسترسی به Cloud Firestore استفاده می کنند ، حذف کنید. در غیر این صورت ، پس از غیرفعال شدن ویژگی ، ارزیابی Rules باعث می شود درخواست های ذخیره سازی شما از بین برود.
از صفحه IAM در کنسول Google Cloud برای حذف نقش "Firebase Rules Agent Firestore Agent" با دنبال کردن راهنمای ابر برای ابطال نقش ها استفاده کنید.
از شما خواسته می شود دفعه بعدی که قوانین خدمات متقابل را از Firebase CLI یا کنسول Firebase صرفه جویی می کنید ، این ویژگی را دوباره فعال کنید.
،Firebase ابزارهای مختلفی را برای مدیریت Rules خود در اختیار شما قرار می دهد ، هر یک در موارد خاص مفید است ، و هر یک از آنها با استفاده از API مدیریت قوانین امنیتی Firebase یکسان.
مهم نیست که از کدام ابزار برای استناد به آن استفاده می شود ، API مدیریت:
- مبادله یک منبع قوانین: مجموعه ای از قوانین ، به طور معمول یک پرونده کد حاوی بیانیه های Firebase Security Rules .
- فروشگاه ها منبع را به عنوان یک قانون تغییر ناپذیر مصرف کردند.
- استقرار هر یک از قوانین را در یک نسخه منتشر می کند. خدمات با قوانین امنیتی Firebase در جستجوی انتشار یک پروژه برای ارزیابی هر درخواست برای یک منبع امن است.
- قابلیت اجرای تست های نحوی و معنایی یک قانون را فراهم می کند.
از Firebase CLI استفاده کنید
با استفاده از Firebase CLI می توانید منابع محلی را بارگذاری کرده و نسخه های مستقر را مستقر کنید. Firebase Local Emulator Suite به شما امکان می دهد آزمایش های محلی کامل از منابع را انجام دهید.
استفاده از CLI به شما امکان می دهد قوانین خود را تحت کنترل نسخه با کد برنامه خود نگه دارید و قوانین را به عنوان بخشی از فرآیند استقرار موجود خود مستقر کنید.
یک فایل پیکربندی ایجاد کنید
هنگامی که پروژه Firebase خود را با استفاده از Firebase CLI پیکربندی می کنید ، یک پرونده پیکربندی .rules
را در فهرست پروژه خود ایجاد می کنید. برای شروع پیکربندی پروژه Firebase خود از دستور زیر استفاده کنید:
// 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 را بازنویسی کنید.
به روزرسانی های خود را آزمایش کنید
Local Emulator Suite برای کلیه محصولات دارای قوانین امنیتی ، شبیه سازها را فراهم می کند. موتور قوانین امنیتی برای هر شبیه ساز هم ارزیابی نحوی و هم معنایی از قوانین را انجام می دهد ، بنابراین از آزمایش نحوی که API مدیریت قوانین امنیتی ارائه می دهد ، فراتر می رود.
اگر با CLI کار می کنید ، مجموعه ابزاری عالی برای آزمایش Firebase Security Rules است. برای آزمایش به روزرسانی های خود به صورت Local Emulator Suite استفاده کنید و تأیید کنید که Rules برنامه شما رفتاری را که می خواهید نشان می دهد.
به روزرسانی های خود را مستقر کنید
پس از به روزرسانی و آزمایش Rules خود ، منابع را برای تولید مستقر کنید.
برای Cloud Firestore Security Rules ، پرونده ها را با بررسی و به روزرسانی پرونده firebase.json
خود با بانکهای اطلاعاتی پیش فرض و اضافی خود .rules
کنید.
از دستورات زیر استفاده کنید تا به طور انتخابی 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
از کنسول Firebase استفاده کنید
همچنین می توانید منابع Rules را ویرایش کرده و آنها را به عنوان نسخه های کنسول Firebase مستقر کنید. آزمایش نحوی همانطور که در UI کنسول Firebase ویرایش می کنید انجام می شود و آزمایش معنایی با استفاده از زمین بازی Rules در دسترس است.
قوانین خود را ویرایش و به روز کنید
- کنسول Firebase را باز کرده و پروژه خود را انتخاب کنید.
- سپس ، Realtime Database ، Cloud Firestore یا Storage را از ناوبری محصول انتخاب کنید ، سپس بر روی قوانین کلیک کنید تا به ویرایشگر Rules بروید.
- قوانین خود را مستقیماً در ویرایشگر ویرایش کنید.
به روزرسانی های خود را آزمایش کنید
علاوه بر آزمایش نحو در ویرایشگر UI ، می توانید رفتار Rules معنایی را با استفاده از پایگاه داده و منابع ذخیره سازی پروژه خود ، مستقیماً در کنسول Firebase ، با استفاده از زمین بازی Rules آزمایش کنید. صفحه نمایش زمین را در ویرایشگر Rules باز کنید ، تنظیمات را تغییر داده و روی Run کلیک کنید. به دنبال پیام تأیید در بالای ویرایشگر باشید.
به روزرسانی های خود را مستقر کنید
هنگامی که راضی شدید که به روزرسانی های شما همان چیزی است که انتظار دارید ، روی انتشار کلیک کنید.
از مدیر SDK استفاده کنید
می توانید از Admin SDK برای قوانین Node.js استفاده کنید. با این دسترسی برنامه ای ، می توانید:
- ابزارهای سفارشی ، اسکریپت ها ، داشبورد و خطوط لوله CI/CD را برای مدیریت قوانین پیاده سازی کنید.
- قوانین را به راحتی در چندین پروژه Firebase مدیریت کنید.
هنگام به روزرسانی قوانین به صورت برنامه ای ، از ایجاد تغییرات ناخواسته در کنترل دسترسی برای برنامه خود بسیار مهم است. کد Admin SDK خود را با توجه به امنیت در ذهن ، به ویژه هنگام به روزرسانی یا استقرار قوانین بنویسید.
نکته مهم دیگر که باید در نظر داشته باشید این است که Firebase Security Rules برای انتشار کامل چندین دقیقه طول می کشد. هنگام استفاده از Admin SDK برای استقرار قوانین ، حتماً از شرایط مسابقه ای که برنامه شما بلافاصله به قوانینی که استقرار آنها هنوز کامل نشده است ، جلوگیری کنید. اگر مورد استفاده شما برای دسترسی به قوانین کنترل نیاز به به روزرسانی های مکرر دارد ، با استفاده از Cloud Firestore ، راه حل هایی را در نظر بگیرید که برای کاهش شرایط مسابقه با وجود به روزرسانی های مکرر طراحی شده است.
همچنین به این محدودیت ها توجه داشته باشید:
- قوانین باید در هنگام سریالی کوچکتر از 256 KIB از متن رمزگذاری شده UTF-8 باشد.
- یک پروژه می تواند حداکثر 2500 قانون مستقر در کل داشته باشد. پس از رسیدن به این حد ، قبل از ایجاد موارد جدید باید برخی از قوانین قدیمی را حذف کنید.
ایجاد و استقرار قوانین Cloud Firestore Cloud Storage یا Cloud
یک گردش کار معمولی برای مدیریت قوانین امنیتی با Admin SDK می تواند شامل سه مرحله گسسته باشد:
- ایجاد یک منبع پرونده قوانین (اختیاری)
- یک مجموعه قوانین ایجاد کنید
- قوانین جدید را منتشر یا مستقر کنید
SDK روشی را برای ترکیب این مراحل در یک فراخوان API برای 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);
این الگوی مشابه برای قوانین Cloud Storage با releaseFirestoreRulesetFromSource()
کار می کند.
از طرف دیگر ، می توانید پرونده قوانین را به عنوان یک شیء حافظه ایجاد کنید ، قوانین را ایجاد کنید و قوانین را به طور جداگانه برای کنترل دقیق تر این رویدادها مستقر کنید. به عنوان مثال:
const rf = admin.securityRules().createRulesFileFromSource('firestore.rules', source);
const rs = await admin.securityRules().createRuleset(rf);
await admin.securityRules().releaseFirestoreRuleset(rs);
قوانین Realtime Database را به روز کنید
برای به روزرسانی قوانین Realtime Database با Admin SDK ، از روشهای 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);
مجموعه قوانین را مدیریت کنید
برای کمک به مدیریت قوانین بزرگ ، 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;
}
}
برای استقرارهای بسیار بزرگ که با گذشت زمان به 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 استفاده کنید
ابزارهای توضیح داده شده در بالا به خوبی برای گردش کار مختلف ، از جمله مدیریت Firebase Security Rules برای چندین پایگاه داده Cloud Firestore در پروژه شما مناسب است ، اما ممکن است بخواهید با استفاده از خود API مدیریت ، Firebase Security Rules مدیریت و مستقر کنید. API مدیریت بیشترین انعطاف پذیری را به شما می دهد.
همچنین به این محدودیت ها توجه داشته باشید:
- قوانین باید در هنگام سریالی کوچکتر از 256 KIB از متن رمزگذاری شده UTF-8 باشد.
- یک پروژه می تواند حداکثر 2500 قانون مستقر در کل داشته باشد. پس از رسیدن به این حد ، قبل از ایجاد موارد جدید باید برخی از قوانین قدیمی را حذف کنید.
ایجاد و استقرار قوانین Cloud Firestore یا Cloud Storage با استراحت
مثالهای موجود در این بخش Rules Firestore استفاده می کنند ، اگرچه در مورد Rules Cloud Storage نیز اعمال می شود.
نمونه ها همچنین از Curl برای برقراری تماس API استفاده می کنند. مراحل تنظیم و عبور نشانه های احراز هویت حذف شده است. شما می توانید با استفاده از API Explorer که با مستندات مرجع یکپارچه شده است ، با این API آزمایش کنید.
مراحل معمولی برای ایجاد و استقرار یک قانون با استفاده از API مدیریت عبارتند از:
- منابع پرونده را ایجاد کنید
- یک مجموعه قوانین ایجاد کنید
- قوانین جدید را منتشر کنید (مستقر کنید).
یک منبع ایجاد کنید
بیایید فرض کنیم شما در حال کار بر روی پروژه Firebase secure_commerce
خود هستید و می خواهید Rules Cloud Firestore Locked-Down-Down را در یک پایگاه داده در پروژه خود به نام east_store
مستقر کنید.
شما می توانید این قوانین را در یک پرونده firestore.rules
پیاده سازی کنید.
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
یک مجموعه قوانین ایجاد کنید
اکنون یک اثر انگشت رمزگذاری شده Base64 برای این پرونده ایجاد کنید. سپس می توانید از منبع موجود در این پرونده برای جمع آوری بار مورد نیاز برای ایجاد یک قانون با projects.rulesets.create
تماس استراحت استفاده کنید. در اینجا ، از دستور cat
برای وارد کردن محتویات firestore.rules
در بار بقیه استفاده کنید.
برای ردیابی ، این مسئله را با پایگاه داده 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'
API یک پاسخ اعتبار سنجی و یک نام Ruleset را برمی گرداند ، به عنوان مثال 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 چند دقیقه طول می کشد تا به طور کامل پخش شود. هنگام استفاده از API Management REST برای استقرار ، حتما از شرایط مسابقه ای که برنامه شما بلافاصله به قوانینی که استقرار آنها هنوز کامل نشده است ، جلوگیری کنید.
قوانین Realtime Database را با استراحت به روز کنید
Realtime Database رابط استراحت خاص خود را برای مدیریت Rules فراهم می کند. به مدیریت Rules Realtime Database FIREBASE از طریق استراحت مراجعه کنید.
با استراحت قوانین را مدیریت کنید
برای کمک به مدیریت استقرار قوانین بزرگ ، علاوه بر یک روش استراحت برای ایجاد قوانین و انتشار ، API مدیریت روش هایی را ارائه می دهد:
- لیست ، دریافت و حذف قوانین
- نسخه های لیست ، دریافت و حذف قوانین را حذف کنید
برای استقرارهای بسیار بزرگ که با گذشت زمان به 2500 قانون محدود می شوند ، می توانید منطقی ایجاد کنید تا قدیمی ترین قوانین را در یک چرخه زمانی ثابت حذف کنید. به عنوان مثال ، برای حذف کلیه قوانین مستقر شده برای بیش از 30 روز ، می توانید با projects.rulesets.list
تماس بگیرید ، لیست JSON از اشیاء Ruleset
را در کلیدهای createTime
خود تجزیه کنید ، سپس با project.rulesets.delete
در قوانین مربوطه توسط ruleset_id
تماس بگیرید.
به روزرسانی های خود را با استراحت آزمایش کنید
سرانجام ، API مدیریت به شما امکان می دهد تست های نحوی و معنایی را در مورد Cloud Firestore و Cloud Storage در پروژه های تولیدی خود انجام دهید.
آزمایش با این مؤلفه API شامل موارد زیر است:
- تعریف یک شیء JSON
TestSuite
برای نشان دادن مجموعه ای از اشیاءTestCase
- ارسال
TestSuite
- تجزیه و تحلیل اشیاء
TestResult
برگشتی
بیایید یک شیء TestSuite
را با یک TestCase
واحد در یک پرونده testcase.json
تعریف کنیم. در این مثال ، ما منبع Rules را با بار استراحت ، در کنار مجموعه آزمون به صورت خطی منتقل می کنیم تا بر اساس آن قوانین اجرا کنیم. ما انتظار ارزیابی قوانین را مشخص می کنیم و درخواست مشتری را که باید از آن استفاده شود ، مورد آزمایش قرار می دهد. شما همچنین می توانید مشخص کنید که گزارش آزمون چگونه کامل است ، با استفاده از ارزش "کامل" برای نشان دادن نتایج برای همه 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 CLI از شما خواسته می شود تا مجوزها را برای اتصال این دو محصول فراهم کنید.
اگر تصمیم دارید چنین امنیت خدمات متقابل را غیرفعال کنید:
اول ، قبل از غیرفعال کردن ویژگی ، قوانین خود را ویرایش کرده و تمام بیانیه هایی را که از توابع Rules برای دسترسی به Cloud Firestore استفاده می کنند ، حذف کنید. در غیر این صورت ، پس از غیرفعال شدن ویژگی ، ارزیابی Rules باعث می شود درخواست های ذخیره سازی شما از بین برود.
از صفحه IAM در کنسول Google Cloud برای حذف نقش "Firebase Rules Agent Firestore Agent" با دنبال کردن راهنمای Cloud برای ابطال نقش ها استفاده کنید.
از شما خواسته می شود دفعه بعدی که قوانین خدمات متقابل را از Firebase CLI یا کنسول Firebase صرفه جویی می کنید ، این ویژگی را دوباره فعال کنید.