אבטחה של ספריות לקוח לשרת

כשמשתמשים בספריות לקוח של שרת ל-Firestore, אפשר לנהל את הגישה למשאבים באמצעות ניהול זהויות והרשאות גישה (IAM). באמצעות IAM אפשר לתת גישה פרטנית יותר למשאבים ספציפיים ב- Google Cloud ולמנוע גישה לא רצויה למשאבים אחרים. בדף הזה מתוארים התפקידים וההרשאות של IAM ל-Firestore. לתיאור מפורט של IAM, אפשר לקרוא את מסמכי ה-IAM.

בעזרת IAM תוכלו לשמור על עקרון האבטחה של הרשאות מינימליות, וכך לתת רק למי שצריך את רמת הגישה שצריך למשאבים השונים.

באמצעות כללי המדיניות ב-IAM אתם יכולים להחליט למי (משתמשים) יהיו הרשאות (תפקידים) למשאבים מסוימים. כללי המדיניות ב-IAM נותנים למשתמשים תפקיד אחד או יותר עם הרשאות ספציפיות. לדוגמה, אפשר לתת למשתמש את התפקיד datastore.indexAdmin, שמאפשר לו ליצור, לשנות, למחוק, להציג או לראות אינדקסים.

הרשאות ותפקידים

בקטע הזה מפורטים התפקידים וההרשאות שנתמכים ב-Firestore.

ההרשאות הנדרשות לשיטות API

בטבלה הבאה מפורטות ההרשאות שנדרשות למבצע הקריאה החוזרת (caller) כדי לבצע כל פעולה:

‏Method ההרשאות הנדרשות
projects.databases.documents
batchGet datastore.entities.get
batchWrite עדכון או שינוי באמצעות תנאי קדם של קיום שהוגדר לערך false datastore.entities.create
batchWrite עדכון או שינוי באמצעות תנאי קדם של קיום שהוגדר לערך true datastore.entities.create
batchWrite עדכון או שינוי ללא תנאי מוקדם datastore.entities.create
datastore.entities.update
beginTransaction datastore.databases.get
commit עדכון או שינוי באמצעות תנאי קדם של קיום שהוגדר לערך false datastore.entities.create
commit עדכון או שינוי באמצעות תנאי קדם של קיום שהוגדר לערך true datastore.entities.update
commit עדכון או שינוי ללא תנאי מוקדם datastore.entities.create
datastore.entities.update
מחיקה של commit datastore.entities.delete
createDocument datastore.entities.create
delete datastore.entities.delete
get datastore.entities.get
list datastore.entities.get
datastore.entities.list
listCollectionIds datastore.entities.list
partitionQuery datastore.entities.get
datastore.entities.list
patch datastore.entities.update
rollback datastore.databases.get
runAggregationQuery datastore.entities.get
datastore.entities.list
runQuery datastore.entities.get
datastore.entities.list
executePipeline (RPC)

באחד מהשלבים הבאים:
collection(...)
collection_group(...)
database()
datastore.entities.get
datastore.entities.list
executePipeline (RPC)

באחד מהשלבים הבאים:
documents(...)
datastore.entities.get
executePipeline (RPC)

באחד מהשלבים הבאים:
update(...)
datastore.entities.update
executePipeline (RPC)

באחד מהשלבים הבאים:
delete(...)
datastore.entities.delete
write (RPC) עדכון או שינוי באמצעות תנאי קדם של קיום שהוגדר לערך false datastore.entities.create
write (RPC) עדכון או שינוי באמצעות תנאי קדם של קיום שהוגדר לערך true datastore.entities.update
write (RPC) עדכון או שינוי ללא תנאי מוקדם datastore.entities.create
datastore.entities.update
מחיקה של write (RPC) datastore.entities.delete
projects.databases.indexes
create datastore.schemas.create
delete datastore.schemas.delete
get datastore.schemas.get
list datastore.schemas.list
projects.databases
create datastore.databases.create

אם הבקשה create מכילה ערך tags, נדרשות ההרשאות הנוספות הבאות:

  • datastore.databases.createTagBinding

אם רוצים לבדוק אם קישורי התגים הוגדרו בהצלחה על ידי הצגת הקישורים, נדרשות ההרשאות הנוספות הבאות:

  • datastore.databases.listTagBindings
  • datastore.databases.listEffectiveTags
