שליטה בגישה למשאבים באמצעות IAM

במאמר הזה מוסבר איך להציג, להעניק ולבטל הרשאות גישה למערכי נתונים של BigQuery ולמשאבים בתוך מערכי נתונים: טבלאות, תצוגות ושגרות. למרות שמודלים הם גם משאבים ברמת מערך הנתונים, אי אפשר להעניק גישה למודלים ספציפיים באמצעות תפקידי IAM.

אפשר להעניק גישה למשאבים ב- Cloud de Confiance by S3NS באמצעות כללי מדיניות ההרשאה, שנקראים גם כללי מדיניות של ניהול זהויות והרשאות גישה (IAM) ומצורפים למשאבים. אפשר לצרף רק מדיניות הרשאה אחת לכל משאב. מדיניות ההרשאה שולטת בגישה למשאב עצמו, וכן לכל הצאצאים של המשאב שיורשים את מדיניות ההרשאה.

מידע נוסף על מדיניות ההרשאות מופיע במאמר מבנה המדיניות במסמכי העזרה של IAM.

במסמך הזה מניחים שיש לכם ידע בניהול זהויות והרשאות גישה (IAM) ב- Cloud de Confiance by S3NS.

מגבלות

  • רשימות שגרתיות של בקרת גישה (ACL) לא נכללות בשגרה משוכפלת.
  • שגרות בתוך מערכי נתונים חיצוניים או מקושרים לא תומכות באמצעי בקרה לגישה.
  • אי אפשר להשתמש באמצעי בקרה לגישה בטבלאות שנמצאות במערכי נתונים חיצוניים או מקושרים.
  • אי אפשר להגדיר אמצעי בקרת גישה לתרחישים באמצעות Terraform.
  • אי אפשר להגדיר אמצעי בקרה לגישה לתרחישים באמצעות Google Cloud SDK.
  • אי אפשר להגדיר בקרת גישה שגרתית באמצעות שפת בקרת הנתונים (DCL) ב-BigQuery.
  • ב-Data Catalog אין תמיכה באמצעי בקרה שגרתיים על הגישה. אם משתמש העניק גישה ברמת השגרה בתנאי, הוא לא יראה את השגרות שלו בחלונית הצדדית של BigQuery. כפתרון עקיף, אפשר להעניק גישה ברמת מערך הנתונים.
  • בתצוגה INFORMATION_SCHEMA.OBJECT_PRIVILEGES לא מוצגים אמצעי בקרה לגישה לשגרה.

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

מקצים תפקידים של ניהול זהויות והרשאות גישה (IAM) שמעניקים למשתמשים את ההרשאות הדרושות לביצוע כל משימה שמופיעה במאמר הזה.

התפקידים הנדרשים

כדי לקבל את ההרשאות שנדרשות לשינוי מדיניות IAM למשאבים, צריך לבקש מהאדמין להקצות לכם את תפקיד ה-IAM‏ BigQuery Data Owner (הבעלים של נתוני BigQuery) ‏(roles/bigquery.dataOwner) בפרויקט. להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

זהו תפקיד שמוגדר מראש וכולל את ההרשאות שנדרשות לשינוי מדיניות IAM למשאבים. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:

ההרשאות הנדרשות

כדי לשנות את כללי מדיניות ה-IAM של משאבים, נדרשות ההרשאות הבאות:

  • כדי לקבל את מדיניות הגישה של מערך נתונים: bigquery.datasets.get
  • כדי להגדיר מדיניות גישה למערך נתונים: bigquery.datasets.update
  • כדי לקבל את מדיניות הגישה של מערך נתונים (Cloud de Confiance במסוף בלבד): bigquery.datasets.getIamPolicy
  • כדי להגדיר מדיניות גישה למערך נתונים (במסוף בלבד): bigquery.datasets.setIamPolicy
  • כדי לקבל את המדיניות של טבלה או תצוגה: bigquery.tables.getIamPolicy
  • כדי להגדיר מדיניות לטבלה או לתצוגה: bigquery.tables.setIamPolicy
  • כדי לקבל את מדיניות הגישה של שגרה: bigquery.routines.getIamPolicy
  • כדי להגדיר מדיניות גישה לתרחיש: bigquery.routines.setIamPolicy
  • כדי ליצור משימות בכלי bq או משימות SQL ב-BigQuery (אופציונלי): bigquery.jobs.create

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

עבודה עם אמצעי בקרה על גישה למערך נתונים

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

הענקת גישה למערך נתונים

אי אפשר להעניק גישה למערך נתונים כשיוצרים אותו באמצעות ממשק האינטרנט של BigQuery או כלי שורת הפקודה של BigQuery. קודם צריך ליצור את מערך הנתונים ואז להעניק לו גישה. ה-API מאפשר להעניק גישה במהלך יצירת מערך נתונים באמצעות קריאה לשיטת datasets.insert עם משאב מוגדר של מערך נתונים.

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

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

כדי להעניק לתפקיד IAM גישה למערך נתונים בלי להשתמש בתנאים, בוחרים באחת מהאפשרויות הבאות:

המסוף

  1. עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על כלי הניתוחים:

    כפתור מודגש לחלונית הסייר.

    אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.

  3. בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ואז בוחרים מערך נתונים.

  4. לוחצים על שיתוף > הרשאות.

  5. לוחצים על Add principal.

  6. בשדה New principals, מזינים חשבון משתמש.

  7. ברשימה Select a role, בוחרים תפקיד מוגדר מראש או תפקיד בהתאמה אישית.

  8. לוחצים על Save.

  9. כדי לחזור לפרטי מערך הנתונים, לוחצים על סגירה.

SQL

כדי להעניק לישויות גישה למערכי נתונים, משתמשים בGRANT הצהרת DCL:

  1. במסוף Cloud de Confiance , עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. מזינים את ההצהרה הבאה בעורך השאילתות:

    GRANT `ROLE_LIST`
    ON SCHEMA RESOURCE_NAME
    TO "USER_LIST"

    מחליפים את מה שכתוב בשדות הבאים:

    • ROLE_LIST: תפקיד או רשימה של תפקידים מופרדים בפסיקים שרוצים להקצות
    • RESOURCE_NAME: השם של מערך הנתונים שרוצים להעניק לו גישה
    • USER_LIST: רשימה מופרדת בפסיקים של משתמשים שהתפקיד מוקצה להם

      רשימת הפורמטים התקינים זמינה במאמר user_list.

  3. לוחצים על הפעלה.

מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.

בדוגמה הבאה מוקצית ל-myDataset ההרשאה BigQuery Data Viewer:

GRANT `roles/bigquery.dataViewer`
ON SCHEMA `myProject`.myDataset
TO "user:user@example.com", "user:user2@example.com"

