כשמשתמשים בספריות הלקוח של השרת ל-Cloud Firestore, אפשר לנהל את הגישה למשאבים באמצעות ניהול זהויות והרשאות גישה (IAM). בעזרת IAM תוכלו לתת גישה פרטנית יותר למשאבים ספציפיים ב-Google Cloud, ולמנוע גישה לא רצויה למשאבים אחרים. בדף הזה מתוארים התפקידים וההרשאות של IAM ב-Cloud Firestore. למידע מפורט על IAM, קראו את מסמכי העזרה של IAM.
בעזרת IAM תוכלו לשמור על עקרון האבטחה של הרשאות מינימליות, וכך לתת רק למי שצריך את רמת הגישה שצריך למשאבים השונים.
באמצעות כללי המדיניות ב-IAM אתם יכולים להחליט למי (משתמשים) יהיו הרשאות גישה (תפקידים) למשאבים מסוימים.
כללי המדיניות ב-IAM מקצים למשתמשים תפקיד אחד או יותר עם הרשאות ספציפיות. לדוגמה, אתם יכולים להקצות למשתמש את התפקיד datastore.indexAdmin, שמאפשר לו ליצור, לשנות, למחוק, להציג ברשימה או לראות אינדקסים.
הרשאות ותפקידים
בקטע הזה מפורטים התפקידים וההרשאות שנתמכים ב-Cloud Firestore.
ההרשאות שנדרשות לשיטות API
בטבלה הבאה מפורטות ההרשאות הנדרשות למבצע הקריאה החוזרת (caller) כדי לבצע כל פעולה:
| שיטה | ההרשאות הנדרשות |
|---|---|
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 |
| עדכון | datastore.backupSchedules.update |
| delete | datastore.backupSchedules.delete |
projects.locations.backups |
|
| get | datastore.backups.get |
| list | datastore.backups.list |
| delete | datastore.backups.delete |
תפקידים מוגדרים מראש
באמצעות IAM, כל שיטת API ב-Cloud Firestore דורשת שלחשבון שממנו הגיעה בקשת ה-API תהיה ההרשאה המתאימה לשימוש במשאב. כדי לתת הרשאות, צריך להגדיר כללי מדיניות שמקצים תפקידים למשתמש, לקבוצה או לחשבון שירות. בנוסף לתפקידים הבסיסיים, בעלים, עריכה וצפייה, אתם יכולים להקצות למשתמשים בפרויקט תפקידים ב-Cloud Firestore.
בטבלה הבאה מפורטים תפקידי IAM ב-Cloud Firestore. אפשר להקצות כמה תפקידים למשתמש, לקבוצה או לחשבון שירות.
| תפקיד | הרשאות | תיאור |
|---|---|---|
roles/datastore.owner |
appengine.applications.getdatastore.*resourcemanager.projects.getresourcemanager.projects.list |
גישה מלאה אל Cloud 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 |
גישת קריאה/כתיבה לנתונים במסד נתונים של Cloud 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 |
גישת קריאה לכל המשאבים של Cloud 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 |
גישת קריאה לתזמוני גיבוי במסד נתונים של Cloud Firestore. |
roles/datastore.backupSchedulesAdmin |
datastore.backupSchedules.getdatastore.backupSchedules.listdatastore.backupSchedules.createdatastore.backupSchedules.updatedatastore.backupSchedules.deletedatastore.databases.listdatastore.databases.getMetadata |
גישה מלאה לתזמוני גיבוי במסד נתונים של Cloud Firestore. |
roles/datastore.backupsViewer |
datastore.backups.getdatastore.backups.list |
גישת קריאה למידע על גיבוי במיקום של Cloud Firestore. |
roles/datastore.backupsAdmin |
datastore.backups.getdatastore.backups.listdatastore.backups.delete |
גישה מלאה לגיבויים במיקום Cloud Firestore. |
roles/datastore.restoreAdmin |
datastore.backups.getdatastore.backups.listdatastore.backups.restoreDatabasedatastore.databases.listdatastore.databases.createdatastore.databases.getMetadatadatastore.operations.listdatastore.operations.get |
אפשרות לשחזר גיבוי של Cloud Firestore למסד נתונים חדש. התפקיד הזה גם מאפשר ליצור מסדי נתונים חדשים, לא בהכרח על ידי שחזור מגיבוי. |
roles/datastore.cloneAdmin |
datastore.databases.clonedatastore.databases.listdatastore.databases.createdatastore.databases.getMetadatadatastore.operations.listdatastore.operations.get |
אפשרות לשכפל מסד נתונים של Cloud 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
הרשאות
בטבלה הבאה מפורטות ההרשאות שנתמכות ב-Cloud 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 נשמרות במטמון של Cloud Firestore למשך 5 דקות, ולכן שינוי בתפקיד נכנס לתוקף תוך 5 דקות לכל היותר.
ניהול IAM של Cloud Firestore
אפשר לקבל ולהגדיר מדיניות IAM באמצעות מסוף Google Cloud, IAM API או כלי שורת הפקודה gcloud. לפרטים נוספים, קראו את המאמר הענקה, שינוי וביטול של הרשאות גישה לחברי פרויקט.
הגדרת הרשאות גישה מותנית
אתם יכולים להשתמש בתנאי 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
Cloud Firestore Security Rules ללקוחות בנייד או באינטרנט תלוי בחשבון השירות ובקישור ל-IAM הבאים:
| חשבון שירות | תפקיד IAM |
|---|---|
service-project_number@firebase-rules.iam.gserviceaccount.com |
roles/firebaserules.system |
Firebase מגדיר בשבילכם את חשבון השירות הזה באופן אוטומטי. אם תסירו את התפקיד firebaserules.system מחשבון השירות הזה, כללי האבטחה ידחו את כל הבקשות. כדי לשחזר את הקישור הזה ל-IAM, משתמשים בפקודה הבאה של gcloud CLI:
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 CLI במקום במסוף Google Cloud, כי התפקיד firebaserules.system מוסתר במסוף כברירת מחדל.