delete datastore.databases.delete
get datastore.databases.getMetadata
list datastore.databases.list
patch datastore.databases.update
לבטל השעיה datastore.backups.restoreDatabase
clone datastore.databases.clone

אם הבקשה clone מכילה ערך tags, נדרשות ההרשאות הנוספות הבאות:

  • datastore.databases.createTagBinding

אם רוצים לבדוק אם קישורי התגים הוגדרו בהצלחה על ידי הצגת הקישורים, נדרשות ההרשאות הנוספות הבאות:

  • datastore.databases.listTagBindings
  • datastore.databases.listEffectiveTags
projects.locations
get datastore.locations.get
list datastore.locations.list
projects.databases.backupschedules
get datastore.backupSchedules.get
list datastore.backupSchedules.list
create datastore.backupSchedules.create
update datastore.backupSchedules.update
delete datastore.backupSchedules.delete
projects.locations.backups
get datastore.backups.get
list datastore.backups.list
delete datastore.backups.delete

תפקידים מוגדרים מראש

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

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

תפקיד הרשאות תיאור
roles/datastore.owner appengine.applications.get

datastore.*

resourcemanager.projects.get
resourcemanager.projects.list
גישה מלאה ל-Firestore.
roles/datastore.user appengine.applications.get

datastore.databases.get
datastore.databases.getMetadata
datastore.databases.list
datastore.entities.*
datastore.schemas.list
datastore.namespaces.get
datastore.namespaces.list
datastore.statistics.get
datastore.statistics.list

resourcemanager.projects.get
resourcemanager.projects.list
גישת קריאה/כתיבה לנתונים במסד נתונים של Firestore. מיועד למפתחי אפליקציות ולחשבונות שירות.
roles/datastore.viewer appengine.applications.get

datastore.databases.get
datastore.databases.getMetadata
datastore.databases.list
datastore.entities.get
datastore.entities.list
datastore.schemas.get
datastore.schemas.list
datastore.namespaces.get
datastore.namespaces.list
datastore.statistics.get
datastore.statistics.list

resourcemanager.projects.get
resourcemanager.projects.list

datastore.insights.get
הרשאת קריאה לכל המשאבים של Firestore.
roles/datastore.importExportAdmin appengine.applications.get
datastore.databases.export
datastore.databases.getMetadata
datastore.databases.import
datastore.operations.cancel
datastore.operations.get
datastore.operations.list
resourcemanager.projects.get
resourcemanager.projects.list
גישה מלאה לניהול ייבוא וייצוא.
roles/datastore.bulkAdmin resourcemanager.projects.get
resourcemanager.projects.list
datastore.databases.getMetadata
datastore.databases.bulkDelete
datastore.operations.cancel
datastore.operations.get
datastore.operations.list
גישה מלאה לניהול פעולות בכמות גדולה.
roles/datastore.indexAdmin appengine.applications.get

datastore.databases.getMetadata

datastore.schemas.*

datastore.operations.list

datastore.operations.get

