פתרון בעיות בהרשאות IAM ב-BigQuery

במאמר הזה מוסבר איך לפתור בעיות בהרשאות של ניהול זהויות והרשאות גישה (IAM) ב-BigQuery. בעיות בהרשאות IAM בדרך כלל גורמות לשגיאות Access Denied כמו השגיאות הבאות:

  • Access Denied: Project PROJECT_ID: User does not have bigquery.jobs.create permission in project PROJECT_ID.
  • Access Denied: Project PROJECT_ID: User does not have bigquery.datasets.get permission on dataset DATASET.
  • User does not have permission to query table PROJECT_ID:DATASET.TABLE.
  • Access Denied: Table PROJECT_ID:DATASET.TABLE: User does not have permission to query table PROJECT_ID:DATASET.TABLE, or perhaps it does not exist.
  • Access Denied: User PRINCIPAL does not have permission to perform bigquery.tables.getData on resource 'projects/PROJECT_ID/datasets/DATASET/tables/TABLE'.

לפני שמתחילים

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

איסוף מידע על הבעיה

השלב הראשון בפתרון בעיות שקשורות לגישה למשאבים הוא לזהות את ההרשאה שחסרה, את חשבון המשתמש ב-IAM שנדחתה הגישה שלו ואת המשאב שאליו חשבון המשתמש ניסה לגשת.

קבלת מידע מהשגיאה או מהיסטוריית העבודות

כדי לקבל מידע על הישות המורשית, המשאב וההרשאות, בודקים את הפלט מכלי שורת הפקודה של BigQuery, את תגובה מה-API או את BigQuery במסוף Google Cloud .

לדוגמה, אם תנסו להריץ שאילתה בלי הרשאות מספיקות, תוצג שגיאה כמו זו שבהמשך בכרטיסייה Job information בקטע Query results במסוף Google Cloud .

שגיאת דחיית גישה בכרטיסייה 'פרטי המשימה' בקטע 'תוצאות השאילתה'.

בודקים את השגיאה כדי לזהות את הגורם המרכזי, המשאב וההרשאות.

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

קבלת מידע מיומני הביקורת של Cloud

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

  1. נכנסים לדף Logs Explorer במסוף Google Cloud .

    כניסה לדף Logs Explorer

    לחלופין, בתפריט הניווט, בוחרים באפשרות Monitoring > Logs Explorer.

  2. בכלי Logs Explorer, בוחרים באפשרות Project logs (יומני פרויקט) בהגדרת ההיקף של היומנים.

  3. בחלון השאילתה, מזינים את השאילתה הבאה כדי לקבל שגיאות שקשורות להרשאות מיומני הגישה לנתונים ב-BigQuery:

    resource.type="bigquery_resource" AND
    logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access" AND
    protoPayload.status.message:"Access Denied" OR
    protoPayload.status.message:"Permission denied" OR
    protoPayload.status.code=7

    מחליפים את PROJECT_ID במזהה הפרויקט.

  4. בתוצאות השאילתה, מרחיבים את רשומת היומן שמתאימה לפעולה שנכשלה.

  5. בקטע protoPayload, מרחיבים את המערך authorizationInfo ואז מרחיבים כל צומת במערך authorizationInfo.

    המערך authorizationInfo מציג כל בדיקת הרשאה שבוצעה במהלך קריאה ל-API.

  6. כדי לראות את הסיבה לשגיאה, מחפשים את הרשומה granted: false. granted: false הרשומה כוללת את הפרטים הבאים:

    • permission: מחרוזת ההרשאה ב-IAM שנבדקה. לדוגמה, bigquery.tables.getData.
    • resource: השם המוגדר במלואו של המשאב שהגורם המורשה ניסה לגשת אליו. לדוגמה, projects/myproject/datasets/mydataset/tables/mytable.
    • principalEmail (אם זמין): ההפניה אל ‫protoPayload.authenticationInfo, זהו הגורם שניסה לבצע את הפעולה.

    הקטע authorizationInfo של protoPayload שמציג את ההרשאה, המשאב וכתובת האימייל של חשבון המשתמש.

שימוש בכלי הניתוח למדיניות לצורך מדיניות הרשאות

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

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

