שליטה בגישה באמצעות תנאי IAM
במאמר הזה מוסבר איך להשתמש בתנאי IAM כדי לשלוט בגישה למשאבי BigQuery.
תנאי IAM מאפשרים לתת גישה למשאבי BigQuery רק אם מתקיימים תנאים ספציפיים. לדוגמה, אפשר להעניק גישה למשאב למשך זמן מוגבל או באופן תקופתי בשעות מסוימות ביום. אפשר להוסיף תנאי IAM ברמת הארגון, התיקייה, הפרויקט ומערך הנתונים של המשאבים. משאבים צאצאים יורשים את מדיניות ההרשאות עם התנאים. מידע נוסף על רמות משאבים זמין במאמר בנושא היררכיות של משאבים.
תנאי IAM שימושיים למתן הרשאות של ניהול זהויות והרשאות גישה (IAM) למשאבים קשורים רבים בו-זמנית, כולל משאבים שעדיין לא קיימים. כדי להעניק הרשאות לקבוצות לא קשורות של משאבי BigQuery, כדאי להשתמש בתגי IAM.
לפני שמתחילים
- מקצים למשתמשים תפקידי IAM שמכילים את ההרשאות הנדרשות לביצוע כל משימה שמופיעה במסמך הזה.
- מפעילים את IAM API.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות בשביל להחיל תנאי IAM על משאבי BigQuery, אתם צריכים לבקש מהאדמין לתת לכם את תפקידי ה-IAM הבאים:
-
לפרויקטים:
אדמין IAM בפרויקט (
roles/resourcemanager.projectIamAdmin) -
למערכי נתונים:
בעלים של נתונים ב-BigQuery (
roles/bigquery.dataOwner)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
התפקידים המוגדרים מראש האלה מכילים את ההרשאות שנדרשות להחלת תנאי IAM על משאבי BigQuery. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
כדי להחיל תנאי IAM על משאבי BigQuery, נדרשות ההרשאות הבאות:
-
הגדרת גישת IAM מותנית ברמת הפרויקט:
resourcemanager.projects.setIamPolicy -
הגדרת גישת IAM מותנית למערכי נתונים:
-
bigquery.datasets.setIamPolicy -
bigquery.datasets.update
-
יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
אם אתם מתכננים להשתמש בתנאי IAM בכל הארגון, אתם צריכים גם הרשאות לניהול מדיניות הארגון.במאמר מבוא ל-IAM יש מידע נוסף על תפקידים והרשאות ב-IAM ב-BigQuery.
הפעלת IAM API
כדי להפעיל את IAM API, בוחרים באחת מהאפשרויות הבאות:
המסוף
עוברים לדף Identity and Access Management (IAM) API ומפעילים את ה-API.
gcloud
מריצים את הפקודה gcloud services enable:
gcloud services enable iam.googleapis.com
צפייה במדיניות של גישה מותנית במערך נתונים
בוחרים באחת מהאפשרויות הבאות:
המסוף
עוברים לדף BigQuery.
בחלונית הימנית, לוחצים על כלי הניתוחים:

אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.
בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ואז בוחרים מערך נתונים.
לוחצים על שיתוף > הרשאות.
לצד התפקיד המשויך, לוחצים על תנאי:
TITLEכדי לראות את התנאי של התפקיד.
BQ
כדי להציג או לעדכן מדיניות של גישה מותנית ב-Cloud Shell, צריך להשתמש ב-Cloud Shell בגרסה 503.0.0 ואילך.
כדי לקבל מדיניות גישה קיימת ולשמור אותה בקובץ מקומי בפורמט JSON, משתמשים בפקודה bq show ב-Cloud Shell:
bq show --format=prettyjson PROJECT_ID:DATASET > PATH_TO_FILE
מחליפים את מה שכתוב בשדות הבאים:
- PROJECT_ID: מזהה הפרויקט
- DATASET: השם של מערך הנתונים
- PATH_TO_FILE: הנתיב לקובץ ה-JSON במחשב המקומי
המאפיין access בקובץ ה-JSON של משאב מערך הנתונים מכיל את מדיניות הגישה.
API
כדי להציג את מדיניות הגישה של מערך נתונים עם תנאים, קוראים ל-datasets.get עם accessPolicyVersion=3 כפרמטר בקשה.
המאפיין access במשאב של מערך הנתונים מכיל את מדיניות הגישה.
שינוי גישה מותנית למשאבים
בקטעים הבאים מוסבר איך להוסיף או להסיר גישה מותנית למשאבים שונים.
הוספת תנאים לארגון, לתיקייה או לפרויקט
כדי להוסיף גישה מותנית לארגון, לתיקייה או לפרויקט ב-BigQuery, אפשר לעיין במאמר בנושא מדיניות הרשאות עם תנאים. כשיוצרים תנאים, כדאי לעיין בטבלאות של פורמטים של מאפיינים.
הוספת גישה מותנית למערך נתונים
כדי להוסיף תנאים למערך נתונים, בוחרים באחת מהשיטות הבאות. כשיוצרים תנאים, נעזרים בטבלאות של פורמטים של מאפיינים.
המסוף
עוברים לדף BigQuery.
בחלונית הימנית, לוחצים על כלי הניתוחים:

בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ואז בוחרים מערך נתונים.
בחלונית הפרטים, לוחצים על שיתוף > הרשאות.
לוחצים על Add Principal.
בשדה New principals, מזינים חשבון משתמש.
ברשימה Select a role, בוחרים תפקיד מוגדר מראש או תפקיד בהתאמה אישית.
לוחצים על הוספת תנאי IAM.
מוסיפים תנאים לשדה
conditionבאמצעות מאפייני התנאים.בחלונית Add IAM condition, לוחצים על Save.
בחלונית Grant access to
DATASET, לוחצים על Save.
BQ
כדי להציג או לעדכן מדיניות של גישה מותנית ב-Cloud Shell, צריך להשתמש ב-Cloud Shell בגרסה 503.0.0 ואילך.
כדי להעניק גישה מותנית למערך נתונים באמצעות Cloud Shell, פועלים לפי ההוראות להענקת גישה למערך נתונים.
אפשר להוסיף את התנאים של הגישה המותנית לקטע access בקובץ ה-JSON של מערך הנתונים.
לדוגמה, התוספת הבאה לקטע access בקובץ ה-JSON של מערך נתונים תעניק את התפקיד roles/bigquery.dataViewer ל-cloudysanfrancisco@gmail.com עד 31 בדצמבר 2032:
"access": [ { "role": "roles/bigquery.dataViewer", "userByEmail": "cloudysanfrancisco@gmail.com", "condition": { "title": "Grant roles/bigquery.dataViewer until 2033", "description": "Role expires on December 31, 2032.", "expression": "request.time < timestamp('2032-12-31T12:00:00Z')" } } ]
API
כדי להעניק גישה מותנית למערך נתונים באמצעות BigQuery API, צריך לפעול לפי ההוראות להענקת גישה למערך נתונים עם accessPolicyVersion=3 בפרמטר הבקשה.
אפשר להוסיף רשומות עם תנאי גישה למאפיין access.condition של משאב מערך הנתונים.
במערכי נתונים שיש להם מדיניות גישה מותנית, המשתמשים יכולים לעדכן את הגדרות הגישה הלא מותנית באמצעות תהליכי הקריאה, השינוי והעדכון הרגילים, בלי לציין את פרמטר הבקשה accessPolicyVersion.
הסרת גישה מותנית ממערכי נתונים
כדי להסיר תנאים ממערך נתונים, בוחרים באחת מהשיטות הבאות. כשיוצרים תנאים, כדאי לעיין בטבלאות של פורמטים של מאפיינים.
המסוף
עוברים לדף BigQuery.
בחלונית הימנית, לוחצים על כלי הניתוחים:

בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ואז בוחרים מערך נתונים.
בחלונית הפרטים, לוחצים על שיתוף > הרשאות.
בוחרים את חשבון המשתמש שרוצים לבטל את הגישה שלו.
לוחצים על מחיקה.
בתיבת הדו-שיח Delete principal? (מחיקת חשבון משתמש?), לוחצים על Delete (מחיקה).
BQ
כדי להציג או לעדכן מדיניות של גישה מותנית ב-Cloud Shell, צריך להשתמש ב-Cloud Shell בגרסה 503.0.0 ואילך.
כדי להסיר גישה מותנית למערך נתונים באמצעות Cloud Shell, פועלים לפי ההוראות במאמר שלילת הגישה למערך נתונים.
אפשר להסיר את הרשומה עם התנאי מהקטע access בקובץ ה-JSON של מערך הנתונים.
API
כדי לבטל גישה מותנית למערך נתונים באמצעות BigQuery API, צריך לפעול לפי ההוראות לביטול גישה למערך נתונים עם accessPolicyVersion=3 בפרמטר הבקשה.
אפשר להסיר רשומות עם תנאים מהמאפיין access של משאב מערך הנתונים.
במערכי נתונים שיש להם מדיניות גישה מותנית, המשתמשים יכולים לעדכן את הגדרות הגישה הלא מותנית באמצעות תהליכי הקריאה, השינוי והעדכון הרגילים, בלי לציין את פרמטר הבקשה accessPolicyVersion.
מאפייני התנאים
אפשר להגדיר תנאי IAM במשאבי BigQuery, על סמך המאפיינים הבאים:
-
request.time: השעה שבה המשתמש מנסה לגשת למשאב ב-BigQuery. פרטים נוספים ודוגמאות מופיעים במאמר בנושא מאפיין תאריך/שעה. -
resource.name: הנתיב של משאב BigQuery. לעיון בפורמט, אפשר לעיין בטבלאות שבמאמר פורמטים של מאפיינים. -
resource.type: סוג המשאב ב-BigQuery. לעיון בפורמט, אפשר לעיין בטבלאות שבמאמר פורמטים של מאפיינים. -
resource.service: השירות שמשמש את מקור הנתונים ב-BigQuery. Google Cloud לעיון בפורמט, אפשר לעיין בטבלאות שבמאמר בנושא פורמטים של מאפיינים. -
resource.tags: התגים שמצורפים למשאב BigQuery. התגים נתמכים רק במשאבים של מערכי נתונים, טבלאות ותצוגות מפורטות ב-BigQuery. למידע על הפורמט, אפשר לעיין בטבלאות שבקטע פורמטים של מאפיינים ובמאמרי העזרה של IAM.
פורמטים של מאפיינים
כשיוצרים תנאים למערכי נתונים ב-BigQuery, צריך להשתמש בפורמטים הבאים:
| מאפיין | ערך |
|---|---|
resource.type |
bigquery.googleapis.com/Dataset |
resource.name |
projects/PROJECT_ID/datasets/DATASET_ID |
resource.service |
bigquery.googleapis.com |
resource.tags |
תמיכה בערכים hasTagKey, hasTagKeyId, matchTag ו-matchTagId. מידע נוסף זמין במאמר תגי משאבים. |
כשיוצרים תנאים לטבלאות ולתצוגות מפורטות של BigQuery, צריך להשתמש בפורמטים הבאים:
| מאפיין | ערך |
|---|---|
resource.type |
bigquery.googleapis.com/Table |
resource.name |
projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_ID |
resource.service |
bigquery.googleapis.com |
resource.tags |
תמיכה בערכים hasTagKey, hasTagKeyId, matchTag ו-matchTagId. מידע נוסף זמין במאמר תגי משאבים. |
כשיוצרים תנאים לשגרות ב-BigQuery, משתמשים בפורמטים הבאים:
| מאפיין | ערך |
|---|---|
resource.type |
bigquery.googleapis.com/Routine |
resource.name |
projects/PROJECT_ID/datasets/DATASET_ID/routines/ROUTINE_ID |
resource.service |
bigquery.googleapis.com |
כשיוצרים תנאים למודלים של BigQuery, משתמשים בפורמטים הבאים:
| מאפיין | ערך |
|---|---|
resource.type |
bigquery.googleapis.com/Model |
resource.name |
projects/PROJECT_ID/datasets/DATASET_ID/models/MODEL_ID |
resource.service |
bigquery.googleapis.com |
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט שמכיל את המשאבים שרוצים להעניק להם גישה -
DATASET_ID: המזהה של מערך הנתונים שרוצים להעניק לו גישה -
TABLE_ID: המזהה של הטבלה או התצוגה שרוצים להעניק להם גישה -
ROUTINE_ID: המזהה של השגרה שרוצים להעניק לה גישה -
MODEL_ID: המזהה של המודל שרוצים להעניק לו גישה
שיטות מומלצות לשימוש בתנאים
כשיוצרים תנאים ב-BigQuery, מומלץ לפעול לפי השיטות המומלצות הבאות:
- מומלץ להשתמש בתנאים חיוביים עבור
resource.type,resource.nameו-resource.serviceכדי לשפר את הדיוק. מכיוון שסוגים לא נתמכים מיוצגים על ידי מחרוזת ריקה, תנאים שליליים עשויים להתאים למגוון רחב של משאבים. מידע נוסף מופיע במאמר בנושא תנאים שליליים. - תנאי IAM ברמת מערך הנתונים צריכים לשמש רק לתפקידים שחלים על משאבים בתוך מערך הנתונים, כמו טבלאות, תצוגות, מודלים ושגרות.
אין להשתמש בהם כדי להעניק תפקידים שפועלים ברמת מערך הנתונים או הפרויקט, כמו
bigquery.userאוbigquery.jobUser. - אל תשתמשו בתנאי
resource.type == 'bigquery.googleapis.com/Dataset'במדיניות ברמת מערך הנתונים, כי הוא לא משפיע על ההרשאה. המאפיין הזה נועד לשלוט בגישה למשאבים של מערכי נתונים משניים, כמו טבלאות, תצוגות, שגרות ומודלים. - כדאי לכלול את
resource.type, אתresource.nameואתresource.serviceבתנאי, גם אם רמת הפירוט הזו לא נחוצה. השיטה הזו עוזרת לשמור על התנאים שלכם כשמשאבים בתהליך העבודה משתנים, כדי שמשאבים אחרים לא ייכללו בעתיד בטעות. - כשמעניקים הרשאות, חשוב לכלול את קבוצת ההרשאות המצומצמת ביותר האפשרית כדי לוודא שלא מעניקים בטעות גישה רחבה מדי.
- חשוב להשתמש ב-
resource.name.startsWithבזהירות. נתיבי טבלה ותצוגה ב-BigQuery מתחילים בקידומת של מזהה פרויקט האב ומזהה מערך הנתונים. תנאים לא מספיק ספציפיים עלולים להעניק יותר מדי גישה. עם זאת, אפשר להשתמש במאפייןresource.name.startsWithכדי לאפשר למשתמשים להריץ שאילתות עם תווים כלליים בטבלאות. לדוגמה, גישה שניתנה באמצעות התנאיresource.name.startsWith("projects/my_project/datasets/my_dataset/tables/table_prefix")מאפשרת למשתמשים להריץ את השאילתהSELECT * FROM my_dataset.table_prefix*. - אל תוסיפו תנאים למשאבי BigQuery מלבד מערכי נתונים, טבלאות, תצוגות, שגרות ומודלים.
- מוודאים שאתם מעניקים את ההרשאות הנכונות למשאב הנכון. לדוגמה, את ההרשאה לרישום משאבים (
bigquery.RESOURCE.list) צריך להעניק ברמת ההורה, אבל את ההרשאה למחיקת משאבים (bigquery.RESOURCE.delete) צריך להעניק ברמת המשאב. כדי למחוק מערך נתונים, שכולל גם את כל המשאבים שכלולים בו, צריך הרשאות למחיקת טבלאות, מודלים ושגרות במערך הנתונים. - חשוב לדעת שקובצי snapshot של טבלאות ומסע בזמן לא משפיעים על ההרשאות.
תנאים שליליים
תנאים שליליים כמו resource.name != resource עלולים להעניק גישה רחבה מדי בטעות. למשאבי BigQuery שלא נתמכים יש מאפייני משאב ריקים, כלומר הם תואמים לכל התנאים השליליים. יכול להיות שגם משאבים בשירותים מחוץ ל-BigQuery יתאימו לתנאים השליליים.
בנוסף, תנאים שליליים יוצרים בעיות כשמשתמשים מריצים שאילתות עם תווים כלליים. לדוגמה, נניח את התנאי השלילי
resource.name != /projects/my_project/datasets/my_dataset/tables/secret. התנאי הזה נראה כאילו הוא מעניק גישה לכל המשאבים, מלבד לטבלה בשם secret. עם זאת, המשתמש עדיין יכול לשלוח שאילתה לטבלה הזו באמצעות שאילתת wildcard, כמו SELECT * from my_project.my_dataset.secre*;.
בנוסף, תנאים שליליים בטבלאות, בשגרה ובמודלים עשויים לתת גישה מתירנית מדי למערכי הנתונים של ההורה. יכול להיות שהמשתמשים יוכלו למחוק את המשאבים האלה, כי הרשאות המחיקה מנוהלות ברמת מערך הנתונים.
מגבלות
- אי אפשר להוסיף מענקים של תצוגה מורשית, תרחיש מורשה או מערך נתונים מורשה באמצעות תנאי IAM.
- אם משתמשים ב-
accessPolicyVersionלא תואם בזמן צפייה במשאב עם תנאים, יכול להיות שהקישורים יכילו אתwithcondואחריו ערך גיבוב (hash). מידע נוסף זמין במאמר בנושא פתרון בעיות שקשורות ל-withcondבכללי מדיניות ובקישורי תפקידים. - משתמשים עם גישה מותנית למערך נתונים או לטבלה לא יכולים לשנות את ההרשאות למשאב הזה דרך מסוף Google Cloud . אפשר לשנות הרשאות רק באמצעות כלי bq ו-BigQuery API.
- אין תמיכה בבקרת גישה ברמת השורה וברמת העמודה ישירות דרך תנאי IAM. עם זאת, משתמש עם גישה מותנית יכול להעניק לעצמו את התפקיד BigQuery Admin (
roles/bigquery.admin) בטבלה, ואז לשנות את מדיניות הגישה לשורות ולעמודות. - יכול להיות שיחלפו עד חמש דקות לפני שהשינויים במדיניות IAM ייכנסו לתוקף.
- יכול להיות שמשתמשים עם גישה מותנית לא יוכלו לשלוח שאילתות לתצוגות
INFORMATION_SCHEMA. - משתמשים שיש להם גישה מותנית לטבלה לא יכולים להריץ פונקציות של תו כללי לחיפוש בטבלאות.
דוגמאות
הנה כמה דוגמאות לתרחישי שימוש בתנאי IAM ב-BigQuery.
הענקת הרשאת קריאה לטבלה ספציפית
בדוגמה הזו, לתפקיד 'צפייה בנתונים ב-BigQuery' cloudysanfrancisco@gmail.com ניתנות הרשאות לטבלה table_1 במערך הנתונים dataset_1. המשתמש עם התפקיד הזה יכול לשלוח שאילתות לטבלה ולגשת אליה דרך הכלי bq. המשתמש לא יכול לראות את הטבלה במסוף Google Cloud כי אין לו הרשאת bigquery.tables.list בערכת הנתונים.
{ "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.dataViewer, "condition": { "title": "Table dataset_1.table_1", "description": "Allowed to read table with name table_1 in dataset_1 dataset", "expression": resource.name == projects/project_1/datasets/dataset_1/tables/table_1 && resource.type == bigquery.googleapis.com/Table } }
הענקת גישה לרשימה למערך נתונים ספציפי
בדוגמה הזו, לתפקיד cloudysanfrancisco@gmail.com 'צופה במטא-נתונים של BigQuery' ניתנות הרשאות במערך הנתונים dataset_2. המשתמש עם התפקיד הזה יכול לראות את כל המשאבים במערך הנתונים, אבל הוא לא יכול להריץ שאילתות על המשאבים האלה.
{ "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.metadataViewer, "condition": { "title": "Dataset dataset_2", "description": "Allowed to list resources in dataset_2 dataset", "expression": resource.name == projects/project_2/datasets/dataset_2 && resource.type == bigquery.googleapis.com/Dataset } }
הענקת גישת בעלים לכל הטבלאות בכל מערכי הנתונים עם קידומת ספציפית
בדוגמה הזו, ההרשאה BigQuery Data Owner (הבעלים של נתוני BigQuery) ניתנת למשתמש cloudysanfrancisco@gmail.com בכל הטבלאות בכל מערכי הנתונים שמתחילים בקידומת public_:
{ "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.dataOwner, "condition": { "title": "Tables public_", "description": "Allowed owner access to tables in datasets with public_ prefix", "expression": resource.name.startsWith("projects/project_3/datasets/public_") && resource.type == bigquery.googleapis.com/Table } }
הענקת גישת בעלים לכל הטבלאות, המודלים והשגרות בכל מערכי הנתונים שיש להם קידומת ספציפית
בדוגמה הזו, ניתנת ל-cloudysanfrancisco@gmail.com הרשאה של בעלי נתונים ב-BigQuery לכל הטבלאות, המודלים והשגרות בכל מערכי הנתונים שמתחילים בקידומת general_:
{ "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.dataOwner, "condition": { "title": "Tables general_", "description": "Allowed owner access to tables in datasets with general_ prefix", "expression": resource.name.startsWith("projects/project_4/datasets/general_") && resource.type == bigquery.googleapis.com/Table } }, { "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.dataOwner, "condition": { "title": "Models general_", "description": "Allowed owner access to models in datasets with general_ prefix", "expression": resource.name.startsWith("projects/project_4/datasets/general_") && resource.type == bigquery.googleapis.com/Model } }, { "members": [cloudysanfrancisco@gmail.com], "role": roles/bigquery.dataOwner, "condition": { "title": "Routines general_", "description": "Allowed owner access to routines in datasets with general_ prefix", "expression": resource.name.startsWith("projects/project_4/datasets/general_") && resource.type == bigquery.googleapis.com/Routine } }
המאמרים הבאים
- מידע נוסף על הגדרת גישה זמנית באמצעות תנאי IAM
- מידע נוסף על הגדרת גישה מבוססת משאבים באמצעות תנאי IAM