resourcemanager.projects.get
resourcemanager.projects.list
גישה מלאה לניהול הגדרות האינדקס.
roles/datastore.keyVisualizerViewer datastore.databases.getMetadata
datastore.keyVisualizerScans.get
datastore.keyVisualizerScans.list
resourcemanager.projects.get
resourcemanager.projects.list
גישה מלאה לסריקות של Key Visualizer.
roles/datastore.backupSchedulesViewer datastore.backupSchedules.get
datastore.backupSchedules.list
הרשאת קריאה ללוחות זמנים של גיבוי במסד נתונים של Firestore.
roles/datastore.backupSchedulesAdmin datastore.backupSchedules.get
datastore.backupSchedules.list
datastore.backupSchedules.create
datastore.backupSchedules.update
datastore.backupSchedules.delete
datastore.databases.list
datastore.databases.getMetadata
גישה מלאה ללוחות זמנים של גיבוי במסד נתונים של Firestore.
roles/datastore.backupsViewer datastore.backups.get
datastore.backups.list
גישת קריאה למידע על גיבוי במיקום של Firestore.
roles/datastore.backupsAdmin datastore.backups.get
datastore.backups.list
datastore.backups.delete
גישה מלאה לגיבויים במיקום של Firestore.
roles/datastore.restoreAdmin datastore.backups.get
datastore.backups.list
datastore.backups.restoreDatabase
datastore.databases.list
datastore.databases.create
datastore.databases.getMetadata
datastore.operations.list
datastore.operations.get
אפשרות לשחזר גיבוי של Firestore למסד נתונים חדש. התפקיד הזה מאפשר גם ליצור מסדי נתונים חדשים, לא בהכרח על ידי שחזור מגיבוי.
roles/datastore.cloneAdmin datastore.databases.clone
datastore.databases.list
datastore.databases.create
datastore.databases.getMetadata
datastore.operations.list
datastore.operations.get
אפשרות לשכפל מסד נתונים של Firestore למסד נתונים חדש. התפקיד הזה מאפשר גם ליצור מסדי נתונים חדשים, לא בהכרח באמצעות שכפול.
roles/datastore.statisticsViewer resourcemanager.projects.get
resourcemanager.projects.list
datastore.databases.getMetadata
datastore.insights.get
datastore.keyVisualizerScans.get
datastore.keyVisualizerScans.list
datastore.statistics.list
datastore.statistics.get
גישת קריאה לתובנות, לנתונים סטטיסטיים ולסריקות של Key Visualizer.

תפקידים בהתאמה אישית

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

תפקידים שנדרשים כדי ליצור ולנהל תגים

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

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

הצגת תגים
  • datastore.databases.listTagBindings
  • datastore.databases.listEffectiveTags
ניהול תגים במשאבים

נדרשת ההרשאה הבאה למשאב מסד הנתונים שאליו מצורף ערך התג.

  • datastore.databases.createTagBinding

הרשאות

בטבלה הבאה מפורטות ההרשאות ש-Firestore תומך בהן.

שם ההרשאה של מסד הנתונים תיאור
datastore.databases.get מתחילים או מבטלים עסקה.
datastore.databases.import ייבוא ישויות למסד נתונים.
datastore.databases.export לייצא ישויות ממסד נתונים.
datastore.databases.bulkDelete מחיקת כמות גדולה של ישויות ממסד נתונים.
datastore.databases.getMetadata קריאת מטא-נתונים ממסד נתונים.
datastore.databases.list הצגת רשימה של מסדי הנתונים בפרויקט.
datastore.databases.create יוצרים מסד נתונים.
datastore.databases.update עדכון מסד נתונים.
datastore.databases.delete מחיקת מסד נתונים.
datastore.databases.clone משכפלים מסד נתונים.
datastore.databases.createTagBinding יצירת קישור תגים למסד נתונים.
datastore.databases.deleteTagBinding מחיקת קישור תגים למסד נתונים.
datastore.databases.listTagBindings הצגת רשימה של כל הקישורים של התגים למסד נתונים.
datastore.databases.listEffectiveTagBindings הצגת רשימה של תגי איגוד יעילים למסד נתונים.
שם ההרשאה של הישות תיאור
datastore.entities.create יוצרים מסמך.
datastore.entities.delete מחיקת מסמך.
datastore.entities.get לקרוא מסמך.
datastore.entities.list מציגים ברשימה את שמות המסמכים בפרויקט.
(datastore.entities.get נדרש כדי לגשת לנתוני המסמכים).
datastore.entities.update עדכון מסמך.
שם הרשאת האינדקס תיאור
datastore.schemas.create יוצרים אינדקס.
datastore.schemas.delete מחיקת אינדקס.
datastore.schemas.get קריאת מטא-נתונים מאינדקס.
datastore.schemas.list הצגת רשימה של האינדקסים בפרויקט.
datastore.schemas.update מעדכנים אינדקס.
שם הרשאת הפעולה תיאור
datastore.operations.cancel ביטול פעולה ממושכת.
datastore.operations.delete מחיקת פעולה ממושכת.
datastore.operations.get מקבל את המצב העדכני של פעולה ממושכת.
datastore.operations.list הצגת רשימה של פעולות ממושכות.
שם ההרשאה של הפרויקט תיאור
resourcemanager.projects.get רשימת המשאבים בפרויקט.
resourcemanager.projects.list הצגת רשימה של פרויקטים שבבעלותכם.
שם הרשאת המיקום תיאור
datastore.locations.get קבלת פרטים על מיקום של מסד נתונים. נדרש כדי ליצור מסד נתונים חדש.
datastore.locations.list רשימת המיקומים הזמינים של מסדי נתונים. חובה ליצור מסד נתונים חדש.
שם ההרשאה של Key Visualizer תיאור
datastore.keyVisualizerScans.get קבלת פרטים על סריקות של Key Visualizer.
datastore.keyVisualizerScans.list הצגת רשימה של סריקות Key Visualizer זמינות.
שם ההרשאה של לוח הזמנים של הגיבוי תיאור
datastore.backupSchedules.get קבלת פרטים על לוח זמנים לגיבוי.
datastore.backupSchedules.list רשימת לוחות הזמנים הזמינים לגיבוי.
datastore.backupSchedules.create יוצרים לוח זמנים לגיבוי.
datastore.backupSchedules.update עדכון של לוח זמנים לגיבוי.
datastore.backupSchedules.delete מחיקת לוח זמנים לגיבוי.
שם הרשאת הגיבוי תיאור
datastore.backups.get קבלת פרטים על גיבוי.
datastore.backups.list רשימת הגיבויים הזמינים.
datastore.backups.delete מחיקת גיבוי.
datastore.backups.restoreDatabase שחזור מסד נתונים מגיבוי.
שם ההרשאה לתובנות תיאור
datastore.insights.get קבלת תובנות לגבי משאב