BQ

  1. In the Cloud de Confiance console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Cloud de Confiance console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. כדי לכתוב את פרטי מערך הנתונים הקיים (כולל אמצעי בקרת הגישה) לקובץ JSON, משתמשים בפקודה bq show:

    bq show \
        --format=prettyjson \
        PROJECT_ID:DATASET > PATH_TO_FILE

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט
    • DATASET: השם של מערך הנתונים
    • PATH_TO_FILE: הנתיב לקובץ ה-JSON במחשב המקומי
  3. מבצעים שינויים בקטע access בקובץ ה-JSON. אפשר להוסיף לכל אחת מהרשומות של specialGroup את הערכים: projectOwners,‏ projectWriters,‏ projectReaders ו-allAuthenticatedUsers. אפשר גם להוסיף את אחד מהערכים הבאים: userByEmail, groupByEmail ו-domain.

    לדוגמה, הקטע access בקובץ JSON של מערך נתונים ייראה כך:

    {
     "access": [
      {
       "role": "READER",
       "specialGroup": "projectReaders"
      },
      {
       "role": "WRITER",
       "specialGroup": "projectWriters"
      },
      {
       "role": "OWNER",
       "specialGroup": "projectOwners"
      },
      {
       "role": "READER",
       "specialGroup": "allAuthenticatedUsers"
      },
      {
       "role": "READER",
       "domain": "domain_name"
      },
      {
       "role": "WRITER",
       "userByEmail": "user_email"
      },
      {
       "role": "READER",
       "groupByEmail": "group_email"
      }
     ],
     ...
    }
  4. כשמסיימים לערוך, משתמשים בפקודה bq update וכוללים את קובץ ה-JSON באמצעות הדגל --source. אם מערך הנתונים נמצא בפרויקט שאינו פרויקט ברירת המחדל שלכם, צריך להוסיף את מזהה הפרויקט לשם מערך הנתונים בפורמט הבא: PROJECT_ID:DATASET.

      bq update 
    --source PATH_TO_FILE
    PROJECT_ID:DATASET

  5. כדי לאמת את השינויים בבקרת הגישה, משתמשים שוב בפקודה bq show בלי לכתוב את המידע לקובץ:

    bq show --format=prettyjson PROJECT_ID:DATASET
  6. Terraform

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

    הגדרת מדיניות הגישה למערך נתונים

    בדוגמה הבאה מוצג אופן השימוש בgoogle_bigquery_dataset_iam_policy resource כדי להגדיר את מדיניות IAM עבור מערך הנתונים mydataset. הפעולה הזו מחליפה כל מדיניות קיימת שכבר צורפה למערך הנתונים:

    # This file sets the IAM policy for the dataset created by
    # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf.
    # You must place it in the same local directory as that main.tf file,
    # and you must have already applied that main.tf file to create
    # the "default" dataset resource with a dataset_id of "mydataset".
    
    data "google_iam_policy" "iam_policy" {
      binding {
        role = "roles/bigquery.admin"
        members = [
          "user:user@example.com",
        ]
      }
      binding {
        role = "roles/bigquery.dataOwner"
        members = [
          "group:data.admin@example.com",
        ]
      }
      binding {
        role = "roles/bigquery.dataEditor"
        members = [
          "serviceAccount:bqcx-1234567891011-12a3@gcp-sa-bigquery-condel.s3ns-system.iam.gserviceaccount.com",
        ]
      }
    }
    
    resource "google_bigquery_dataset_iam_policy" "dataset_iam_policy" {
      dataset_id  = google_bigquery_dataset.default.dataset_id
      policy_data = data.google_iam_policy.iam_policy.policy_data
    }

    הגדרת חברות בתפקיד בקבוצת נתונים

    בדוגמה הבאה אפשר לראות איך משתמשים במשאב google_bigquery_dataset_iam_binding כדי להגדיר חברות בתפקיד מסוים עבור מערך הנתונים mydataset. הפעולה הזו תחליף את החברות הקיימת בתפקיד הזה. תפקידים אחרים במדיניות IAM של מערך הנתונים נשמרים:

    # This file sets membership in an IAM role for the dataset created by
    # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf.
    # You must place it in the same local directory as that main.tf file,
    # and you must have already applied that main.tf file to create
    # the "default" dataset resource with a dataset_id of "mydataset".
    
    resource "google_bigquery_dataset_iam_binding" "dataset_iam_binding" {
      dataset_id = google_bigquery_dataset.default.dataset_id
      role       = "roles/bigquery.jobUser"
    
      members = [
        "user:user@example.com",
        "group:group@example.com"
      ]
    }

    הגדרת חברות בתפקיד עבור ישות מורשית יחידה

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

    # This file adds a member to an IAM role for the dataset created by
    # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf.
    # You must place it in the same local directory as that main.tf file,
    # and you must have already applied that main.tf file to create
    # the "default" dataset resource with a dataset_id of "mydataset".
    
    resource "google_bigquery_dataset_iam_member" "dataset_iam_member" {
      dataset_id = google_bigquery_dataset.default.dataset_id
      role       = "roles/bigquery.user"
      member     = "user:user@example.com"
    }

    כדי להחיל את ההגדרות של Terraform בפרויקט ב- Cloud de Confiance , מבצעים את השלבים בקטעים הבאים.

    הכנת Cloud Shell

    1. מפעילים את Cloud Shell.
    2. מגדירים את פרויקט ברירת המחדל שבו רוצים להחיל את ההגדרות של Terraform. Cloud de Confiance

      תצטרכו להריץ את הפקודה הזו רק פעם אחת לכל פרויקט, ותוכלו לעשות זאת בכל ספרייה.

      export GOOGLE_CLOUD_PROJECT=PROJECT_ID

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

    הכנת הספרייה

    לכל קובץ תצורה של Terraform צריכה להיות ספרייה משלו (שנקראת גם מודול ברמה הבסיסית).

    1. יוצרים ספרייה חדשה ב-Cloud Shell ובה יוצרים קובץ חדש. שם הקובץ חייב לכלול את הסיומת .tf, למשל main.tf. במדריך הזה, הקובץ נקרא main.tf.
      mkdir DIRECTORY && cd DIRECTORY && touch main.tf
    2. אם אתם עוקבים אחרי המדריך, תוכלו להעתיק את הקוד לדוגמה בכל קטע או שלב.

      מעתיקים את הקוד לדוגמה בקובץ main.tf החדש שיצרתם.

      לחלופין, אפשר גם להעתיק את הקוד מ-GitHub. כדאי לעשות את זה כשקטע הקוד של Terraform הוא חלק מפתרון מקצה לקצה.

    3. בודקים את הפרמטרים לדוגמה ומשנים אותם בהתאם לסביבה שלכם.
    4. שומרים את השינויים.
    5. מפעילים את Terraform. צריך לעשות זאת רק פעם אחת לכל ספרייה.
      terraform init

      אופציונלי: תוכלו לכלול את האפשרות -upgrade, כדי להשתמש בגרסה העדכנית ביותר של הספק של Google:

      terraform init -upgrade

    החלה של השינויים

    1. בודקים את ההגדרות ומוודאים שהמשאבים שמערכת Terraform תיצור או תעדכן תואמים לציפיות שלכם:
      terraform plan

      מתקנים את ההגדרות לפי הצורך.

    2. מריצים את הפקודה הבאה ומזינים yes בהודעה שמופיעה, כדי להחיל את הגדרות Terraform:
      terraform apply

      ממתינים עד שב-Terraform תוצג ההודעה "Apply complete!‎".

    3. פותחים את Cloud de Confiance הפרויקט כדי לראות את התוצאות. במסוף Cloud de Confiance , נכנסים למשאבים בממשק המשתמש כדי לוודא שהם נוצרו או עודכנו ב-Terraform.

    API

    כדי להחיל אמצעי בקרה על הגישה כשיוצרים את מערך הנתונים, קוראים ל-method‏ datasets.insert עם משאב מוגדר של מערך נתונים. כדי לעדכן את בקרות הגישה, צריך לבצע קריאה ל-method‏ datasets.patch ולהשתמש במאפיין access במשאב Dataset.

    השיטה המועדפת לעדכון הרשאות גישה היא datasets.patch, כי השיטה datasets.update מחליפה את כל משאב מערך הנתונים.

    Go

    לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Goהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Go API.

    כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

    לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

    כדי להגדיר את רשימת הגישה החדשה, מוסיפים את הרשומה החדשה לרשימה הקיימת עם DatasetMetadataToUpdate type . לאחר מכן קוראים לפונקציה dataset.Update() כדי לעדכן את הנכס.
    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/bigquery"
    )
    
    // grantAccessToDataset creates a new ACL conceding the READER role to the group "example-analyst-group@google.com"
    // For more information on the types of ACLs available see:
    // https://cloud.google.com/storage/docs/access-control/lists
    func grantAccessToDataset(w io.Writer, projectID, datasetID string) error {
    	// TODO(developer): uncomment and update the following lines:
    	// projectID := "my-project-id"
    	// datasetID := "mydataset"
    
    	ctx := context.Background()
    
    	// Create BigQuery handler.
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	// Create dataset handler
    	dataset := client.Dataset(datasetID)
    
    	// Get metadata
    	meta, err := dataset.Metadata(ctx)
    	if err != nil {
    		return fmt.Errorf("bigquery.Dataset.Metadata: %w", err)
    	}
    
    	// Find more details about BigQuery Entity Types here:
    	// https://pkg.go.dev/cloud.google.com/go/bigquery#EntityType
    	//
    	// Find more details about BigQuery Access Roles here:
    	// https://pkg.go.dev/cloud.google.com/go/bigquery#AccessRole
    
    	entityType := bigquery.GroupEmailEntity
    	entityID := "example-analyst-group@google.com"
    	roleType := bigquery.ReaderRole
    
    	// Append a new access control entry to the existing access list.
    	update := bigquery.DatasetMetadataToUpdate{
    		Access: append(meta.Access, &bigquery.AccessEntry{
    			Role:       roleType,
    			EntityType: entityType,
    			Entity:     entityID,
    		}),
    	}
    
    	// Leverage the ETag for the update to assert there's been no modifications to the
    	// dataset since the metadata was originally read.
    	meta, err = dataset.Update(ctx, update, meta.ETag)
    	if err != nil {
    		return err
    	}
    
    	fmt.Fprintf(w, "Details for Access entries in dataset %v.\n", datasetID)
    	for _, access := range meta.Access {
    		fmt.Fprintln(w)
    		fmt.Fprintf(w, "Role: %s\n", access.Role)
    		fmt.Fprintf(w, "Entities: %v\n", access.Entity)
    	}
    
    	return nil
    }
    

    Java

    לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Javaהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Java API.

    כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

    לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

    import com.google.cloud.bigquery.Acl;
    import com.google.cloud.bigquery.Acl.Entity;
    import com.google.cloud.bigquery.Acl.Group;
    import com.google.cloud.bigquery.Acl.Role;
    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.Dataset;
    import com.google.cloud.bigquery.DatasetId;
    import java.util.ArrayList;
    import java.util.List;
    
    public class GrantAccessToDataset {
    
      public static void main(String[] args) {
        // TODO(developer): Replace these variables before running the sample.
        // Project and dataset from which to get the access policy
        String projectId = "MY_PROJECT_ID";
        String datasetName = "MY_DATASET_NAME";
        // Group to add to the ACL
        String entityEmail = "group-to-add@example.com";
    
        grantAccessToDataset(projectId, datasetName, entityEmail);
      }
    
      public static void grantAccessToDataset(
          String projectId, String datasetName, String entityEmail) {
        try {
          // Initialize client that will be used to send requests. This client only needs to be created
          // once, and can be reused for multiple requests.
          BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    
          // Create datasetId with the projectId and the datasetName.
          DatasetId datasetId = DatasetId.of(projectId, datasetName);
          Dataset dataset = bigquery.getDataset(datasetId);
    
          // Create a new Entity with the corresponding type and email
          // "user-or-group-to-add@example.com"
          // For more information on the types of Entities available see:
          // https://cloud.google.com/java/docs/reference/google-cloud-bigquery/latest/com.google.cloud.bigquery.Acl.Entity
          // and
          // https://cloud.google.com/java/docs/reference/google-cloud-bigquery/latest/com.google.cloud.bigquery.Acl.Entity.Type
          Entity entity = new Group(entityEmail);
    
          // Create a new ACL granting the READER role to the group with the entity email
          // "user-or-group-to-add@example.com"
          // For more information on the types of ACLs available see:
          // https://cloud.google.com/storage/docs/access-control/lists
          Acl newEntry = Acl.of(entity, Role.READER);
    
          // Get a copy of the ACLs list from the dataset and append the new entry.
          List<Acl> acls = new ArrayList<>(dataset.getAcl());
          acls.add(newEntry);
    
          // Update the ACLs by setting the new list.
          Dataset updatedDataset = bigquery.update(dataset.toBuilder().setAcl(acls).build());
          System.out.println(
              "ACLs of dataset \""
                  + updatedDataset.getDatasetId().getDataset()
                  + "\" updated successfully");
        } catch (BigQueryException e) {
          System.out.println("ACLs were not updated \n" + e.toString());
        }
      }
    }

    Node.js

    לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Node.jsהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Node.js API.

    כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

    לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

    מגדירים את רשימת הגישה החדשה על ידי הוספת הרשומה החדשה לרשימה הקיימת באמצעות השיטה Dataset#metadata. לאחר מכן קוראים לפונקציה Dataset#setMetadata()‎ כדי לעדכן את המאפיין.
    
    /**
     * TODO(developer): Update and un-comment below lines.
     */
    
    // const datasetId = "my_project_id.my_dataset_name";
    
    // ID of the user or group from whom you are adding access.
    // const entityId = "user-or-group-to-add@example.com";
    
    // One of the "Basic roles for datasets" described here:
    // https://cloud.google.com/bigquery/docs/access-control-basic-roles#dataset-basic-roles
    // const role = "READER";
    
    const {BigQuery} = require('@google-cloud/bigquery');
    
    // Instantiate a client.
    const client = new BigQuery();
    
    // Type of entity you are granting access to.
    // Find allowed allowed entity type names here:
    // https://cloud.google.com/bigquery/docs/reference/rest/v2/datasets#resource:-dataset
    const entityType = 'groupByEmail';
    
    async function grantAccessToDataset() {
      const [dataset] = await client.dataset(datasetId).get();
    
      // The 'access entries' array is immutable. Create a copy for modifications.
      const entries = [...dataset.metadata.access];
    
      // Append an AccessEntry to grant the role to a dataset.
      // Find more details about the AccessEntry object in the BigQuery documentation:
      // https://cloud.google.com/python/docs/reference/bigquery/latest/google.cloud.bigquery.dataset.AccessEntry
      entries.push({
        role,
        [entityType]: entityId,
      });
    
      // Assign the array of AccessEntries back to the dataset.
      const metadata = {
        access: entries,
      };
    
      // Update will only succeed if the dataset
      // has not been modified externally since retrieval.
      //
      // See the BigQuery client library documentation for more details on metadata updates:
      // https://cloud.google.com/nodejs/docs/reference/bigquery/latest
    
      // Update just the 'access entries' property of the dataset.
      await client.dataset(datasetId).setMetadata(metadata);
    
      console.log(
        `Role '${role}' granted for entity '${entityId}' in '${datasetId}'.`
      );
    }

    Python

    לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Pythonהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Python API.

    כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

    לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

    מגדירים את dataset.access_entries המאפיין עם אמצעי הבקרה לגישה למערך נתונים. לאחר מכן קוראים לפונקציה client.update_dataset() כדי לעדכן את הנכס.
    from google.api_core.exceptions import PreconditionFailed
    from google.cloud import bigquery
    from google.cloud.bigquery.enums import EntityTypes
    
    # TODO(developer): Update and uncomment the lines below.
    
    # ID of the dataset to grant access to.
    # dataset_id = "my_project_id.my_dataset"
    
    # ID of the user or group receiving access to the dataset.
    # Alternatively, the JSON REST API representation of the entity,
    # such as the view's table reference.
    # entity_id = "user-or-group-to-add@example.com"
    
    # One of the "Basic roles for datasets" described here:
    # https://cloud.google.com/bigquery/docs/access-control-basic-roles#dataset-basic-roles
    # role = "READER"
    
    # Type of entity you are granting access to.
    # Find allowed allowed entity type names here:
    # https://cloud.google.com/python/docs/reference/bigquery/latest/enums#class-googlecloudbigqueryenumsentitytypesvalue
    entity_type = EntityTypes.GROUP_BY_EMAIL
    
    # Instantiate a client.
    client = bigquery.Client()
    
    # Get a reference to the dataset.
    dataset = client.get_dataset(dataset_id)
    
    # The `access_entries` list is immutable. Create a copy for modifications.
    entries = list(dataset.access_entries)
    
    # Append an AccessEntry to grant the role to a dataset.
    # Find more details about the AccessEntry object here:
    # https://cloud.google.com/python/docs/reference/bigquery/latest/google.cloud.bigquery.dataset.AccessEntry
    entries.append(
        bigquery.AccessEntry(
            role=role,
            entity_type=entity_type,
            entity_id=entity_id,
        )
    )
    
    # Assign the list of AccessEntries back to the dataset.
    dataset.access_entries = entries
    
    # Update will only succeed if the dataset
    # has not been modified externally since retrieval.
    #
    # See the BigQuery client library documentation for more details on `update_dataset`:
    # https://cloud.google.com/python/docs/reference/bigquery/latest/google.cloud.bigquery.client.Client#google_cloud_bigquery_client_Client_update_dataset
    try:
        # Update just the `access_entries` property of the dataset.
        dataset = client.update_dataset(
            dataset,
            ["access_entries"],
        )
    
        # Show a success message.
        full_dataset_id = f"{dataset.project}.{dataset.dataset_id}"
        print(
            f"Role '{role}' granted for entity '{entity_id}'"
            f" in dataset '{full_dataset_id}'."
        )
    except PreconditionFailed:  # A read-modify-write error
        print(
            f"Dataset '{dataset.dataset_id}' was modified remotely before this update. "
            "Fetch the latest version and retry."
        )

תפקידים מוגדרים מראש שמעניקים גישה למערכי נתונים

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

תפקיד תיאור
בעלים של נתונים ב-BigQuery (roles/bigquery.dataOwner) אם התפקיד הזה מוקצה למערך נתונים, הוא מעניק את ההרשאות הבאות:
  • כל ההרשאות למערך הנתונים ולכל המשאבים במערך הנתונים: טבלאות ותצוגות מפורטות, מודלים ושגרות.
BigQuery Data Editor (roles/bigquery.dataEditor) אם התפקיד הזה מוקצה למערך נתונים, הוא מעניק את ההרשאות הבאות:
  • קבלת מטא-נתונים והרשאות למערך הנתונים.
  • לטבלאות ולתצוגות:
    • יצירה, עדכון, קבלת, הצגת רשימה ומחיקה של הטבלאות והתצוגות של מערך הנתונים.
    • קריאה (שאילתה), ייצוא, שכפול ועדכון של נתוני טבלה.
    • יצירה, עדכון ומחיקה של אינדקסים.
    • ליצור ולשחזר תמונות מצב.
  • כל ההרשאות לגבי השגרה והמודלים של מערך הנתונים.
BigQuery Data Viewer (roles/bigquery.dataViewer) אם התפקיד הזה מוקצה למערך נתונים, הוא מעניק את ההרשאות הבאות:
  • קבלת מטא-נתונים והרשאות למערך הנתונים.
  • הצגת רשימה של טבלאות, תצוגות ומודלים של מערך נתונים.
  • קבלת מטא-נתונים ובקרות גישה לטבלאות ולתצוגות של מערך הנתונים.
  • קריאה (שאילתה), שכפול וייצוא של נתוני טבלה ויצירת תמונות מצב.
  • מציגים את השגרה של מערך הנתונים ומפעילים אותה.