כדי להשתמש בכלי הניתוח למדיניות לצורך מדיניות הרשאה, יוצרים שאילתת ניתוח, מציינים את היקף הניתוח ומריצים את השאילתה.

  1. נכנסים לדף כלי הניתוח למדיניות במסוף Google Cloud .

    לכלי הניתוח למדיניות

    לחלופין, בתפריט הניווט, בוחרים באפשרות IAM ואדמין > כלי הניתוח למדיניות.

  2. לוחצים על יצירת שאילתה מותאמת אישית.

  3. בדף Configure your query, מזינים את המידע שאספתם קודם:

    1. בקטע Select the scope, בשדה Select query scope, מוודאים שהפרויקט הנוכחי מופיע או לוחצים על Browse כדי לבחור משאב אחר.

    2. בקטע Set the query parameters (הגדרת פרמטרים של שאילתה), בשדה Parameter 1 (פרמטר 1), בוחרים באפשרות Principal (חשבון משתמש), ובשדה Principal (חשבון משתמש), מזינים את כתובת האימייל של המשתמש, הקבוצה או חשבון השירות.

    3. לוחצים על הוספת פרמטר.

    4. בקטע פרמטר 2, בוחרים באפשרות הרשאה, בשדה הרשאה לוחצים על בחירה, בוחרים את ההרשאה של BigQuery ואז לוחצים על הוספה. לדוגמה, בוחרים באפשרות bigquery.tables.getData.

    5. לוחצים על הוספת פרמטר.

    6. בשדה Parameter 3, בוחרים באפשרות Resource, ובשדה Resource מזינים את שם המשאב המוגדר במלואו. שם המשאב חייב לכלול את קידומת השירות, כמו בדוגמאות הבאות:

      • פרויקט BigQuery: //cloudresourcemanager.googleapis.com/projects/PROJECT_ID
      • מערך נתונים של BigQuery: //bigquery.googleapis.com/projects/PROJECT_ID/datasets/DATASET
      • טבלה ב-BigQuery: //bigquery.googleapis.com/projects/PROJECT/datasets/DATASET/tables/TABLE
  4. בחלונית Custom query (שאילתה בהתאמה אישית), לוחצים על Analyze > Run query (ניתוח > הפעלת שאילתה).

  5. בודקים את תוצאות השאילתה. התוצאה יכולה להיות אחת מהאפשרויות הבאות:

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

מציאת התפקיד הנכון ב-IAM שמעניק את ההרשאות הנדרשות

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

אם בארגון שלכם משתמשים בתפקידים בהתאמה אישית, תוכלו להציג רשימה של כל התפקידים בהתאמה אישית שנוצרו בפרויקט או בארגון כדי למצוא את התפקיד הנכון. לדוגמה, במסוף Google Cloud , בדף תפקידים, אפשר לסנן את הרשימה לפי סוג:בהתאמה אישית כדי לראות רק תפקידים בהתאמה אישית.

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

  1. פותחים את הקטע בנושא הרשאות BigQuery בדף בנושא תפקידים והרשאות של IAM ב-BigQuery.

  2. בסרגל החיפוש Enter a permission, מזינים את ההרשאה שאוחזרה מהודעת השגיאה, מהיסטוריית העבודות או מיומני הביקורת. לדוגמה, bigquery.tables.getData.

    בתוצאות החיפוש מוצגים כל התפקידים המוגדרים מראש ב-BigQuery שמעניקים את ההרשאה.

  3. החלת העיקרון של הרשאות מינימליות: ברשימת התפקידים, בוחרים את התפקיד עם ההרשאות המינימליות שמעניק את ההרשאות הנדרשות. לדוגמה, אם חיפשתם bigquery.tables.getData כדי לתת את היכולת לשלוח שאילתות לנתוני הטבלה, התפקיד עם ההרשאות הכי מצומצמות שמאפשר את ההרשאה הזו הוא BigQuery Data Viewer.

  4. נותנים לישות המורשית את התפקיד המתאים. במאמר בקרת גישה למשאבים באמצעות IAM מוסבר איך מעניקים תפקיד IAM למשאב BigQuery.

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