ניהול זהויות והרשאות גישה (IAM)

כשמשתמשים בספריות הלקוח של השרת ל-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
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
עדכון 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.get

datastore.*

resourcemanager.projects.get
resourcemanager.projects.list
גישה מלאה אל Cloud 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
גישת קריאה/כתיבה לנתונים במסד נתונים של Cloud 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
גישת קריאה לכל המשאבים של Cloud 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
גישת קריאה לתזמוני גיבוי במסד נתונים של Cloud 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
גישה מלאה לתזמוני גיבוי במסד נתונים של Cloud Firestore.
roles/datastore.backupsViewer datastore.backups.get
datastore.backups.list
גישת קריאה למידע על גיבוי במיקום של Cloud Firestore.
roles/datastore.backupsAdmin datastore.backups.get
datastore.backups.list
datastore.backups.delete
גישה מלאה לגיבויים במיקום Cloud 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
אפשרות לשחזר גיבוי של Cloud Firestore למסד נתונים חדש. התפקיד הזה גם מאפשר ליצור מסדי נתונים חדשים, לא בהכרח על ידי שחזור מגיבוי.
roles/datastore.cloneAdmin datastore.databases.clone
datastore.databases.list
datastore.databases.create
datastore.databases.getMetadata
datastore.operations.list
datastore.operations.get
אפשרות לשכפל מסד נתונים של Cloud 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

הרשאות

בטבלה הבאה מפורטות ההרשאות שנתמכות ב-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 מוסתר במסוף כברירת מחדל.

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