BigQuery Metadata Viewer (צפייה במטא-נתונים של BigQuery) (roles/bigquery.metadataViewer) אם התפקיד הזה מוקצה למערך נתונים, הוא מעניק את ההרשאות הבאות:
  • קבלת מטא-נתונים ואמצעי בקרה על הגישה למערך הנתונים.
  • קבלת מטא-נתונים ובקרות גישה לטבלאות ולתצוגות.
  • אחזור מטא-נתונים מהמודלים ומהשגרה של מערך הנתונים.
  • הצגת רשימה של טבלאות, תצוגות, מודלים ושגרות במערך הנתונים.

הרשאות למערך הנתונים

רוב ההרשאות שמתחילות ב-bigquery.datasets חלות ברמת מערך הנתונים. bigquery.datasets.create לא. כדי ליצור מערכי נתונים, צריך להקצות את ההרשאה bigquery.datasets.create לתפקיד במאגר הראשי – הפרויקט.

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

הרשאה משאב פעולה
bigquery.datasets.create פרויקט יצירת מערכי נתונים חדשים בפרויקט.
bigquery.datasets.get קבוצת הנתונים קבלת מטא-נתונים ואמצעי בקרה על הגישה למערך הנתונים. כדי לראות את ההרשאות במסוף, צריך גם את ההרשאה bigquery.datasets.getIamPolicy.
bigquery.datasets.getIamPolicy קבוצת הנתונים נדרש על ידי המסוף כדי להעניק למשתמש הרשאת משתמש לקבל את אמצעי בקרת הגישה של מערך נתונים. הגישה נכשלת. כדי להציג את מערך הנתונים במסוף, נדרשת גם ההרשאה bigquery.datasets.get.
bigquery.datasets.update קבוצת הנתונים עדכון המטא-נתונים ובקרות הגישה של מערך הנתונים. כדי לעדכן את אמצעי בקרת הגישה במסוף, נדרשת גם ההרשאה bigquery.datasets.setIamPolicy.
bigquery.datasets.setIamPolicy קבוצת הנתונים המסוף דורש את ההרשאה הזו כדי להעניק למשתמש הרשאת משתמש להגדיר את אמצעי בקרת הגישה של מערך נתונים. הגישה נכשלת. במסוף נדרשת גם ההרשאה bigquery.datasets.update לעדכון מערך הנתונים.
bigquery.datasets.delete קבוצת הנתונים מחיקה של מערך נתונים.
bigquery.datasets.createTagBinding קבוצת הנתונים מצרפים תגים לקבוצת הנתונים.
bigquery.datasets.deleteTagBinding קבוצת הנתונים מנתקים את התגים ממערך הנתונים.
bigquery.datasets.listTagBindings קבוצת הנתונים מציגים רשימה של תגים לקבוצת הנתונים.
bigquery.datasets.listEffectiveTags קבוצת הנתונים רשימה של תגים אפקטיביים (תגים שהוחלו ותגים שהועברו בירושה) עבור מערך הנתונים.
bigquery.datasets.link קבוצת הנתונים יוצרים קבוצת נתונים מקושרת.
bigquery.datasets.listSharedDatasetUsage פרויקט מציגים ברשימה את נתוני השימוש במערכי נתונים משותפים שיש לכם גישה אליהם בפרויקט. ההרשאה הזו נדרשת כדי לשלוח שאילתה לתצוגה INFORMATION_SCHEMA.SHARED_DATASET_USAGE.

הצגת אמצעי בקרה על גישה למערך נתונים

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

המסוף

  1. עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על כלי הניתוחים:

    כפתור מודגש לחלונית הסייר.

  3. בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ואז בוחרים מערך נתונים.

  4. לוחצים על שיתוף > הרשאות.

    אמצעי בקרת הגישה של מערך הנתונים מופיעים בחלונית הרשאות למערך הנתונים.

BQ

  1. In the Cloud de Confiance console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Cloud de Confiance console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. כדי לקבל מדיניות קיימת ולהוציא אותה לקובץ מקומי בפורמט JSON, משתמשים בפקודה bq show ב-Cloud Shell:

    bq show \
       --format=prettyjson \
       PROJECT_ID:DATASET > PATH_TO_FILE

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט
    • DATASET: השם של מערך הנתונים
    • PATH_TO_FILE: הנתיב לקובץ ה-JSON במחשב המקומי
  3. SQL

    שליחת שאילתה לתצוגה INFORMATION_SCHEMA.OBJECT_PRIVILEGES. בשאילתות לאחזור אמצעי בקרת גישה למערך נתונים צריך לציין את object_name.

    1. במסוף Cloud de Confiance , עוברים לדף BigQuery.

      כניסה ל-BigQuery

    2. מזינים את ההצהרה הבאה בעורך השאילתות:

      SELECT
      COLUMN_LIST
      FROM
        PROJECT_ID.`region-REGION`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES
      WHERE
      object_name = "DATASET";

      מחליפים את מה שכתוב בשדות הבאים:

    3. לוחצים על הפעלה.

    מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.

    דוגמה:

    השאילתה הזו מקבלת את אמצעי בקרת הגישה עבור mydataset.

    SELECT
    object_name, privilege_type, grantee
    FROM
    my_project.`region-us`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES
    WHERE
    object_name = "mydataset";

    הפלט אמור להיראות כך:

    +------------------+-----------------------------+-------------------------+
    |   object_name    |  privilege_type             | grantee                 |
    +------------------+-----------------------------+-------------------------+
    | mydataset        | roles/bigquery.dataOwner    | projectOwner:myproject  |
    | mydataset        | roles/bigquery.dataViwer    | user:user@example.com   |
    +------------------+-----------------------------+-------------------------+
    

    API

    כדי לראות את אמצעי בקרת הגישה של מערך נתונים, מפעילים את method‏ datasets.get עם משאב dataset מוגדר.

    אמצעי בקרת הגישה מופיעים במאפיין access של המשאב dataset.

    Go

    לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Goהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Go API.

    כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

    לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

    מפעילים את הפונקציה client.Dataset().Metadata(). מדיניות הגישה זמינה במאפיין Access.
    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/bigquery"
    )
    
    // viewDatasetAccessPolicies retrieves the ACL for the given dataset
    // For more information on the types of ACLs available see:
    // https://cloud.google.com/storage/docs/access-control/lists
    func viewDatasetAccessPolicies(w io.Writer, projectID, datasetID string) error {
    	// TODO(developer): uncomment and update the following lines:
    	// projectID := "my-project-id"
    	// datasetID := "mydataset"
    
    	ctx := context.Background()
    
    	// Create new client.
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	// Get dataset's metadata.
    	meta, err := client.Dataset(datasetID).Metadata(ctx)
    	if err != nil {
    		return fmt.Errorf("bigquery.Client.Dataset.Metadata: %w", err)
    	}
    
    	fmt.Fprintf(w, "Details for Access entries in dataset %v.\n", datasetID)
    
    	// Iterate over access permissions.
    	for _, access := range meta.Access {
    		fmt.Fprintln(w)
    		fmt.Fprintf(w, "Role: %s\n", access.Role)
    		fmt.Fprintf(w, "Entity: %v\n", access.Entity)
    	}
    
    	return nil
    }
    

    Java

    לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Javaהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Java API.

    כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

    לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

    
    import com.google.cloud.bigquery.Acl;
    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.Dataset;
    import com.google.cloud.bigquery.DatasetId;
    import java.util.List;
    
    public class GetDatasetAccessPolicy {
    
      public static void main(String[] args) {
        // TODO(developer): Replace these variables before running the sample.
        // Project and dataset from which to get the access policy.
        String projectId = "MY_PROJECT_ID";
        String datasetName = "MY_DATASET_NAME";
        getDatasetAccessPolicy(projectId, datasetName);
      }
    
      public static void getDatasetAccessPolicy(String projectId, String datasetName) {
        try {
          // Initialize client that will be used to send requests. This client only needs to be created
          // once, and can be reused for multiple requests.
          BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    
          // Create datasetId with the projectId and the datasetName.
          DatasetId datasetId = DatasetId.of(projectId, datasetName);
          Dataset dataset = bigquery.getDataset(datasetId);
    
          // Show ACL details.
          // Find more information about ACL and the Acl Class here:
          // https://cloud.google.com/storage/docs/access-control/lists
          // https://cloud.google.com/java/docs/reference/google-cloud-bigquery/latest/com.google.cloud.bigquery.Acl
          List<Acl> acls = dataset.getAcl();
          System.out.println("ACLs in dataset \"" + dataset.getDatasetId().getDataset() + "\":");
          System.out.println(acls.toString());
          for (Acl acl : acls) {
            System.out.println();
            System.out.println("Role: " + acl.getRole());
            System.out.println("Entity: " + acl.getEntity());
          }
        } catch (BigQueryException e) {
          System.out.println("ACLs info not retrieved. \n" + e.toString());
        }
      }
    }

    Node.js

    לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Node.jsהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Node.js API.

    כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

    לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

    אחזור המטא-נתונים של מערך הנתונים באמצעות הפונקציה Dataset#getMetadata(). מדיניות הגישה זמינה במאפיין הגישה של אובייקט המטא-נתונים שמתקבל.
    
    /**
     * TODO(developer): Update and un-comment below lines
     */
    // const datasetId = "my_project_id.my_dataset";
    
    const {BigQuery} = require('@google-cloud/bigquery');
    
    // Instantiate a client.
    const bigquery = new BigQuery();
    
    async function viewDatasetAccessPolicy() {
      const dataset = bigquery.dataset(datasetId);
    
      const [metadata] = await dataset.getMetadata();
      const accessEntries = metadata.access || [];
    
      // Show the list of AccessEntry objects.
      // More details about the AccessEntry object in the BigQuery documentation:
      // https://cloud.google.com/nodejs/docs/reference/bigquery/latest
      console.log(
        `${accessEntries.length} Access entries in dataset '${datasetId}':`
      );
      for (const accessEntry of accessEntries) {
        console.log(`Role: ${accessEntry.role || 'null'}`);
        console.log(`Special group: ${accessEntry.specialGroup || 'null'}`);
        console.log(`User by Email: ${accessEntry.userByEmail || 'null'}`);
      }
    }

    Python

    לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Pythonהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Python API.

    כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

    לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

    מפעילים את הפונקציה client.get_dataset(). מדיניות הגישה זמינה במאפיין dataset.access_entries.
    from google.cloud import bigquery
    
    # Instantiate a client.
    client = bigquery.Client()
    
    # TODO(developer): Update and uncomment the lines below.
    
    # Dataset from which to get the access policy.
    # dataset_id = "my_dataset"
    
    # Get a reference to the dataset.
    dataset = client.get_dataset(dataset_id)
    
    # Show the list of AccessEntry objects.
    # More details about the AccessEntry object here:
    # https://cloud.google.com/python/docs/reference/bigquery/latest/google.cloud.bigquery.dataset.AccessEntry
    print(
        f"{len(dataset.access_entries)} Access entries found "
        f"in dataset '{dataset_id}':"
    )
    
    for access_entry in dataset.access_entries:
        print()
        print(f"Role: {access_entry.role}")
        print(f"Special group: {access_entry.special_group}")
        print(f"User by Email: {access_entry.user_by_email}")

ביטול הגישה למערך נתונים

כדי לבטל את הגישה למערך נתונים, בוחרים באחת מהאפשרויות הבאות:

המסוף

  1. עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על כלי הניתוחים:

    כפתור מודגש לחלונית הסייר.

  3. בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ואז בוחרים מערך נתונים.

  4. בחלונית הפרטים, לוחצים על שיתוף > הרשאות.

  5. בתיבת הדו-שיח Dataset Permissions, מרחיבים את חשבון המשתמש שרוצים לבטל את הגישה שלו.

  6. לוחצים על הסרת גורם מרכזי.

  7. בתיבת הדו-שיח Remove role from principal? (הסרת תפקיד מחשבון ראשי?), לוחצים על Remove (הסרה).

  8. כדי לחזור לפרטי מערך הנתונים, לוחצים על סגירה.

SQL

כדי להסיר את הגישה של גורם מרכזי לקבוצת נתונים, משתמשים בהצהרת REVOKE DCL:

  1. במסוף Cloud de Confiance , עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. מזינים את ההצהרה הבאה בעורך השאילתות:

    REVOKE `ROLE_LIST`
    ON SCHEMA RESOURCE_NAME
    FROM "USER_LIST"

    מחליפים את מה שכתוב בשדות הבאים:

    • ROLE_LIST: תפקיד או רשימה של תפקידים מופרדים בפסיקים שרוצים לבטל
    • RESOURCE_NAME: שם המשאב שרוצים לבטל את ההרשאה לגביו
    • USER_LIST: רשימה מופרדת בפסיקים של משתמשים שהתפקידים שלהם יבוטלו

      רשימת הפורמטים התקינים זמינה במאמר user_list.

  3. לוחצים על הפעלה.

מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.

בדוגמה הבאה, התפקיד BigQuery Data Owner (הבעלים של נתוני BigQuery) מבוטל עבור myDataset:

REVOKE `roles/bigquery.dataOwner`
ON SCHEMA `myProject`.myDataset
FROM "group:group@example.com", "serviceAccount:user@test-project.s3ns.iam.gserviceaccount.com"

