אבטחה של ספריות לקוח לשרת
כשמשתמשים בספריות לקוח של שרת ל-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 |
beginTransaction |
datastore.databases.get |
commit עדכון או שינוי באמצעות תנאי קדם של קיום שהוגדר לערך false |
datastore.entities.create |
commit עדכון או שינוי באמצעות תנאי קדם של קיום שהוגדר לערך true |
datastore.entities.update |
commit עדכון או שינוי ללא תנאי מוקדם |
datastore.entities.create |
מחיקה של commit |
datastore.entities.delete |
createDocument |
datastore.entities.create |
delete |
datastore.entities.delete |
get |
datastore.entities.get |
list |
datastore.entities.getdatastore.entities.list |
listCollectionIds |
datastore.entities.list |
partitionQuery |
datastore.entities.get |
patch |
datastore.entities.update |
rollback |
datastore.databases.get |
runAggregationQuery |
datastore.entities.get |
runQuery |
datastore.entities.get |
executePipeline (RPC)באחד מהשלבים הבאים: – collection(...)– collection_group(...)– database()
|
datastore.entities.get
|
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 |
מחיקה של 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אם הבקשה
אם רוצים לבדוק אם קישורי התגים הוגדרו בהצלחה על ידי הצגת הקישורים, נדרשות ההרשאות הנוספות הבאות:
|
delete |
datastore.databases.delete |
get |
datastore.databases.getMetadata |
list |
datastore.databases.list |
patch |
datastore.databases.update |
| לבטל השעיה | datastore.backups.restoreDatabase |
clone |
datastore.databases.cloneאם הבקשה
אם רוצים לבדוק אם קישורי התגים הוגדרו בהצלחה על ידי הצגת הקישורים, נדרשות ההרשאות הנוספות הבאות:
|
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.getdatastore.*resourcemanager.projects.getresourcemanager.projects.list |
גישה מלאה ל-Firestore. |
roles/datastore.user |
appengine.applications.getdatastore.databases.getdatastore.databases.getMetadatadatastore.databases.listdatastore.entities.*datastore.schemas.listdatastore.namespaces.getdatastore.namespaces.listdatastore.statistics.getdatastore.statistics.listresourcemanager.projects.getresourcemanager.projects.list |
גישת קריאה/כתיבה לנתונים במסד נתונים של Firestore. מיועד למפתחי אפליקציות ולחשבונות שירות. |
roles/datastore.viewer |
appengine.applications.getdatastore.databases.getdatastore.databases.getMetadatadatastore.databases.listdatastore.entities.getdatastore.entities.listdatastore.schemas.getdatastore.schemas.listdatastore.namespaces.getdatastore.namespaces.listdatastore.statistics.getdatastore.statistics.listresourcemanager.projects.getresourcemanager.projects.listdatastore.insights.get |
הרשאת קריאה לכל המשאבים של Firestore. |
roles/datastore.importExportAdmin |
appengine.applications.getdatastore.databases.exportdatastore.databases.getMetadatadatastore.databases.importdatastore.operations.canceldatastore.operations.getdatastore.operations.listresourcemanager.projects.getresourcemanager.projects.list |
גישה מלאה לניהול ייבוא וייצוא. |
roles/datastore.bulkAdmin |
resourcemanager.projects.getresourcemanager.projects.listdatastore.databases.getMetadatadatastore.databases.bulkDeletedatastore.operations.canceldatastore.operations.getdatastore.operations.list |
גישה מלאה לניהול פעולות בכמות גדולה. |
roles/datastore.indexAdmin |
appengine.applications.getdatastore.databases.getMetadatadatastore.schemas.*datastore.operations.listdatastore.operations.getresourcemanager.projects.getresourcemanager.projects.list |
גישה מלאה לניהול הגדרות האינדקס. |
roles/datastore.keyVisualizerViewer |
datastore.databases.getMetadatadatastore.keyVisualizerScans.getdatastore.keyVisualizerScans.listresourcemanager.projects.getresourcemanager.projects.list |
גישה מלאה לסריקות של Key Visualizer. |
roles/datastore.backupSchedulesViewer |
datastore.backupSchedules.getdatastore.backupSchedules.list |
הרשאת קריאה ללוחות זמנים של גיבוי במסד נתונים של Firestore. |
roles/datastore.backupSchedulesAdmin |
datastore.backupSchedules.getdatastore.backupSchedules.listdatastore.backupSchedules.createdatastore.backupSchedules.updatedatastore.backupSchedules.deletedatastore.databases.listdatastore.databases.getMetadata |
גישה מלאה ללוחות זמנים של גיבוי במסד נתונים של Firestore. |
roles/datastore.backupsViewer |
datastore.backups.getdatastore.backups.list |
גישת קריאה למידע על גיבוי במיקום של Firestore. |
roles/datastore.backupsAdmin |
datastore.backups.getdatastore.backups.listdatastore.backups.delete |
גישה מלאה לגיבויים במיקום של Firestore. |
roles/datastore.restoreAdmin |
datastore.backups.getdatastore.backups.listdatastore.backups.restoreDatabasedatastore.databases.listdatastore.databases.createdatastore.databases.getMetadatadatastore.operations.listdatastore.operations.get |
אפשרות לשחזר גיבוי של Firestore למסד נתונים חדש. התפקיד הזה מאפשר גם ליצור מסדי נתונים חדשים, לא בהכרח על ידי שחזור מגיבוי. |
roles/datastore.cloneAdmin |
datastore.databases.clonedatastore.databases.listdatastore.databases.createdatastore.databases.getMetadatadatastore.operations.listdatastore.operations.get |
אפשרות לשכפל מסד נתונים של Firestore למסד נתונים חדש. התפקיד הזה מאפשר גם ליצור מסדי נתונים חדשים, לא בהכרח באמצעות שכפול. |
roles/datastore.statisticsViewer |
resourcemanager.projects.getresourcemanager.projects.listdatastore.databases.getMetadatadatastore.insights.getdatastore.keyVisualizerScans.getdatastore.keyVisualizerScans.listdatastore.statistics.listdatastore.statistics.get |
גישת קריאה לתובנות, לנתונים סטטיסטיים ולסריקות של Key Visualizer. |
תפקידים בהתאמה אישית
אם התפקידים המוגדרים מראש לא עונים על הדרישות העסקיות שלכם, אתם יכולים להגדיר תפקידים בהתאמה אישית עם הרשאות שאתם מציינים:
תפקידים שנדרשים כדי ליצור ולנהל תגים
אם תג כלשהו מיוצג בפעולות יצירה או שחזור, נדרשים תפקידים מסוימים. איך יוצרים תגים ומנהלים אותם
נדרשות ההרשאות הבאות.
הצגת תגים
datastore.databases.listTagBindingsdatastore.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