זמן האחזור של שינוי התפקיד

ההרשאות ב-IAM נשמרות במטמון של Firestore למשך 5 דקות, ולכן יכול להיות שיחלפו עד 5 דקות עד ששינוי בתפקיד ייכנס לתוקף.

ניהול IAM ב-Firestore

אפשר לקבל ולהגדיר מדיניות IAM באמצעות Google Cloud המסוף,gcloud ה-API של IAM או כלי שורת הפקודה. פרטים נוספים זמינים במאמר בנושא הענקה, שינוי וביטול של הרשאות גישה לחברי פרויקט.

הגדרת הרשאות לגישה מותנית

אפשר להשתמש בתנאים של IAM כדי להגדיר ולאכוף בקרת גישה מותנית.

לדוגמה, התנאי הבא מקצה לחשבון משתמש את התפקיד datastore.user עד לתאריך מסוים:

{
  "role": "roles/datastore.user",
  "members": [
    "user:travis@example.com"
  ],
  "condition": {
    "title": "Expires_December_1_2023",
    "description": "Expires on December 1, 2023",
    "expression":
      "request.time < timestamp('2023-12-01T00:00:00.000Z')"
  }
}

במאמר הגדרת גישה זמנית מוסבר איך מגדירים תנאי IAM לגישה זמנית.

כדי ללמוד איך להגדיר תנאי IAM לגישה למסד נתונים אחד או יותר, ראו הגדרת תנאי גישה למסד נתונים.

תלות של כלל אבטחה ב-IAM

כללי האבטחה של Firestore ללקוחות ניידים או אינטרנטיים תלויים בחשבון השירות ובקישור ה-IAM הבאים:

חשבון שירות תפקיד IAM
service-project_number@firebase-rules.iam.gserviceaccount.com roles/firebaserules.system

מערכת Firebase מגדירה את חשבון השירות הזה באופן אוטומטי. אם תסירו את התפקיד firebaserules.system מחשבון השירות הזה, כל הבקשות יידחו על ידי כללי האבטחה. כדי לשחזר את הקישור הזה ב-IAM, משתמשים בפקודה הבאה של ה-CLI של gcloud:

gcloud projects add-iam-policy-binding project_id \
--member=serviceAccount:service-project_number@firebase-rules.iam.gserviceaccount.com \
--role=roles/firebaserules.system

כדי לברר מהם project_id ו-project_number, אפשר לעיין במאמר בנושא זיהוי פרויקטים.

במקום להשתמש במסוף Google Cloud , מומלץ להשתמש ב-Google Cloud CLI, כי התפקיד Google Cloud מוסתר במסוף כברירת מחדל.firebaserules.system

המאמרים הבאים