BQ

  1. In the Cloud de Confiance console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Cloud de Confiance console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. כדי לכתוב את פרטי מערך הנתונים הקיים (כולל אמצעי בקרת הגישה) לקובץ JSON, משתמשים בפקודה bq show:

    bq show \
        --format=prettyjson \
        PROJECT_ID:DATASET > PATH_TO_FILE

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט
    • DATASET: השם של מערך הנתונים
    • PATH_TO_FILE: הנתיב לקובץ ה-JSON במחשב המקומי
  3. מבצעים שינויים בקטע access בקובץ ה-JSON. אפשר להסיר את כל הערכים של specialGroup: projectOwners,‏ projectWriters,‏ projectReaders ו-allAuthenticatedUsers. אפשר גם להסיר את הפריטים הבאים: userByEmail,‏ groupByEmail ו-domain.

    לדוגמה, הקטע access בקובץ JSON של מערך נתונים ייראה כך:

    {
     "access": [
      {
       "role": "READER",
       "specialGroup": "projectReaders"
      },
      {
       "role": "WRITER",
       "specialGroup": "projectWriters"
      },
      {
       "role": "OWNER",
       "specialGroup": "projectOwners"
      },
      {
       "role": "READER",
       "specialGroup": "allAuthenticatedUsers"
      },
      {
       "role": "READER",
       "domain": "domain_name"
      },
      {
       "role": "WRITER",
       "userByEmail": "user_email"
      },
      {
       "role": "READER",
       "groupByEmail": "group_email"
      }
     ],
     ...
    }
  4. כשמסיימים לערוך, משתמשים בפקודה bq update וכוללים את קובץ ה-JSON באמצעות הדגל --source. אם מערך הנתונים נמצא בפרויקט שאינו פרויקט ברירת המחדל שלכם, צריך להוסיף את מזהה הפרויקט לשם מערך הנתונים בפורמט הבא: PROJECT_ID:DATASET.

      bq update 
    --source PATH_TO_FILE
    PROJECT_ID:DATASET

  5. כדי לאמת את השינויים בבקרת הגישה, משתמשים בפקודה show בלי לכתוב את המידע לקובץ:

    bq show --format=prettyjson PROJECT_ID:DATASET
  6. API

    מבצעים קריאה ל-datasets.patch method ומשתמשים במאפיין access במשאב Dataset כדי לעדכן את אמצעי בקרת הגישה.

    השיטה המועדפת לעדכון הרשאות גישה היא datasets.patch, כי השיטה datasets.update מחליפה את כל משאב מערך הנתונים.

    Go

    לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Goהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Go API.

    כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

    לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

    כדי להגדיר את רשימת הגישה החדשה, מסירים את הרשומה מהרשימה הקיימת עם DatasetMetadataToUpdate type . לאחר מכן קוראים לפונקציה dataset.Update() כדי לעדכן את הנכס.
    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/bigquery"
    )
    
    // revokeAccessToDataset creates a new ACL removing the dataset access to "example-analyst-group@google.com" entity
    // For more information on the types of ACLs available see:
    // https://cloud.google.com/storage/docs/access-control/lists
    func revokeAccessToDataset(w io.Writer, projectID, datasetID, entity string) error {
    	// TODO(developer): uncomment and update the following lines:
    	// projectID := "my-project-id"
    	// datasetID := "mydataset"
    	// entity := "user@mydomain.com"
    
    	ctx := context.Background()
    
    	// Create BigQuery client.
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	// Get dataset handler
    	dataset := client.Dataset(datasetID)
    
    	// Get dataset metadata
    	meta, err := dataset.Metadata(ctx)
    	if err != nil {
    		return err
    	}
    
    	// Create new access entry list by copying the existing and omiting the access entry entity value
    	var newAccessList []*bigquery.AccessEntry
    	for _, entry := range meta.Access {
    		if entry.Entity != entity {
    			newAccessList = append(newAccessList, entry)
    		}
    	}
    
    	// Only proceed with update if something in the access list was removed.
    	// Additionally, we use the ETag from the initial metadata to ensure no
    	// other changes were made to the access list in the interim.
    	if len(newAccessList) < len(meta.Access) {
    		update := bigquery.DatasetMetadataToUpdate{
    			Access: newAccessList,
    		}
    		meta, err = dataset.Update(ctx, update, meta.ETag)
    		if err != nil {
    			return err
    		}
    	} else {
    		return fmt.Errorf("any access entry was revoked")
    	}
    
    	fmt.Fprintf(w, "Details for Access entries in dataset %v.\n", datasetID)
    
    	for _, access := range meta.Access {
    		fmt.Fprintln(w)
    		fmt.Fprintf(w, "Role: %s\n", access.Role)
    		fmt.Fprintf(w, "Entity: %v\n", access.Entity)
    	}
    
    	return nil
    }
    

    Java

    לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Javaהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Java API.

    כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

    לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

    
    import com.google.cloud.bigquery.Acl;
    import com.google.cloud.bigquery.Acl.Entity;
    import com.google.cloud.bigquery.Acl.Group;
    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.Dataset;
    import com.google.cloud.bigquery.DatasetId;
    import java.util.List;
    
    public class RevokeDatasetAccess {
    
      public static void main(String[] args) {
        // TODO(developer): Replace these variables before running the sample.
        // Project and dataset from which to get the access policy.
        String projectId = "MY_PROJECT_ID";
        String datasetName = "MY_DATASET_NAME";
        // Group to remove from the ACL
        String entityEmail = "group-to-remove@example.com";
    
        revokeDatasetAccess(projectId, datasetName, entityEmail);
      }
    
      public static void revokeDatasetAccess(String projectId, String datasetName, String entityEmail) {
        try {
          // Initialize client that will be used to send requests. This client only needs
          // to be created once, and can be reused for multiple requests.
          BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    
          // Create datasetId with the projectId and the datasetName.
          DatasetId datasetId = DatasetId.of(projectId, datasetName);
          Dataset dataset = bigquery.getDataset(datasetId);
    
          // Create a new Entity with the corresponding type and email
          // "user-or-group-to-remove@example.com"
          // For more information on the types of Entities available see:
          // https://cloud.google.com/java/docs/reference/google-cloud-bigquery/latest/com.google.cloud.bigquery.Acl.Entity
          // and
          // https://cloud.google.com/java/docs/reference/google-cloud-bigquery/latest/com.google.cloud.bigquery.Acl.Entity.Type
          Entity entity = new Group(entityEmail);
    
          // To revoke access to a dataset, remove elements from the Acl list.
          // Find more information about ACL and the Acl Class here:
          // https://cloud.google.com/storage/docs/access-control/lists
          // https://cloud.google.com/java/docs/reference/google-cloud-bigquery/latest/com.google.cloud.bigquery.Acl
          // Remove the entity from the ACLs list.
          List<Acl> acls =
              dataset.getAcl().stream().filter(acl -> !acl.getEntity().equals(entity)).toList();
    
          // Update the ACLs by setting the new list.
          bigquery.update(dataset.toBuilder().setAcl(acls).build());
          System.out.println("ACLs of \"" + datasetName + "\" updated successfully");
        } catch (BigQueryException e) {
          System.out.println("ACLs were not updated \n" + e.toString());
        }
      }
    }

    Node.js

    לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Node.jsהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Node.js API.

    כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

    לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

    מעדכנים את רשימת הגישה למערך הנתונים על ידי הסרת הרשומה שצוינה מהרשימה הקיימת באמצעות השיטה Dataset#get() לאחזור המטא-נתונים הנוכחיים. משנים את מאפיין הגישה כדי להחריג את הישות הרצויה, ואז מפעילים את הפונקציה Dataset#setMetadata() כדי להחיל את רשימת הגישה המעודכנת.
    
    /**
     * TODO(developer): Update and un-comment below lines
     */
    
    // const datasetId = "my_project_id.my_dataset"
    
    // ID of the user or group from whom you are revoking access.
    // const entityId = "user-or-group-to-remove@example.com"
    
    const {BigQuery} = require('@google-cloud/bigquery');
    
    // Instantiate a client.
    const bigquery = new BigQuery();
    
    async function revokeDatasetAccess() {
      const [dataset] = await bigquery.dataset(datasetId).get();
    
      // To revoke access to a dataset, remove elements from the access list.
      //
      // See the BigQuery client library documentation for more details on access entries:
      // https://cloud.google.com/nodejs/docs/reference/bigquery/latest
    
      // Filter access entries to exclude entries matching the specified entity_id
      // and assign a new list back to the access list.
      dataset.metadata.access = dataset.metadata.access.filter(entry => {
        return !(
          entry.entity_id === entityId ||
          entry.userByEmail === entityId ||
          entry.groupByEmail === entityId
        );
      });
    
      // Update will only succeed if the dataset
      // has not been modified externally since retrieval.
      //
      // See the BigQuery client library documentation for more details on metadata updates:
      // https://cloud.google.com/bigquery/docs/updating-datasets
    
      // Update just the 'access entries' property of the dataset.
      await dataset.setMetadata(dataset.metadata);
    
      console.log(`Revoked access to '${entityId}' from '${datasetId}'.`);
    }

    Python

    לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Pythonהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Python API.

    כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

    לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

    מגדירים את dataset.access_entries המאפיין עם אמצעי הבקרה לגישה למערך נתונים. לאחר מכן קוראים לפונקציה client.update_dataset() כדי לעדכן את הנכס.
    from google.cloud import bigquery
    from google.api_core.exceptions import PreconditionFailed
    
    # TODO(developer): Update and uncomment the lines below.
    
    # ID of the dataset to revoke access to.
    # dataset_id = "my-project.my_dataset"
    
    # ID of the user or group from whom you are revoking access.
    # Alternatively, the JSON REST API representation of the entity,
    # such as a view's table reference.
    # entity_id = "user-or-group-to-remove@example.com"
    
    # Instantiate a client.
    client = bigquery.Client()
    
    # Get a reference to the dataset.
    dataset = client.get_dataset(dataset_id)
    
    # To revoke access to a dataset, remove elements from the AccessEntry list.
    #
    # See the BigQuery client library documentation for more details on `access_entries`:
    # https://cloud.google.com/python/docs/reference/bigquery/latest/google.cloud.bigquery.dataset.Dataset#google_cloud_bigquery_dataset_Dataset_access_entries
    
    # Filter `access_entries` to exclude entries matching the specified entity_id
    # and assign a new list back to the AccessEntry list.
    dataset.access_entries = [
        entry for entry in dataset.access_entries
        if entry.entity_id != entity_id
    ]
    
    # Update will only succeed if the dataset
    # has not been modified externally since retrieval.
    #
    # See the BigQuery client library documentation for more details on `update_dataset`:
    # https://cloud.google.com/python/docs/reference/bigquery/latest/google.cloud.bigquery.client.Client#google_cloud_bigquery_client_Client_update_dataset
    try:
        # Update just the `access_entries` property of the dataset.
        dataset = client.update_dataset(
            dataset,
            ["access_entries"],
        )
    
        # Notify user that the API call was successful.
        full_dataset_id = f"{dataset.project}.{dataset.dataset_id}"
        print(f"Revoked dataset access for '{entity_id}' to ' dataset '{full_dataset_id}.'")
    except PreconditionFailed:  # A read-modify-write error.
        print(
            f"Dataset '{dataset.dataset_id}' was modified remotely before this update. "
            "Fetch the latest version and retry."
        )

עבודה עם בקרות גישה לטבלה ולתצוגה

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

הענקת גישה לטבלה או לתצוגה

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

כדי להעניק גישה לטבלה או לתצוגה, בוחרים אחת מהאפשרויות הבאות:

המסוף

  1. עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על כלי הניתוחים:

    כפתור מודגש לחלונית הסייר.

  3. בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ואז בוחרים מערך נתונים.

  4. לוחצים על סקירה כללית > טבלאות, ואז לוחצים על טבלה או תצוגה.

  5. לוחצים על שיתוף > ניהול הרשאות.

  6. לוחצים על Add principal.

  7. בשדה New principals, מזינים חשבון משתמש.

  8. ברשימה Select a role, בוחרים תפקיד מוגדר מראש או תפקיד בהתאמה אישית.

  9. לוחצים על Save.

  10. כדי לחזור לטבלה או להציג פרטים, לוחצים על סגירה.

SQL

כדי להעניק לחשבונות משתמשים גישה לטבלאות או לתצוגות, משתמשים בGRANT הצהרת DCL:

  1. במסוף Cloud de Confiance , עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. מזינים את ההצהרה הבאה בעורך השאילתות:

    GRANT `ROLE_LIST`
    ON RESOURCE_TYPE RESOURCE_NAME
    TO "USER_LIST"

    מחליפים את מה שכתוב בשדות הבאים:

    • ROLE_LIST: תפקיד או רשימה של תפקידים מופרדים בפסיקים שרוצים להקצות
    • RESOURCE_TYPE: סוג המשאב שהתפקיד חל עליו

      הערכים הנתמכים כוללים TABLE, ‏ VIEW, ‏ MATERIALIZED VIEW ו-EXTERNAL TABLE.

    • RESOURCE_NAME: השם של המשאב שרוצים להעניק לו את ההרשאה
    • USER_LIST: רשימה מופרדת בפסיקים של משתמשים שהתפקיד מוקצה להם

      רשימת הפורמטים התקינים זמינה במאמר user_list.

  3. לוחצים על הפעלה.

מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.

בדוגמה הבאה מוקצית הרשאת צפייה בנתוני BigQuery ב-myTable:

GRANT `roles/bigquery.dataViewer`
ON TABLE `myProject`.myDataset.myTable
TO "user:user@example.com", "user:user2@example.com"

BQ

  1. In the Cloud de Confiance console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Cloud de Confiance console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. כדי להעניק גישה לטבלה או לתצוגה, משתמשים בפקודה bq add-iam-policy-binding:

    bq add-iam-policy-binding --member=MEMBER_TYPE:MEMBER --role=ROLE
      --table=true RESOURCE

    מחליפים את מה שכתוב בשדות הבאים:

    • MEMBER_TYPE: סוג החבר, למשל user, ‏group, ‏serviceAccount או domain.
    • MEMBER: כתובת האימייל או שם הדומיין של החבר.
    • ROLE: התפקיד שרוצים להקצות לחבר.
    • RESOURCE: השם של הטבלה או התצוגה שרוצים לעדכן את המדיניות שלהן.
  3. Terraform

    אפשר להשתמש במשאבי google_bigquery_table_iam כדי לעדכן את הגישה לטבלה.

    הגדרת מדיניות הגישה לטבלה

    בדוגמה הבאה מוצג אופן השימוש במשאב google_bigquery_table_iam_policy כדי להגדיר את מדיניות IAM עבור הטבלה mytable. הפעולה הזו תחליף כל מדיניות קיימת שכבר צורפה לטבלה:

    # This file sets the IAM policy for the table created by
    # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf.
    # You must place it in the same local directory as that main.tf file,
    # and you must have already applied that main.tf file to create
    # the "default" table resource with a table_id of "mytable".
    
    data "google_iam_policy" "iam_policy" {
      binding {
        role = "roles/bigquery.dataOwner"
        members = [
          "user:user@example.com",
        ]
      }
    }
    
    resource "google_bigquery_table_iam_policy" "table_iam_policy" {
      dataset_id  = google_bigquery_table.default.dataset_id
      table_id    = google_bigquery_table.default.table_id
      policy_data = data.google_iam_policy.iam_policy.policy_data
    }

    הגדרת חברות בתפקיד בטבלה

    בדוגמה הבאה אפשר לראות איך משתמשים במשאב google_bigquery_table_iam_binding כדי להגדיר חברות בתפקיד מסוים בטבלה mytable. הפעולה הזו תחליף את החברות הקיימת בתפקיד הזה. תפקידים אחרים במדיניות IAM של הטבלה נשמרים.

    # This file sets membership in an IAM role for the table created by
    # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf.
    # You must place it in the same local directory as that main.tf file,
    # and you must have already applied that main.tf file to create
    # the "default" table resource with a table_id of "mytable".
    
    resource "google_bigquery_table_iam_binding" "table_iam_binding" {
      dataset_id = google_bigquery_table.default.dataset_id
      table_id   = google_bigquery_table.default.table_id
      role       = "roles/bigquery.dataOwner"
    
      members = [
        "group:group@example.com",
      ]
    }

    הגדרת חברות בתפקיד עבור ישות מורשית יחידה

    בדוגמה הבאה מוצג אופן השימוש במשאב google_bigquery_table_iam_member כדי לעדכן את מדיניות ה-IAM של הטבלה mytable ולהעניק תפקיד לחשבון ראשי אחד. עדכון מדיניות ה-IAM הזו לא משפיע על הגישה של גורמים אחרים שקיבלו את התפקיד הזה במערך הנתונים.

    # This file adds a member to an IAM role for the table created by
    # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf.
    # You must place it in the same local directory as that main.tf file,
    # and you must have already applied that main.tf file to create
    # the "default" table resource with a table_id of "mytable".
    
    resource "google_bigquery_table_iam_member" "table_iam_member" {
      dataset_id = google_bigquery_table.default.dataset_id
      table_id   = google_bigquery_table.default.table_id
      role       = "roles/bigquery.dataEditor"
      member     = "serviceAccount:bqcx-1234567891011-12a3@gcp-sa-bigquery-condel.s3ns-system.iam.gserviceaccount.com"
    }

    כדי להחיל את ההגדרות של Terraform בפרויקט ב- Cloud de Confiance , מבצעים את השלבים בקטעים הבאים.

    הכנת Cloud Shell

    1. מפעילים את Cloud Shell.
    2. מגדירים את פרויקט ברירת המחדל שבו רוצים להחיל את ההגדרות של Terraform. Cloud de Confiance

      תצטרכו להריץ את הפקודה הזו רק פעם אחת לכל פרויקט, ותוכלו לעשות זאת בכל ספרייה.

      export GOOGLE_CLOUD_PROJECT=PROJECT_ID

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

    הכנת הספרייה

    לכל קובץ תצורה של Terraform צריכה להיות ספרייה משלו (שנקראת גם מודול ברמה הבסיסית).

    1. יוצרים ספרייה חדשה ב-Cloud Shell ובה יוצרים קובץ חדש. שם הקובץ חייב לכלול את הסיומת .tf, למשל main.tf. במדריך הזה, הקובץ נקרא main.tf.
      mkdir DIRECTORY && cd DIRECTORY && touch main.tf
    2. אם אתם עוקבים אחרי המדריך, תוכלו להעתיק את הקוד לדוגמה בכל קטע או שלב.

      מעתיקים את הקוד לדוגמה בקובץ main.tf החדש שיצרתם.

      לחלופין, אפשר גם להעתיק את הקוד מ-GitHub. כדאי לעשות את זה כשקטע הקוד של Terraform הוא חלק מפתרון מקצה לקצה.

    3. בודקים את הפרמטרים לדוגמה ומשנים אותם בהתאם לסביבה שלכם.
    4. שומרים את השינויים.
    5. מפעילים את Terraform. צריך לעשות זאת רק פעם אחת לכל ספרייה.
      terraform init

      אופציונלי: תוכלו לכלול את האפשרות -upgrade, כדי להשתמש בגרסה העדכנית ביותר של הספק של Google:

      terraform init -upgrade

    החלה של השינויים

    1. בודקים את ההגדרות ומוודאים שהמשאבים שמערכת Terraform תיצור או תעדכן תואמים לציפיות שלכם:
      terraform plan

      מתקנים את ההגדרות לפי הצורך.

    2. מריצים את הפקודה הבאה ומזינים yes בהודעה שמופיעה, כדי להחיל את הגדרות Terraform:
      terraform apply

      ממתינים עד שב-Terraform תוצג ההודעה "Apply complete!‎".

    3. פותחים את Cloud de Confiance הפרויקט כדי לראות את התוצאות. במסוף Cloud de Confiance , נכנסים למשאבים בממשק המשתמש כדי לוודא שהם נוצרו או עודכנו ב-Terraform.

    API

    1. כדי לאחזר את המדיניות הנוכחית, קוראים לשיטת tables.getIamPolicy.

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

    3. מתקשרים אל tables.setIamPolicy כדי לכתוב את המדיניות המעודכנת.

    Go

    לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Goהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Go API.

    כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

    לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

    כדי לשמור שינויים במדיניות הגישה לטבלה או לתצוגה, קוראים לפונקציה IAM().SetPolicy() של המשאב.
    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/bigquery"
    	"cloud.google.com/go/iam"
    )
    
    // grantAccessToResource creates a new ACL conceding the VIEWER role to the group "example-analyst-group@google.com"
    // For more information on the types of ACLs available see:
    // https://cloud.google.com/storage/docs/access-control/lists
    func grantAccessToResource(w io.Writer, projectID, datasetID, resourceID string) error {
    	// Resource can be a table or a view
    	//
    	// TODO(developer): uncomment and update the following lines:
    	// projectID := "my-project-id"
    	// datasetID := "mydataset"
    	// resourceID := "myresource"
    
    	ctx := context.Background()
    
    	// Create new client
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	// Get resource policy.
    	policy, err := client.Dataset(datasetID).Table(resourceID).IAM().Policy(ctx)
    	if err != nil {
    		return fmt.Errorf("bigquery.Dataset.Table.IAM.Policy: %w", err)
    	}
    
    	// Find more details about IAM Roles here:
    	// https://pkg.go.dev/cloud.google.com/go/iam#RoleName
    	entityID := "example-analyst-group@google.com"
    	roleType := iam.Viewer
    
    	// Add new policy.
    	policy.Add(fmt.Sprintf("group:%s", entityID), roleType)
    
    	// Update resource's policy.
    	err = client.Dataset(datasetID).Table(resourceID).IAM().SetPolicy(ctx, policy)
    	if err != nil {
    		return fmt.Errorf("bigquery.Dataset.Table.IAM.Policy: %w", err)
    	}
    
    	// Get resource policy again expecting the update.
    	policy, err = client.Dataset(datasetID).Table(resourceID).IAM().Policy(ctx)
    	if err != nil {
    		return fmt.Errorf("bigquery.Dataset.Table.IAM.Policy: %w", err)
    	}
    
    	fmt.Fprintf(w, "Details for Access entries in table or view %v.\n", resourceID)
    
    	for _, role := range policy.Roles() {
    		fmt.Fprintln(w)
    		fmt.Fprintf(w, "Role: %s\n", role)
    		fmt.Fprintf(w, "Entities: %v\n", policy.Members(role))
    	}
    
    	return nil
    }
    

    Java

    לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Javaהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Java API.

    כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

    לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

    import com.google.cloud.Identity;
    import com.google.cloud.Policy;
    import com.google.cloud.Role;
    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.TableId;
    
    public class GrantAccessToTableOrView {
    
      public static void main(String[] args) {
        // TODO(developer): Replace these variables before running the sample.
        // Project, dataset and resource (table or view) from which to get the access policy.
        String projectId = "MY_PROJECT_ID";
        String datasetName = "MY_DATASET_NAME";
        String resourceName = "MY_TABLE_NAME";
        // Role to add to the policy access
        Role role = Role.of("roles/bigquery.dataViewer");
        // Identity to add to the policy access
        Identity identity = Identity.user("user-add@example.com");
        grantAccessToTableOrView(projectId, datasetName, resourceName, role, identity);
      }
    
      public static void grantAccessToTableOrView(
          String projectId, String datasetName, String resourceName, Role role, Identity identity) {
        try {
          // Initialize client that will be used to send requests. This client only needs
          // to be created once, and can be reused for multiple requests.
          BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    
          // Create table identity given the projectId, the datasetName and the resourceName.
          TableId tableId = TableId.of(projectId, datasetName, resourceName);
    
          // Add new user identity to current IAM policy.
          Policy policy = bigquery.getIamPolicy(tableId);
          policy = policy.toBuilder().addIdentity(role, identity).build();
    
          // Update the IAM policy by setting the new one.
          bigquery.setIamPolicy(tableId, policy);
    
          System.out.println("IAM policy of resource \"" + resourceName + "\" updated successfully");
        } catch (BigQueryException e) {
          System.out.println("IAM policy was not updated. \n" + e.toString());
        }
      }
    }

    Node.js

    לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Node.jsהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Node.js API.

    כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

    לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

    קוראים לפונקציה Table#getIamPolicy() כדי לאחזר את מדיניות IAM הנוכחית של טבלה או תצוגה, משנים את המדיניות על ידי הוספת קישורים חדשים, ואז משתמשים בפונקציה Table#setIamPolicy() כדי לשמור את השינויים במדיניות הגישה.
    
    /**
     * TODO(developer): Update and un-comment below lines
     */
    // const projectId = "YOUR_PROJECT_ID";
    // const datasetId = "YOUR_DATASET_ID";
    // const tableId = "YOUR_TABLE_ID";
    // const principalId = "YOUR_PRINCIPAL_ID";
    // const role = "YOUR_ROLE";
    
    const {BigQuery} = require('@google-cloud/bigquery');
    
    // Instantiate a client.
    const client = new BigQuery();
    
    async function grantAccessToTableOrView() {
      const dataset = client.dataset(datasetId);
      const table = dataset.table(tableId);
    
      // Get the IAM access policy for the table or view.
      const [policy] = await table.getIamPolicy();
    
      // Initialize bindings array.
      if (!policy.bindings) {
        policy.bindings = [];
      }
    
      // To grant access to a table or view
      // add bindings to the Table or View policy.
      //
      // Find more details about Policy and Binding objects here:
      // https://cloud.google.com/security-command-center/docs/reference/rest/Shared.Types/Policy
      // https://cloud.google.com/security-command-center/docs/reference/rest/Shared.Types/Binding
      const binding = {
        role,
        members: [principalId],
      };
      policy.bindings.push(binding);
    
      // Set the IAM access policy with updated bindings.
      await table.setIamPolicy(policy);
    
      // Show a success message.
      console.log(
        `Role '${role}' granted for principal '${principalId}' on resource '${datasetId}.${tableId}'.`
      );
    }
    
    await grantAccessToTableOrView();

    Python

    לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Pythonהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Python API.

    כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

    לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

    מפעילים את הפונקציה client.set_iam_policy() כדי לשמור שינויים במדיניות הגישה לטבלה או לתצוגה.
    from google.cloud import bigquery
    
    # TODO(developer): Update and uncomment the lines below.
    
    # Google Cloud Platform project.
    # project_id = "my_project_id"
    
    # Dataset where the table or view is.
    # dataset_id = "my_dataset"
    
    # Table or view name to get the access policy.
    # resource_name = "my_table"
    
    # Principal to grant access to a table or view.
    # For more information about principal identifiers see:
    # https://cloud.google.com/iam/docs/principal-identifiers
    # principal_id = "user:bob@example.com"
    
    # Role to grant to the principal.
    # For more information about BigQuery roles see:
    # https://cloud.google.com/bigquery/docs/access-control
    # role = "roles/bigquery.dataViewer"
    
    # Instantiate a client.
    client = bigquery.Client()
    
    # Get the full table or view name.
    full_resource_name = f"{project_id}.{dataset_id}.{resource_name}"
    
    # Get the IAM access policy for the table or view.
    policy = client.get_iam_policy(full_resource_name)
    
    # To grant access to a table or view, add bindings to the IAM policy.
    #
    # Find more details about Policy and Binding objects here:
    # https://cloud.google.com/security-command-center/docs/reference/rest/Shared.Types/Policy
    # https://cloud.google.com/security-command-center/docs/reference/rest/Shared.Types/Binding
    binding = {
        "role": role,
        "members": [principal_id, ],
    }
    policy.bindings.append(binding)
    
    # Set the IAM access policy with updated bindings.
    updated_policy = client.set_iam_policy(full_resource_name, policy)
    
    # Show a success message.
    print(
        f"Role '{role}' granted for principal '{principal_id}'"
        f" on resource '{full_resource_name}'."
    )

