תחילת העבודה עם כללי אבטחה

בעזרת כללי האבטחה של Firestore, אתם יכולים להתמקד בבניית חוויית משתמש מצוינת בלי שתצטרכו לנהל תשתית או לכתוב קוד אימות והרשאה בצד השרת.

כללי האבטחה מספקים בקרת גישה ואימות נתונים בפורמט פשוט אך מובן. כדי ליצור מערכות גישה שמבוססות על משתמשים ותפקידים וששומרות על בטיחות הנתונים של המשתמשים, צריך להשתמש באימות ב-Firebase עם כללי אבטחה ב-Firestore.

כללי אבטחה גרסה 2

החל ממאי 2019, גרסה 2 של כללי האבטחה של Firestore זמינה עכשיו. בגרסה 2 של הכללים, אופן הפעולה של תווים כלליים רקורסיביים {name=**} משתנה. חובה להשתמש בגרסה 2 אם מתכננים להשתמש בשאילתות של קבוצות אוספים. כדי להשתמש בגרסה 2, צריך להוסיף את השורה rules_version = '2'; בתור השורה הראשונה בכללי האבטחה:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {

כללי כתיבה

תכתבו ותנהלו כללי אבטחה של Firestore שמותאמים למודל הנתונים שתיצרו עבור מסד הנתונים שמוגדר כברירת מחדל ועבור כל מסד נתונים נוסף בפרויקט.

כל כללי האבטחה של Firestore מורכבים מmatch הצהרות שמזהות מסמכים במסד הנתונים, וallow מביטויים ששולטים בגישה למסמכים האלה:

service cloud.firestore {
  match /databases/{database}/documents {
    match /<some_path>/ {
      allow read, write: if <some_condition>;
    }
  }
}

כל בקשה למסד נתונים מספריית לקוח לנייד או לאינטרנט של Firestore נבדקת מול כללי האבטחה לפני קריאה או כתיבה של נתונים. אם הכללים דוחים את הגישה לאחד מנתיבי המסמכים שצוינו, הבקשה כולה נכשלת.

בהמשך מפורטות כמה דוגמאות לקבוצות כללים בסיסיות. הכללים האלה תקפים, אבל לא מומלץ להשתמש בהם באפליקציות בסביבת ייצור:

נדרש אימות

// Allow read/write access on all documents to any user signed in to the application
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }
}

דחייה של כולם

// Deny read/write access to all users under any conditions
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

אישור גישה לכולן

// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this rule set in production; it allows
// anyone to overwrite your entire database.
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

הנתיב {document=**} שמופיע בדוגמאות שלמעלה תואם לכל מסמך במסד הנתונים כולו. כדי ללמוד איך להתאים נתיבי נתונים ספציפיים ולעבוד עם נתונים היררכיים, אפשר להמשיך לקרוא את המדריך בנושא יצירת כללי אבטחה.

בדיקת כללים

ב-Firestore יש סימולטור כללים שבעזרתו אפשר לבדוק את קבוצת הכללים. אפשר לגשת לסימולטור ממסוף Firebase בקטע Databases & Storage (מסדי נתונים ואחסון) > Firestore > הכרטיסייה Rules (כללים).

סימולטור הכללים מאפשר לכם לדמות קריאות, כתיבות ומחיקות מאומתות ולא מאומתות. כשמדמים בקשה מאומתת, אפשר ליצור טוקנים של אימות מספקים שונים ולצפות בהם בתצוגה מקדימה. בקשות סימולציה מופעלות מול קבוצת הכללים בעורך, ולא מול קבוצת הכללים שנפרסה.

פריסת כללים

כדי להתחיל להשתמש ב-Firestore באפליקציה לנייד, צריך לפרוס כללי אבטחה. אפשר לפרוס כללים במסוף Firebase, במסוף Google Cloud , באמצעות Firebase CLI או באמצעות ה-API בארכיטקטורת REST לניהול Firestore.

יכול להיות שיחלפו עד דקה לפני שעדכונים לכללי האבטחה של Firestore ישפיעו על שאילתות חדשות ועל מאזינים. עם זאת, יכול להיות שיחלפו עד 10 דקות עד שהשינויים יופצו באופן מלא וישפיעו על מאזינים פעילים.

שימוש במסוף Firebase

כדי להגדיר ולפרוס את קבוצת הכללים הראשונה, במסד הנתונים שמוגדר כברירת מחדל בפרויקט, עוברים אל Databases & Storage > Firestore > הכרטיסייה Rules ב-מסוף Firebase.

אם יוצרים כמה מסדי נתונים לפרויקט, אפשר לפרוס כללי אבטחה של Firestore לכל מסד נתונים. במסוף Firebase, משתמשים בבורר מסדי הנתונים כדי לעבור בין מסד הנתונים שמוגדר כברירת מחדל לבין מסדי נתונים נוספים.

כותבים את הכללים בעורך אונליין ולוחצים על פרסום.

שימוש במסוף Google Cloud

אפשר לנהל ולפרוס כללי אבטחה של Firestore ישירות במסוףGoogle Cloud . עורך הכללים זמין ל-Firestore במצב Native במהדורות Standard ו-Enterprise.

ההרשאות הנדרשות

כדי לנהל ולפרוס כללי אבטחה במסוף Google Cloud , צריך את הרשאות ה-IAM הבאות:

  • firebaserules.releases.create
  • firebaserules.releases.delete
  • firebaserules.releases.update
  • firebaserules.rulesets.create
  • firebaserules.rulesets.delete
  • firebaserules.rulesets.list
  • firebaserules.rulesets.test (נדרש כדי להשתמש בסימולטור הכללים)

כדי לפרוס כללים במסוף Google Cloud :

  1. נכנסים לדף Databases במסוף Google Cloud .
  2. לוחצים על המזהה של מסד הנתונים שרוצים לנהל.
  3. בתפריט הניווט, לוחצים על אבטחה.
  4. לוחצים על הכרטיסייה כללי Firestore.
  5. בעורך הכללים, צופים בכללים. כדי לערוך, לוחצים על New ruleset (ערכת כללים חדשה) או על Clone ruleset (שיבוט של ערכת כללים) ואז משנים את הכללים.
  6. לוחצים על פרסום כדי לפרוס את השינויים.

אפשר גם לראות ערכות כללים קודמות בציר הזמן, לשכפל אותן או לשחזר אותן.

שימוש ב-Firebase CLI

אפשר גם לפרוס כללים באמצעות Firebase CLI. השימוש ב-CLI מאפשר לכם לשמור את הכללים שלכם בניהול גרסאות עם קוד האפליקציה ולפרוס את הכללים כחלק מתהליך הפריסה הקיים.

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

// Edit the generated .rules file to your desired security rules
// ...

// Deploy rules for all configured databases
firebase deploy --only firestore

השלבים הבאים