תפקידים מוגדרים מראש שמעניקים גישה לטבלאות ולתצוגות

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

לתפקידי ה-IAM המוגדרים מראש הבאים יש הרשאות בטבלאות או בתצוגות.

תפקיד תיאור
בעלים של נתונים ב-BigQuery (roles/bigquery.dataOwner) אם התפקיד הזה מוקצה לטבלה או לתצוגה, הוא מעניק את ההרשאות הבאות:
  • כל ההרשאות לטבלה או לתצוגה.
  • כל ההרשאות לכללי מדיניות של גישה לשורות, למעט ההרשאה לעקוף את ההגבלות על שימוש בתכונה 'חזרה בזמן'.
  • הגדרת קטגוריות ומדיניות בנושא נתונים ברמת העמודה.
BigQuery Data Editor (roles/bigquery.dataEditor) אם התפקיד הזה מוקצה לטבלה או לתצוגה, הוא מעניק את ההרשאות הבאות:
  • אפשר לקבל מטא-נתונים, לעדכן מטא-נתונים, לקבל אמצעי בקרה לגישה ולמחוק את הטבלה או התצוגה.
  • קבלת (שאילתה), ייצוא, שכפול ועדכון של נתונים בטבלה.
  • יצירה, עדכון ומחיקה של אינדקסים.
  • ליצור ולשחזר תמונות מצב.
BigQuery Data Viewer (roles/bigquery.dataViewer) אם התפקיד הזה מוקצה לטבלה או לתצוגה, הוא מעניק את ההרשאות הבאות:
  • קבלת מטא-נתונים ובקרות גישה לטבלה או לתצוגה.
  • קבלת (שאילתה), ייצוא ושכפול של נתונים בטבלה.
  • יצירת תמונות מצב.
BigQuery Metadata Viewer (צפייה במטא-נתונים של BigQuery) (roles/bigquery.metadataViewer) אם התפקיד הזה מוקצה לטבלה או לתצוגה, הוא מעניק את ההרשאות הבאות:
  • קבלת מטא-נתונים ובקרות גישה לטבלה או לתצוגה.

הרשאות לטבלאות ולתצוגות

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

רוב ההרשאות שמתחילות ב-bigquery.tables חלות ברמת הטבלה. ‫bigquery.tables.create וגם bigquery.tables.list כדי ליצור טבלאות או תצוגות ולפרט אותן, צריך להעניק לתפקיד הרשאות bigquery.tables.create ו-bigquery.tables.list במאגר נתונים ראשי – מערך הנתונים או הפרויקט.

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

הרשאה משאב פעולה
bigquery.tables.create קבוצת הנתונים יוצרים טבלאות חדשות במערך הנתונים.
bigquery.tables.createIndex טבלה יוצרים אינדקס חיפוש בטבלה.
bigquery.tables.deleteIndex טבלה מחיקת אינדקס חיפוש בטבלה.
bigquery.tables.createSnapshot טבלה יוצרים קובץ snapshot של הטבלה. כדי ליצור תמונת מצב נדרשות כמה הרשאות נוספות ברמת הטבלה וברמת מערך הנתונים. פרטים נוספים מופיעים במאמר בנושא הרשאות ותפקידים ליצירת תמונות מצב של טבלאות.
bigquery.tables.deleteSnapshot טבלה מחיקת תמונת מצב של הטבלה.
bigquery.tables.delete טבלה מחיקת טבלה
bigquery.tables.createTagBinding טבלה יצירת קישורי תגי משאבים בטבלה.
bigquery.tables.deleteTagBinding טבלה מחיקת קישורי תגי משאבים בטבלה.
bigquery.tables.listTagBindings טבלה הצגת רשימה של קשרי resource tag בטבלה.
bigquery.tables.listEffectiveTags טבלה הצגת רשימת תגים אפקטיביים (תגים שהוחלו ותגים שעברו בירושה) עבור הטבלה.
bigquery.tables.export טבלה מייצאים את נתוני הטבלה. כדי להריץ עבודת חילוץ נדרשות גם הרשאות bigquery.jobs.create.
bigquery.tables.get טבלה אחזור מטא-נתונים של טבלה.
bigquery.tables.getData טבלה מריצים שאילתה על נתוני הטבלה. כדי להריץ שאילתה, צריך גם הרשאות bigquery.jobs.create.
bigquery.tables.getIamPolicy טבלה קבלת אמצעי בקרה לגישה לטבלה.
bigquery.tables.list קבוצת הנתונים הצגת רשימה של כל הטבלאות והמטא-נתונים של הטבלאות במערך הנתונים.
bigquery.tables.replicateData טבלה שכפול של נתוני הטבלה. ההרשאה הזו נדרשת כדי ליצור תצוגות מהותיות של רפליקות.
bigquery.tables.restoreSnapshot טבלה שחזור תמונת מצב של טבלה.
bigquery.tables.setCategory טבלה הגדרת תגי מדיניות בסכימה של הטבלה.
bigquery.tables.setColumnDataPolicy טבלה הגדרת מדיניות גישה ברמת העמודה בטבלה.
bigquery.tables.setIamPolicy טבלה הגדרת אמצעי בקרה לגישה לטבלה.
bigquery.tables.update טבלה עדכון הטבלה. metadata. bigquery.tables.get נדרש גם כדי לעדכן את המטא-נתונים של הטבלה במסוף.
bigquery.tables.updateData טבלה מעדכנים את נתוני הטבלה.
bigquery.tables.updateIndex טבלה מעדכנים את אינדקס החיפוש בטבלה.

צפייה באמצעי בקרת הגישה לטבלה או לתצוגה

כדי לראות את אמצעי בקרת הגישה לטבלה או לתצוגה, בוחרים באחת מהאפשרויות הבאות:

המסוף

  1. עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על כלי הניתוחים:

    כפתור מודגש לחלונית הסייר.

  3. בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ואז בוחרים מערך נתונים.

  4. לוחצים על סקירה כללית > טבלאות, ואז לוחצים על טבלה או תצוגה.

  5. לוחצים על שיתוף.

    אמצעי בקרת הגישה לטבלה או לתצוגה מופיעים בחלונית שיתוף.

BQ

  1. In the Cloud de Confiance console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Cloud de Confiance console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. כדי לקבל מדיניות גישה קיימת ולהוציא אותה לקובץ מקומי בפורמט JSON, משתמשים בפקודה bq get-iam-policy ב-Cloud Shell:

    bq get-iam-policy \
        --table=true \
        PROJECT_ID:DATASET.RESOURCE > PATH_TO_FILE

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט
    • DATASET: השם של מערך הנתונים
    • RESOURCE: השם של הטבלה או התצוגה שרוצים לראות את המדיניות שלהן
    • PATH_TO_FILE: הנתיב לקובץ ה-JSON במחשב המקומי
  3. SQL

    שליחת שאילתה לתצוגה INFORMATION_SCHEMA.OBJECT_PRIVILEGES. בשאלות לגבי שליפת אמצעי בקרת גישה לטבלה או לתצוגה צריך לציין את object_schema ואת object_name.

    1. במסוף Cloud de Confiance , עוברים לדף BigQuery.

      כניסה ל-BigQuery

    2. מזינים את ההצהרה הבאה בעורך השאילתות:

      SELECT
      COLUMN_LIST
      FROM
        PROJECT_ID.`region-REGION`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES
      WHERE
      object_schema = "DATASET" AND object_name = "TABLE";

      מחליפים את מה שכתוב בשדות הבאים:

    3. לוחצים על הפעלה.

    מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.

    דוגמה:

    SELECT
    object_name, privilege_type, grantee
    FROM
    my_project.`region-us`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES
    WHERE
    object_schema = "mydataset" AND object_name = "mytable";
    +------------------+-----------------------------+--------------------------+
    |   object_name    |  privilege_type             | grantee                  |
    +------------------+-----------------------------+--------------------------+
    | mytable          | roles/bigquery.dataEditor   | group:group@example.com|
    | mytable          | roles/bigquery.dataOwner    | user:user@example.com|
    +------------------+-----------------------------+--------------------------+
    

    API

    כדי לאחזר את המדיניות הנוכחית, קוראים לשיטת tables.getIamPolicy.

    Go

    לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Goהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Go API.

    כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

    לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

    מפעילים את הפונקציה IAM().Policy() של המשאב. אחר כך קוראים לפונקציה Roles() כדי לקבל את מדיניות הגישה לטבלה או לתצוגה.
    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/bigquery"
    )
    
    // viewTableOrViewAccessPolicies retrieves the ACL for the given resource
    // For more information on the types of ACLs available see:
    // https://cloud.google.com/storage/docs/access-control/lists
    func viewTableOrViewAccessPolicies(w io.Writer, projectID, datasetID, resourceID string) error {
    	// Resource can be a table or a view
    	//
    	// TODO(developer): uncomment and update the following lines:
    	// projectID := "my-project-id"
    	// datasetID := "my-dataset-id"
    	// resourceID := "my-resource-id"
    
    	ctx := context.Background()
    
    	// Create new client.
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	// Get resource's policy access.
    	policy, err := client.Dataset(datasetID).Table(resourceID).IAM().Policy(ctx)
    	if err != nil {
    		return fmt.Errorf("bigquery.Dataset.Table.IAM.Policy: %w", err)
    	}
    
    	fmt.Fprintf(w, "Details for Access entries in table or view %v.\n", resourceID)
    
    	for _, role := range policy.Roles() {
    		fmt.Fprintln(w)
    		fmt.Fprintf(w, "Role: %s\n", role)
    		fmt.Fprintf(w, "Entities: %v\n", policy.Members(role))
    	}
    
    	return nil
    }
    

    Java

    לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Javaהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Java API.

    כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

    לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

    
    import com.google.cloud.Policy;
    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.TableId;
    
    public class GetTableOrViewAccessPolicy {
    
      public static void main(String[] args) {
        // TODO(developer): Replace these variables before running the sample.
        // Project, dataset and resource (table or view) from which to get the access policy.
        String projectId = "MY_PROJECT_ID";
        String datasetName = "MY_DATASET_NAME";
        String resourceName = "MY_RESOURCE_NAME";
        getTableOrViewAccessPolicy(projectId, datasetName, resourceName);
      }
    
      public static void getTableOrViewAccessPolicy(
          String projectId, String datasetName, String resourceName) {
        try {
          // Initialize client that will be used to send requests. This client only needs
          // to be created once, and can be reused for multiple requests.
          BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    
          // Create table identity given the projectId, the datasetName and the resourceName.
          TableId tableId = TableId.of(projectId, datasetName, resourceName);
    
          // Get the table IAM policy.
          Policy policy = bigquery.getIamPolicy(tableId);
    
          // Show policy details.
          // Find more information about the Policy Class here:
          // https://cloud.google.com/java/docs/reference/google-cloud-core/latest/com.google.cloud.Policy
          System.out.println(
              "IAM policy info of resource \"" + resourceName + "\" retrieved succesfully");
          System.out.println();
          System.out.println("IAM policy info: " + policy.toString());
        } catch (BigQueryException e) {
          System.out.println("IAM policy info not retrieved. \n" + e.toString());
        }
      }
    }

    Node.js

    לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Node.jsהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Node.js API.

    כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

    לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

    אחזור מדיניות IAM עבור טבלה או תצוגה באמצעות הפונקציה Table#getIamPolicy(). פרטי מדיניות הגישה זמינים באובייקט המדיניות שמוחזר.
    
    /**
     * TODO(developer): Update and un-comment below lines
     */
    // const projectId = "YOUR_PROJECT_ID"
    // const datasetId = "YOUR_DATASET_ID"
    // const resourceName = "YOUR_RESOURCE_NAME";
    
    const {BigQuery} = require('@google-cloud/bigquery');
    
    // Instantiate a client.
    const client = new BigQuery();
    
    async function viewTableOrViewAccessPolicy() {
      const dataset = client.dataset(datasetId);
      const table = dataset.table(resourceName);
    
      // Get the IAM access policy for the table or view.
      const [policy] = await table.getIamPolicy();
    
      // Initialize bindings if they don't exist
      if (!policy.bindings) {
        policy.bindings = [];
      }
    
      // Show policy details.
      // Find more details for the Policy object here:
      // https://cloud.google.com/bigquery/docs/reference/rest/v2/Policy
      console.log(`Access Policy details for table or view '${resourceName}'.`);
      console.log(`Bindings: ${JSON.stringify(policy.bindings, null, 2)}`);
      console.log(`etag: ${policy.etag}`);
      console.log(`Version: ${policy.version}`);
    }

ביטול הגישה לטבלה או לתצוגה

כדי לבטל את הגישה לטבלה או לתצוגה, בוחרים אחת מהאפשרויות הבאות:

המסוף

  1. עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על כלי הניתוחים:

    כפתור מודגש לחלונית הסייר.

  3. בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ואז בוחרים מערך נתונים.

  4. לוחצים על סקירה כללית > טבלאות, ואז לוחצים על טבלה או תצוגה.

  5. בחלונית הפרטים, לוחצים על שיתוף > ניהול הרשאות.

  6. בתיבת הדו-שיח שיתוף, מרחיבים את חשבון המשתמש שרוצים לבטל את הגישה שלו.

  7. לוחצים על מחיקה.

  8. בתיבת הדו-שיח Remove role from principal? (הסרת תפקיד מחשבון ראשי?), לוחצים על Remove (הסרה).

  9. כדי לחזור לטבלה או להציג פרטים, לוחצים על סגירה.

SQL

כדי להסיר מפרינציפלים את הגישה לטבלאות או לתצוגות, משתמשים בהצהרת REVOKE DCL:

  1. במסוף Cloud de Confiance , עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. מזינים את ההצהרה הבאה בעורך השאילתות:

    REVOKE `ROLE_LIST`
    ON RESOURCE_TYPE RESOURCE_NAME
    FROM "USER_LIST"

    מחליפים את מה שכתוב בשדות הבאים:

    • ROLE_LIST: תפקיד או רשימה של תפקידים מופרדים בפסיקים שרוצים לבטל
    • RESOURCE_TYPE: סוג המשאב שממנו בוטל התפקיד

      הערכים הנתמכים כוללים את TABLE, ‏ VIEW, ‏ MATERIALIZED VIEW וEXTERNAL TABLE.

    • RESOURCE_NAME: שם המשאב שרוצים לבטל את ההרשאה לגביו
    • USER_LIST: רשימה מופרדת בפסיקים של משתמשים שהתפקידים שלהם יבוטלו

      רשימת הפורמטים התקינים זמינה במאמר user_list.

  3. לוחצים על הפעלה.

מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.

בדוגמה הבאה מבוטלת ההרשאה לתפקיד BigQuery Data Owner ב-myTable:

REVOKE `roles/bigquery.dataOwner`
ON TABLE `myProject`.myDataset.myTable
FROM "group:group@example.com", "serviceAccount:user@myproject.s3ns.iam.gserviceaccount.com"

BQ

  1. In the Cloud de Confiance console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Cloud de Confiance console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. כדי לבטל את הגישה לטבלה או לתצוגה, משתמשים בפקודה bq remove-iam-policy-binding:

    bq remove-iam-policy-binding --member=MEMBER_TYPE:MEMBER --role=ROLE
    --table=true RESOURCE

    מחליפים את מה שכתוב בשדות הבאים:

    • MEMBER_TYPE: סוג החבר, כמו user,‏ group,‏ serviceAccount או domain
    • MEMBER: כתובת האימייל או שם הדומיין של החבר
    • ROLE: התפקיד שרוצים לבטל לחבר
    • RESOURCE: השם של הטבלה או התצוגה שרוצים לעדכן את המדיניות שלהן
  3. API

    1. כדי לאחזר את המדיניות הנוכחית, קוראים לשיטת tables.getIamPolicy.

    2. עורכים את המדיניות כדי להסיר חברים או קישורים, או את שניהם. במאמר בנושא מדיניות מפורט הפורמט הנדרש למדיניות.

    3. מתקשרים אל tables.setIamPolicy כדי לכתוב את המדיניות המעודכנת.

    Go

    לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Goהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Go API.

    כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

    לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

    כדי להסיר את הגישה, קוראים לפונקציה policy.Remove(). אחר כך קוראים לפונקציה IAM().SetPolicy() כדי לשמור את השינויים במדיניות הגישה לטבלה או לתצוגה.
    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/bigquery"
    	"cloud.google.com/go/iam"
    )
    
    // revokeTableOrViewAccessPolicies creates a new ACL removing the VIEWER role to group "example-analyst-group@google.com"
    // For more information on the types of ACLs available see:
    // https://cloud.google.com/storage/docs/access-control/lists
    func revokeTableOrViewAccessPolicies(w io.Writer, projectID, datasetID, resourceID string) error {
    	// Resource can be a table or a view
    	//
    	// TODO(developer): uncomment and update the following lines:
    	// projectID := "my-project-id"
    	// datasetID := "mydataset"
    	// resourceID := "myresource"
    
    	ctx := context.Background()
    
    	// Create new client
    	client, err := bigquery.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("bigquery.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	// Get resource policy.
    	policy, err := client.Dataset(datasetID).Table(resourceID).IAM().Policy(ctx)
    	if err != nil {
    		return fmt.Errorf("bigquery.Dataset.Table.IAM.Policy: %w", err)
    	}
    
    	// Find more details about IAM Roles here:
    	// https://pkg.go.dev/cloud.google.com/go/iam#RoleName
    	entityID := "example-analyst-group@google.com"
    	roleType := iam.Viewer
    
    	// Revoke policy access.
    	policy.Remove(fmt.Sprintf("group:%s", entityID), roleType)
    
    	// Update resource's policy.
    	err = client.Dataset(datasetID).Table(resourceID).IAM().SetPolicy(ctx, policy)
    	if err != nil {
    		return fmt.Errorf("bigquery.Dataset.Table.IAM.Policy: %w", err)
    	}
    
    	// Get resource policy again expecting the update.
    	policy, err = client.Dataset(datasetID).Table(resourceID).IAM().Policy(ctx)
    	if err != nil {
    		return fmt.Errorf("bigquery.Dataset.Table.IAM.Policy: %w", err)
    	}
    
    	fmt.Fprintf(w, "Details for Access entries in table or view %v.\n", resourceID)
    
    	for _, role := range policy.Roles() {
    		fmt.Fprintln(w)
    		fmt.Fprintf(w, "Role: %s\n", role)
    		fmt.Fprintf(w, "Entities: %v\n", policy.Members(role))
    	}
    
    	return nil
    }
    

    Java

    לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Javaהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Java API.

    כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

    לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

    import com.google.cloud.Identity;
    import com.google.cloud.Policy;
    import com.google.cloud.Role;
    import com.google.cloud.bigquery.BigQuery;
    import com.google.cloud.bigquery.BigQueryException;
    import com.google.cloud.bigquery.BigQueryOptions;
    import com.google.cloud.bigquery.TableId;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Map;
    import java.util.Set;
    
    public class RevokeAccessToTableOrView {
    
      public static void main(String[] args) {
        // TODO(developer): Replace these variables before running the sample.
        // Project, dataset and resource (table or view) from which to get the access policy
        String projectId = "MY_PROJECT_ID";
        String datasetName = "MY_DATASET_NAME";
        String resourceName = "MY_RESOURCE_NAME";
        // Role to remove from the access policy
        Role role = Role.of("roles/bigquery.dataViewer");
        // Identity to remove from the access policy
        Identity user = Identity.user("user-add@example.com");
        revokeAccessToTableOrView(projectId, datasetName, resourceName, role, user);
      }
    
      public static void revokeAccessToTableOrView(
          String projectId, String datasetName, String resourceName, Role role, Identity identity) {
        try {
          // Initialize client that will be used to send requests. This client only needs
          // to be created once, and can be reused for multiple requests.
          BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    
          // Create table identity given the projectId, the datasetName and the resourceName.
          TableId tableId = TableId.of(projectId, datasetName, resourceName);
    
          // Remove either identities or roles, or both from bindings and replace it in
          // the current IAM policy.
          Policy policy = bigquery.getIamPolicy(tableId);
          // Create a copy of an immutable map.
          Map<Role, Set<Identity>> bindings = new HashMap<>(policy.getBindings());
    
          // Remove all identities with a specific role.
          bindings.remove(role);
          // Update bindings.
          policy = policy.toBuilder().setBindings(bindings).build();
    
          // Remove one identity in all the existing roles.
          for (Role roleKey : bindings.keySet()) {
            if (bindings.get(roleKey).contains(identity)) {
              // Create a copy of an immutable set if the identity is present in the role.
              Set<Identity> identities = new HashSet<>(bindings.get(roleKey));
              // Remove identity.
              identities.remove(identity);
              bindings.put(roleKey, identities);
              if (bindings.get(roleKey).isEmpty()) {
                // Remove the role if it has no identities.
                bindings.remove(roleKey);
              }
            }
          }
          // Update bindings.
          policy = policy.toBuilder().setBindings(bindings).build();
    
          // Update the IAM policy by setting the new one.
          bigquery.setIamPolicy(tableId, policy);
    
          System.out.println("IAM policy of resource \"" + resourceName + "\" updated successfully");
        } catch (BigQueryException e) {
          System.out.println("IAM policy was not updated. \n" + e.toString());
        }
      }
    }

    Node.js

    לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Node.jsהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Node.js API.

    כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

    לפני שמריצים דוגמאות קוד, צריך להגדיר את משתנה הסביבה GOOGLE_CLOUD_UNIVERSE_DOMAIN לערך s3nsapis.fr.

    מאחזרים את מדיניות ה-IAM הנוכחית של טבלה או תצוגה באמצעות השיטה Table#getIamPolicy(). משנים את המדיניות כדי להסיר את התפקיד או החשבון הראשי הרצויים, ואז מחילים את המדיניות המעודכנת באמצעות השיטה Table#setIamPolicy().
    
    /**
     * TODO(developer): Update and un-comment below lines
     */
    // const projectId = "YOUR_PROJECT_ID"
    // const datasetId = "YOUR_DATASET_ID"
    // const tableId = "YOUR_TABLE_ID"
    // const roleToRemove = "YOUR_ROLE"
    // const principalToRemove = "YOUR_PRINCIPAL_ID"
    
    const {BigQuery} = require('@google-cloud/bigquery');
    
    // Instantiate a client.
    const client = new BigQuery();
    
    async function revokeAccessToTableOrView() {
      const dataset = client.dataset(datasetId);
      const table = dataset.table(tableId);
    
      // Get the IAM access policy for the table or view.
      const [policy] = await table.getIamPolicy();
    
      // Initialize bindings array.
      if (!policy.bindings) {
        policy.bindings = [];
      }
    
      // To revoke access to a table or view,
      // remove bindings from the Table or View policy.
      //
      // Find more details about Policy objects here:
      // https://cloud.google.com/security-command-center/docs/reference/rest/Shared.Types/Policy
    
      if (principalToRemove) {
        // Create a copy of bindings for modifications.
        const bindings = [...policy.bindings];
    
        // Filter out the principal from each binding.
        for (const binding of bindings) {
          if (binding.members) {
            binding.members = binding.members.filter(
              m => m !== principalToRemove
            );
          }
        }
    
        // Filter out bindings with empty members.
        policy.bindings = bindings.filter(
          binding => binding.members && binding.members.length > 0
        );
      }
    
      if (roleToRemove) {
        // Filter out all bindings with the roleToRemove
        // and assign a new list back to the policy bindings.
        policy.bindings = policy.bindings.filter(b => b.role !== roleToRemove);
      }
    
      // Set the IAM access policy with updated bindings.
      await table.setIamPolicy(policy);
    
      // Both role and principal are removed
      if (roleToRemove !== null && principalToRemove !== null) {
        console.log(
          `Role '${roleToRemove}' revoked for principal '${principalToRemove}' on resource '${datasetId}.${tableId}'.`
        );
      }
    
      // Only role is removed
      if (roleToRemove !== null && principalToRemove === null) {
        console.log(
          `Role '${roleToRemove}' revoked for all principals on resource '${datasetId}.${tableId}'.`
        );
      }
    
      // Only principal is removed
      if (roleToRemove === null && principalToRemove !== null) {
        console.log(
          `Access revoked for principal '${principalToRemove}' on resource '${datasetId}.${tableId}'.`
        );
      }
    
      // No changes were made
      if (roleToRemove === null && principalToRemove === null) {
        console.log(
          `No changes made to access policy for '${datasetId}.${tableId}'.`
        );
      }
    }

עבודה עם אמצעי בקרת גישה לתרחישים

כדי לשלוח משוב או לבקש תמיכה בנוגע לתכונה הזו, אפשר לשלוח אימייל לכתובת bigquery-security@google.com.

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

הענקת גישה לתרחיש

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

בוחרים באחת מהאפשרויות הבאות:

המסוף

  1. עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על כלי הניתוחים:

    כפתור מודגש לחלונית הסייר.

  3. בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ואז בוחרים מערך נתונים.

  4. עוברים לכרטיסייה פעולות שגרתיות ולוחצים על פעולה שגרתית.

  5. לוחצים על שיתוף.

  6. לוחצים על הוספת חברים.

  7. בשדה New members, מזינים את שם העיקרון.

  8. ברשימה Select a role, בוחרים תפקיד מוגדר מראש או תפקיד בהתאמה אישית.

  9. לוחצים על Save.

  10. כדי לחזור לפרטי השגרה, לוחצים על סיום.

BQ

  1. In the Cloud de Confiance console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Cloud de Confiance console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. כדי לכתוב את פרטי השגרה הקיימת (כולל אמצעי בקרת גישה) לקובץ JSON, משתמשים בפקודה bq get-iam-policy:

    bq get-iam-policy \
        PROJECT_ID:DATASET.ROUTINE \
        > PATH_TO_FILE

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט
    • DATASET: השם של מערך הנתונים שמכיל את השגרה שרוצים לעדכן
    • ROUTINE: השם של המשאב שרוצים לעדכן
    • PATH_TO_FILE: הנתיב לקובץ ה-JSON במחשב המקומי
  3. מבצעים שינויים בקטע bindings בקובץ ה-JSON. קישור מחבר בין חשבון משתמש אחד או יותר לבין role יחיד. חשבונות ראשיים יכולים להיות חשבונות משתמשים, חשבונות שירות, קבוצות Google ודומיינים. לדוגמה, הקטע bindings בקובץ JSON של שגרה ייראה כך:

    {
      "bindings": [
        {
          "role": "roles/bigquery.dataViewer",
          "members": [
            "user:user@example.com",
            "group:group@example.com",
            "domain:example.com",
          ]
        },
      ],
      "etag": "BwWWja0YfJA=",
      "version": 1
    }
  4. כדי לעדכן את מדיניות הגישה, משתמשים בפקודה bq set-iam-policy:

    bq set-iam-policy PROJECT_ID:DATASET.ROUTINE PATH_TO_FILE
  5. כדי לאמת את השינויים בבקרת הגישה, משתמשים שוב בפקודה bq get-iam-policy בלי לכתוב את המידע לקובץ:

    bq get-iam-policy --format=prettyjson \\
        PROJECT_ID:DATASET.ROUTINE
  6. API

    1. כדי לאחזר את המדיניות הנוכחית, קוראים לשיטת routines.getIamPolicy.

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

    3. מבצעים קריאה אל routines.setIamPolicy כדי לכתוב את המדיניות המעודכנת.

תפקידים מוגדרים מראש שמעניקים גישה לשגרה

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

לתפקידים המוגדרים מראש הבאים ב-IAM יש הרשאות לשימוש בשגרה.

תפקיד תיאור
בעלים של נתונים ב-BigQuery (roles/bigquery.dataOwner) אם מקצים את התפקיד הזה לרובוט, הוא מקבל את ההרשאות הבאות:
  • כל ההרשאות לרוטינה.

לא מומלץ להעניק את התפקיד 'בעל הנתונים' ברמת השגרה. התפקיד 'עריכת נתונים' מעניק גם את כל ההרשאות לרוטינה, והוא תפקיד עם פחות הרשאות.

BigQuery Data Editor (roles/bigquery.dataEditor) אם מקצים את התפקיד הזה לרובוט, הוא מקבל את ההרשאות הבאות:
  • כל ההרשאות לרוטינה.
BigQuery Data Viewer (roles/bigquery.dataViewer) אם מקצים את התפקיד הזה לרובוט, הוא מקבל את ההרשאות הבאות:
  • בשילוב שאילתה, אפשר להפנות לשגרה שמישהו אחר יצר.
BigQuery Metadata Viewer (צפייה במטא-נתונים של BigQuery) (roles/bigquery.metadataViewer) אם מקצים את התפקיד הזה לרובוט, הוא מקבל את ההרשאות הבאות:
  • בשילוב שאילתה, אפשר להפנות לשגרה שמישהו אחר יצר.

הרשאות לרוטינות

רוב ההרשאות שמתחילות ב-bigquery.routines חלות ברמת התרחיש. ‫bigquery.routines.create וגם bigquery.routines.list כדי ליצור ולרשום שגרות, צריך להעניק הרשאות bigquery.routines.create ו-bigquery.routines.list לתפקיד במאגר האב – מערך הנתונים.

בטבלה הבאה מפורטות כל ההרשאות לשימוש בשגרה, והמשאב ברמה הנמוכה ביותר שאליו אפשר להעניק אותן.

הרשאה משאב תיאור
bigquery.routines.create קבוצת הנתונים יוצרים תרחיש במערך הנתונים. כדי להריץ משימת שאילתה שמכילה הצהרת CREATE FUNCTION, נדרשת גם ההרשאה bigquery.jobs.create.
bigquery.routines.delete תרחיש מחיקת תרחיש.
bigquery.routines.get תרחיש הפניה לתרחיש שמישהו אחר יצר. כדי להריץ שאילתה שמתייחסת לשגרה, צריך גם את ההרשאה bigquery.jobs.create, וגם הרשאה לגשת לכל המשאבים שהשגרה מתייחסת אליהם, כמו טבלאות או תצוגות.
bigquery.routines.list קבוצת הנתונים להציג רשימה של תרחישים במערך הנתונים ולהציג מטא-נתונים של תרחישים.
bigquery.routines.update תרחיש עדכון ההגדרות והמטא-נתונים של שגרות.
bigquery.routines.getIamPolicy תרחיש קבלת אמצעי בקרה לגישה לשגרה.
bigquery.routines.setIamPolicy תרחיש מגדירים את אמצעי בקרת הגישה לתרחיש.

איך בודקים את אמצעי בקרת הגישה לשגרה

כדי לראות את אמצעי בקרת הגישה לשגרה, בוחרים באחת מהאפשרויות הבאות:

המסוף

  1. עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על כלי הניתוחים:

    כפתור מודגש לחלונית הסייר.

  3. בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ואז בוחרים מערך נתונים.

  4. עוברים לכרטיסייה פעולות שגרתיות ולוחצים על פעולה שגרתית.

  5. לוחצים על שיתוף.

    אמצעי בקרת הגישה של השגרה מופיעים בחלונית שיתוף.

BQ

הפקודה bq get-iam-policy לא תומכת בהצגת אמצעי בקרת גישה בשגרה.

SQL

בתצוגה INFORMATION_SCHEMA.OBJECT_PRIVILEGES לא מוצגים אמצעי בקרה לגישה לשגרה.

API

כדי לאחזר את המדיניות הנוכחית, קוראים לשיטת routines.getIamPolicy.

ביטול הגישה לשגרה

כדי לבטל את הגישה לשגרה, בוחרים באחת מהאפשרויות הבאות:

המסוף

  1. עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על כלי הניתוחים:

    כפתור מודגש לחלונית הסייר.

  3. בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ואז בוחרים מערך נתונים.

  4. עוברים לכרטיסייה פעולות שגרתיות ולוחצים על פעולה שגרתית.

  5. בחלונית הפרטים, לוחצים על שיתוף > הרשאות.

  6. בתיבת הדו-שיח Routine Permissions, מרחיבים את חשבון המשתמש שרוצים לבטל את הגישה שלו.

  7. לוחצים על הסרת גורם מרכזי.

  8. בתיבת הדו-שיח Remove role from principal? (הסרת תפקיד מחשבון ראשי?), לוחצים על Remove (הסרה).

  9. לוחצים על Close.

BQ

  1. In the Cloud de Confiance console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Cloud de Confiance console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. כדי לכתוב את פרטי השגרה הקיימת (כולל אמצעי בקרת גישה) לקובץ JSON, משתמשים בפקודה bq get-iam-policy:

    bq get-iam-policy --routine PROJECT_ID:DATASET.ROUTINE > PATH_TO_FILE

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט
    • DATASET: השם של מערך הנתונים שמכיל את הפרוצדורה שרוצים לעדכן
    • ROUTINE: השם של המשאב שרוצים לעדכן
    • PATH_TO_FILE: הנתיב לקובץ ה-JSON במחשב המקומי

    בקובץ המדיניות, הערך של version נשאר 1. המספר הזה מתייחס לגרסת הסכימה של מדיניות IAM, ולא לגרסת המדיניות. הערך של etag value הוא מספר הגרסה של המדיניות.

  3. מבצעים שינויים בקטע access בקובץ ה-JSON. אפשר להסיר כל אחת מהרשומות של specialGroup: projectOwners,‏ projectWriters,‏ projectReaders ו-allAuthenticatedUsers. אפשר גם להסיר את האפליקציות הבאות: userByEmail,‏ groupByEmail ו-domain.

    לדוגמה, הקטע access בקובץ JSON של שגרה ייראה כך:

    {
     "bindings": [
       {
         "role": "roles/bigquery.dataViewer",
         "members": [
           "user:user@example.com",
           "group:group@example.com",
           "domain:google.com",
         ]
       },
     ],
     "etag": "BwWWja0YfJA=",
     "version": 1
    }
  4. כדי לעדכן את מדיניות הגישה, משתמשים בפקודה bq set-iam-policy:

    bq set-iam-policy --routine PROJECT_ID:DATASET.ROUTINE PATH_TO_FILE
  5. כדי לאמת את השינויים בבקרת הגישה, משתמשים שוב בפקודה get-iam-policy בלי לכתוב את המידע לקובץ:

    bq get-iam-policy --routine --format=prettyjson PROJECT_ID:DATASET.ROUTINE
  6. API

    1. כדי לאחזר את המדיניות הנוכחית, קוראים לשיטת routines.getIamPolicy.

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

הצגת אמצעי בקרת גישה שעברו בירושה למשאב

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

  1. במסוף Cloud de Confiance , עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על כלי הניתוחים:

    כפתור מודגש לחלונית הסייר.

  3. בחלונית Explorer, מרחיבים את הפרויקט, לוחצים על Datasets ובוחרים מערך נתונים, או בוחרים טבלה, תצוגה או שגרה במערך הנתונים.

  4. לוחצים על שיתוף > ניהול הרשאות.

  5. מוודאים שהאפשרות הצגת תפקידים שעברו בירושה בטבלה מופעלת.

    האפשרות &#39;הצגת תפקידים שעברו בירושה בטבלה&#39; במסוף

  6. מרחיבים תפקיד בטבלה.

  7. בעמודה Inheritance, הסמל המשושה מציין אם התפקיד עבר בירושה ממשאב הורה.

    הסמל &#39;עובר בירושה ממקור הורה&#39;

דחיית הגישה למשאב

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

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

מקרים מיוחדים

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

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

    • bigquery.tables.get
    • bigquery.tables.list
    • bigquery.tables.getData
    • bigquery.tables.updateData
    • bigquery.tables.create
    • bigquery.tables.delete
    • bigquery.routines.get
    • bigquery.routines.list
    • bigquery.datasets.get
    • bigquery.models.getData
    • bigquery.models.getMetadata

    כדי לדחות את הגישה למשאבים המורשים האלה, מוסיפים אחד מהערכים הבאים לשדה deniedPrincipal כשיוצרים את מדיניות הדחייה:

    ערך תרחיש לדוגמה
    principalSet://goog/public:all חסימה של כל הגורמים, כולל משאבים מורשים.
    principalSet://bigquery.googleapis.com/projects/PROJECT_NUMBER/* חסימה של כל המשאבים המורשים ב-BigQuery בפרויקט שצוין. ‫PROJECT_NUMBER הוא מזהה ייחודי שנוצר באופן אוטומטי לפרויקט מסוג INT64.
  • כדי להחריג חשבונות משתמשים מסוימים מכלל מדיניות הדחייה, מציינים את החשבונות האלה בשדה exceptionPrincipals של מדיניות הדחייה. לדוגמה, exceptionPrincipals: "principalSet://bigquery.googleapis.com/projects/1234/*".

  • מערכת BigQuery שומרת במטמון את תוצאות השאילתות של בעלי המשימה למשך 24 שעות, והם יכולים לגשת אליהן בלי הרשאת bigquery.tables.getData בטבלה שמכילה את הנתונים. לכן, הוספת מדיניות דחייה ב-IAM להרשאה bigquery.tables.getData לא חוסמת את הגישה לתוצאות שנשמרו במטמון עבור בעלי המשימה עד שתוקף המטמון יפוג. כדי לחסום את הגישה של בעלי המשימות לתוצאות שנשמרו במטמון, צריך ליצור מדיניות דחייה נפרדת בהרשאה bigquery.jobs.create.

  • כדי למנוע גישה לא מכוונת לנתונים כשמשתמשים במדיניות דחייה כדי לחסום פעולות קריאת נתונים, מומלץ גם לבדוק ולבטל מינויים קיימים במערך הנתונים.

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

    • bigquery.datasets.get
    • bigquery.datasets.getIamPolicy
  • כדי ליצור מדיניות דחייה ב-IAM לעדכון אמצעי בקרת הגישה של מערך נתונים, צריך לדחות את ההרשאות הבאות:

    • bigquery.datasets.update
    • bigquery.datasets.setIamPolicy

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

projects.testIamPermissionsכאן מוסבר איך משתמשים בשיטה כדי לבדוק את גישת חשבון למטרות בדיקה למשאב.