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

בדף הזה מוסבר איך להשתמש בבקרת גישה ברמת העמודה ב-BigQuery כדי להגביל את הגישה לנתונים ברמת העמודה. מידע כללי על בקרת גישה ברמת העמודה זמין במאמר מבוא לבקרת גישה ברמת העמודה ב-BigQuery.

ההוראות בדף הזה מתייחסות גם ל-BigQuery וגם ל-Data Catalog.

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

  • הפקודות bq mk ו-bq load של כלי שורת הפקודה של BigQuery.
  • ה-Method ב-API של tables.insert.
  • הדף Create table במסוף Google Cloud . אם אתם משתמשים במסוףGoogle Cloud , אתם צריכים לבחור באפשרות Edit as text כשאתם מוסיפים או עורכים את הסכימה.

כדי לשפר את בקרת הגישה ברמת העמודה, אתם יכולים להשתמש בהסתרת מידע דינמית. הסתרת נתונים מאפשרת להסתיר נתונים רגישים על ידי החלפת הערך האמיתי של העמודה בערך null, בערך ברירת מחדל או בתוכן מגובב (hashed).

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

  1. נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Data Catalog and BigQuery Data Policy APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Data Catalog and BigQuery Data Policy APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  8. ‫BigQuery מופעל באופן אוטומטי בפרויקטים חדשים, אבל יכול להיות שתצטרכו להפעיל אותו בפרויקט קיים.

    מפעילים את BigQuery API, אם הוא עדיין לא מופעל.

    התפקידים שנדרשים כדי להפעיל ממשקי API

    כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    להפעלת ה-API

תפקידים והרשאות

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

  • למשתמשים או לחשבונות שירות שמנהלים תגי מדיניות צריך להיות התפקיד "אדמין של תגי מדיניות ב-Data Catalog". התפקיד "אדמין של תגי מדיניות" מאפשר לנהל טקסונומיות ותגי מדיניות, ולהקצות או להסיר תפקידי IAM שמשויכים לתגי מדיניות.
  • משתמשים או חשבונות שירות שאוכפים בקרת גישה ברמת העמודה צריכים להיות עם התפקיד "אדמין ב-BigQuery" או "בעלים של נתונים ב-BigQuery". התפקידים ב-BigQuery יכולים לנהל את מדיניות הנתונים, שמשמשת לאכיפת בקרת הגישה בטקסונומיה.
  • כדי לראות טקסונומיות ותגי מדיניות של כל הפרויקטים בארגון במסוףGoogle Cloud , המשתמשים צריכים את התפקיד Organization Viewer. אחרת, במסוף יוצגו רק טקסונומיות ותגי מדיניות שמשויכים לפרויקט שנבחר.
  • כדי לגשת לנתונים שמוגנים באמצעות בקרת גישה ברמת העמודה, משתמשים או חשבונות שירות ששולחים שאילתות לנתונים האלה צריכים להיות בעלי התפקיד "קורא עם הרשאות גישה מפורטות" ב-Data Catalog.

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

התפקיד "אדמין של תגי מדיניות ב-Data Catalog"

התפקיד "אדמין של תגי מדיניות ב-Data Catalog" יכול ליצור ולנהל תגי מדיניות של נתונים.

כדי להקצות את התפקיד "אדמין של תגי מדיניות", אתם צריכים את ההרשאה resourcemanager.projects.setIamPolicy בפרויקט שבו אתם רוצים להקצות את התפקיד. אם אין לכם את ההרשאה resourcemanager.projects.setIamPolicy, בקשו מ-Project Owner לתת לכם את ההרשאה או לבצע בשבילכם את השלבים הבאים.

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

    כניסה לדף IAM

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

    אם כתובת האימייל של המשתמש לא מופיעה ברשימה, לוחצים על Add ומזינים את כתובת האימייל בתיבה New principals.

  3. לוחצים על הרשימה הנפתחת Select a role.

  4. בקטע By product or service, לוחצים על Data Catalog. ב-Roles, לוחצים על Policy Tag Admin.

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

התפקידים "אדמין של מדיניות נתונים ב-BigQuery", "אדמין של BigQuery" ו"בעלים של נתונים ב-BigQuery"

משתמשים עם התפקידים "אדמין של מדיניות הנתונים ב-BigQuery", "אדמין של BigQuery" ו"בעלים של נתונים ב-BigQuery" יכולים לנהל את מדיניות הנתונים.

כדי להקצות את אחד מהתפקידים האלה, אתם צריכים את ההרשאה resourcemanager.projects.setIamPolicy בפרויקט שבו אתם רוצים להקצות את התפקיד. אם אין לכם את ההרשאה resourcemanager.projects.setIamPolicy, בקשו מ-Project Owner לתת לכם את ההרשאה או לבצע בשבילכם את השלבים הבאים.

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

    כניסה לדף IAM

  2. אם כתובת האימייל של המשתמש שרוצים לתת לו את התפקיד מופיעה ברשימה, בוחרים את כתובת האימייל ולוחצים על Edit. ואז לוחצים על Add another role.

    אם כתובת האימייל של המשתמש לא מופיעה ברשימה, לוחצים על Add ומזינים את כתובת האימייל בתיבה New principals.

  3. לוחצים על הרשימה הנפתחת Select a role.

  4. לוחצים על BigQuery ואז על BigQuery Data Policy Admin (אדמין של מדיניות הנתונים ב-BigQuery), על BigQuery Admin (אדמין של BigQuery) או על BigQuery Data Owner (הבעלים של נתוני BigQuery).

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

התפקיד "צפייה בארגון"

התפקיד Organization Viewer מאפשר למשתמשים לראות פרטים על משאב הארגון. כדי להקצות את התפקיד הזה, אתם צריכים את ההרשאה resourcemanager.organizations.setIamPolicy ברמת הארגון.

התפקיד "קורא ברמת פירוט גבוהה ב-Data Catalog"

משתמשים שצריכים גישה לנתונים שמוגנים באמצעות בקרת גישה ברמת העמודה, צריכים את התפקיד "קורא עם הרשאות גישה מפורטות" ב-Data Catalog או כל תפקיד אחר שכולל את ההרשאה datacatalog.categories.fineGrainedGet. התפקיד הזה מוקצה לחשבונות משתמשים כחלק מההגדרה של תג מדיניות.

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

להוראות, קראו את המאמר הגדרת הרשאות בתגי מדיניות.

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

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

  • יוצרים טקסונומיה של תגי מדיניות.
  • משייכים את חשבונות המשתמשים לתגי המדיניות ונותנים להם את התפקיד "קורא ברמת פירוט גבוהה ב-Data Catalog".
  • משייכים את תגי המדיניות לעמודות בטבלה ב-BigQuery.
  • אוכפים את בקרת הגישה בטקסונומיה שמכילה את תגי המדיניות.

יצירת טקסונומיות

למשתמש או לחשבון השירות שיוצרים טקסונומיה צריך להקצות את התפקיד "אדמין של תגי מדיניות ב-Data Catalog".

המסוף

  1. נכנסים לדף Policy tag taxonomies במסוף Google Cloud .

    כניסה לדף Policy tag taxonomies

  2. לוחצים על Create taxonomy.
  3. בדף New taxonomy:

    1. בשדה Taxonomy name, מזינים את שם הטקסונומיה שרוצים ליצור.
    2. בשדה Description, מזינים תיאור.
    3. אם צריך, משנים את הפרויקט שמופיע בקטע Project.
    4. אם צריך, משנים את המיקום שמופיע בקטע מיקום.
    5. בקטע Policy Tags, מזינים שם ותיאור לתג המדיניות.
    6. כדי להוסיף תג מדיניות צאצא לתג מדיניות, לוחצים על Add subtag.
    7. כדי להוסיף תג מדיניות חדש באותה רמה של תג מדיניות אחר, לוחצים על ‎+ Add policy tag.
    8. ממשיכים להוסיף תגי מדיניות ותגי מדיניות צאצאים לפי הצורך בטקסונומיה.
    9. כשמסיימים ליצור את תגי המדיניות להיררכיה, לוחצים על Create.

API

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

  1. מפעילים את taxonomies.create כדי ליצור טקסונומיה.
  2. מפעילים את taxonomies.policyTags.create כדי ליצור תג מדיניות.

הגדרת הרשאות לתגי מדיניות

למשתמש או לחשבון השירות שיוצרים טקסונומיה צריך להקצות את התפקיד "אדמין של תגי מדיניות ב-Data Catalog".

המסוף

  1. נכנסים לדף Policy tag taxonomies במסוף Google Cloud .

    כניסה לדף Policy tag taxonomies

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

  3. בוחרים תג מדיניות אחד או יותר.

  4. אם חלונית המידע מוסתרת, לוחצים על הצגת חלונית המידע.

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

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

API

מפעילים את taxonomies.policytag.setIamPolicy כדי לתת גישה לתג מדיניות באמצעות הקצאת חשבונות משתמשים לתפקידים המתאימים.

הגדרת תגי מדיניות בעמודות

המשתמש או חשבון השירות שמגדירים תג מדיניות צריכים את ההרשאות datacatalog.taxonomies.get ו-bigquery.tables.setCategory. datacatalog.taxonomies.get נכללת בתפקידים "אדמין של תגי מדיניות ב-Data Catalog" ו"צפייה בפרויקט". ההרשאה bigquery.tables.setCategory נכללת בתפקידים BigQuery Admin (roles/bigquery.admin) ו-BigQuery Data Owner (roles/bigquery.dataOwner).

כדי לראות טקסונומיות ותגי מדיניות בכל הפרויקטים בארגון במסוףGoogle Cloud , המשתמשים צריכים את ההרשאה resourcemanager.organizations.get, שנכללת בתפקיד Organization Viewer. ההרשאה הזו לא נדרשת כשמשתמשים ב-API או בכלי שורת הפקודה bq.

המסוף

מגדירים את תג המדיניות על ידי שינוי הסכימה באמצעות מסוףGoogle Cloud .

  1. פותחים את הדף BigQuery במסוף Google Cloud .

    כניסה לדף BigQuery

  2. ב-BigQuery Explorer, מאתרים ובוחרים את הטבלה שרוצים לעדכן. סכימת הטבלה של אותה טבלה נפתחת.

  3. לוחצים על Edit Schema.

  4. במסך Current schema, בוחרים את עמודת היעד ולוחצים על הוספת תג מדיניות.

  5. במסך Add a policy tag, מאתרים ובוחרים את תג המדיניות שרוצים להחיל על העמודה.

  6. לוחצים על בחירה. המסך אמור להיראות כמו בדוגמה הבאה:

    עריכת הסכימה.

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

BQ

  1. כותבים את הסכימה בקובץ מקומי.

    bq show --schema --format=prettyjson \
       project-id:dataset.table > schema.json

    כאשר:

    • ‫project-id הוא מזהה הפרויקט.
    • ‫dataset הוא השם של קבוצת הנתונים שמכילה את הטבלה שמעדכנים.
    • ‫table הוא שם הטבלה שמעדכנים.
  2. משנים את schema.json כדי להגדיר תג מדיניות בעמודה. בשדה names של policyTags, משתמשים בשם המשאב של תג המדיניות.

    [
     ...
     {
       "name": "ssn",
       "type": "STRING",
       "mode": "REQUIRED",
       "policyTags": {
         "names": ["projects/project-id/locations/location/taxonomies/taxonomy-id/policyTags/policytag-id"]
       }
     },
     ...
    ]
  3. מעדכנים את הסכימה.

    bq update \
       project-id:dataset.table schema.json

API

בטבלאות קיימות, מפעילים את tables.patch, ובטבלאות חדשות מפעילים את tables.insert. כדי להגדיר תג מדיניות בסכימה, משתמשים במאפיין schema של האובייקט Table שמעבירים. כדי לראות איך מגדירים תג מדיניות, עיינו בסכימה לדוגמה של שורת הפקודה.

כשעובדים עם טבלה קיימת, עדיף להשתמש ב-method‏ tables.patch, כי ה-method‏ tables.update מחליפה את כל משאב הטבלה.

דרכים נוספות להגדיר תגי מדיניות בעמודות

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

  • משתמשים ב-bq mk כדי ליצור טבלה. מעבירים סכימה שבה משתמשים כדי ליצור את הטבלה.
  • משתמשים ב-bq load כדי לטעון נתונים לטבלה. מעבירים סכימה לשימוש בזמן טעינת הטבלה.

מידע כללי על סכימות זמין במאמר ציון סכימה.

אכיפה של בקרת גישה

כדי להפעיל או להשבית את אכיפת בקרת הגישה, צריך לפעול לפי ההוראות הבאות.

כדי לאכוף בקרת גישה, צריך ליצור מדיניות נתונים. אם אתם אוכפים את בקרת הגישה באמצעות מסוףGoogle Cloud , הפעולה הזו מתבצעת בשבילכם. אם אתם רוצים לאכוף בקרת גישה באמצעות BigQuery Data Policy API, אתם צריכים ליצור את מדיניות הנתונים באופן מפורש.

לחשבון המשתמש שאוכף את בקרת הגישה צריך להיות תפקיד אדמין ב-BigQuery או תפקיד בעלים של נתונים ב-BigQuery. לחשבון המשתמש צריך להיות גם התפקיד Data Catalog Admin או התפקיד Data Catalog Viewer.

כדי להפסיק את האכיפה של בקרת הגישה, אם היא מופעלת, לוחצים על Enforce access control כדי להחליף את מצב הבקרה.

אם יש לכם מדיניות נתונים שמשויכת לאחד מתגי המדיניות בטקסונומיה, אתם צריכים למחוק את כל מדיניות הנתונים בטקסונומיה לפני שתפסיקו את האכיפה של בקרת הגישה. אם אתם מוחקים את מדיניות הנתונים באמצעות BigQuery Data Policy API, אתם צריכים למחוק את כל כללי מדיניות הנתונים עם dataPolicyType של DATA_MASKING_POLICY. מידע נוסף זמין במאמר מדיניות מחיקת נתונים.

יצירת מדיניות נתונים

כדי ליצור מדיניות נתונים:

המסוף

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

  1. נכנסים לדף Policy tag taxonomies במסוף Google Cloud .

    כניסה לדף Policy tag taxonomies

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

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

API

משתמשים ב-method‏ create ומעבירים משאב DataPolicy שבו השדה dataPolicyType מוגדר כ-COLUMN_LEVEL_SECURITY_POLICY.

קבלת מדיניות נתונים

כדי לקבל מידע על מדיניות נתונים:

Node.js

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

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

const {DataPolicyServiceClient} =
  require('@google-cloud/bigquery-datapolicies').v2;
const {status} = require('@grpc/grpc-js');

const client = new DataPolicyServiceClient();

/**
 * Gets a specific data policy from the BigQuery Data Policy API by its name.
 *
 * This sample demonstrates how to fetch the details of an existing data policy.
 * Data policies are used to define rules for data masking or row-level security
 * on BigQuery tables.
 *
 * @param {string} projectId The Google Cloud project ID (for example, 'example-project-id')
 * @param {string} [location='us'] The Google Cloud location of the data policy (For example, 'us', 'europe-west2').
 * @param {string} [dataPolicyId='example-data-policy'] The ID of the data policy to retrieve.
 */
async function getDataPolicy(
  projectId,
  location = 'us',
  dataPolicyId = 'example-data-policy',
) {
  const name = client.dataPolicyPath(projectId, location, dataPolicyId);

  const request = {
    name,
  };

  try {
    const [dataPolicy] = await client.getDataPolicy(request);
    console.log('Successfully retrieved data policy:');
    console.log(`  Name: ${dataPolicy.name}`);
    console.log(`  Type: ${dataPolicy.dataPolicyType}`);
    if (dataPolicy.dataMaskingPolicy) {
      console.log(
        `  Data Masking Policy: ${dataPolicy.dataMaskingPolicy.predefinedExpression || dataPolicy.dataMaskingPolicy.routine}`,
      );
    }
    if (dataPolicy.grantees && dataPolicy.grantees.length > 0) {
      console.log(`  Grantees: ${dataPolicy.grantees.join(', ')}`);
    }
  } catch (err) {
    if (err.code === status.NOT_FOUND) {
      console.error(
        `Error: Data policy '${dataPolicyId}' not found in location '${location}' for project '${projectId}'.`,
      );
      console.error(
        'Make sure the data policy ID, project ID, and location are correct.',
      );
    } else {
      console.error('Error retrieving data policy:', err.message);
    }
  }
}

Python

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

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

from google.api_core import exceptions
from google.cloud import bigquery_datapolicies_v2

client = bigquery_datapolicies_v2.DataPolicyServiceClient()


def get_data_policy(
    project_id: str,
    location: str,
    data_policy_id: str,
) -> None:
    """Gets a specific data policy from the BigQuery Data Policy API by its name.


    Args:
        project_id: The Google Cloud project ID.
        location: The geographic location of the data policy (for example, "us", "eu").
        data_policy_id: The user-assigned ID of the data policy.
    """
    client = bigquery_datapolicies_v2.DataPolicyServiceClient()

    data_policy_name = client.data_policy_path(
        project=project_id,
        location=location,
        data_policy=data_policy_id,
    )

    try:
        response = client.get_data_policy(name=data_policy_name)

        print(f"Successfully retrieved data policy: {response.name}")
        print(f"  Data Policy ID: {response.data_policy_id}")
        print(f"  Data Policy Type: {response.data_policy_type.name}")
        if response.policy_tag:
            print(f"  Policy Tag: {response.policy_tag}")
        if response.grantees:
            print(f"  Grantees: {', '.join(response.grantees)}")
        if response.data_masking_policy:
            masking_policy = response.data_masking_policy
            if masking_policy.predefined_expression:
                print(
                    f"  Data Masking Predefined Expression: {masking_policy.predefined_expression.name}"
                )
            elif masking_policy.routine:
                print(f"  Data Masking Routine: {masking_policy.routine}")

    except exceptions.NotFound:
        print(f"Error: Data policy '{data_policy_name}' not found.")
        print("Make sure the data policy ID, project ID, and location are correct.")
    except Exception as e:
        print(f"An unexpected error occurred: {e}")

Java

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

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

import com.google.api.gax.rpc.ApiException;
import com.google.api.gax.rpc.NotFoundException;
import com.google.cloud.bigquery.datapolicies.v2.DataMaskingPolicy;
import com.google.cloud.bigquery.datapolicies.v2.DataMaskingPolicy.PredefinedExpression;
import com.google.cloud.bigquery.datapolicies.v2.DataPolicy;
import com.google.cloud.bigquery.datapolicies.v2.DataPolicyName;
import com.google.cloud.bigquery.datapolicies.v2.DataPolicyServiceClient;
import java.io.IOException;

public class GetDataPolicy {

  /**
   * Gets a specific data policy from the BigQuery Data Policy API by its name.
   *
   * @param projectId The Google Cloud project ID (for example, "example-project-id").
   * @param location The geographic location of the data policy (for example, "us-central1").
   * @param dataPolicyId The user-assigned ID of the data policy (for example,
   *     "example_data_policy").
   */
  public static void getDataPolicy(String projectId, String location, String dataPolicyId) {
    DataPolicyName dataPolicyName = DataPolicyName.of(projectId, location, dataPolicyId);

    try (DataPolicyServiceClient client = DataPolicyServiceClient.create()) {
      DataPolicy response = client.getDataPolicy(dataPolicyName);

      System.out.printf("Successfully retrieved data policy: %s%n", response.getName());
      System.out.printf("  Data Policy ID: %s%n", response.getDataPolicyId());
      System.out.printf("  Data Policy Type: %s%n", response.getDataPolicyType());
      if (!response.getPolicyTag().isEmpty()) {
        System.out.printf("  Policy Tag: %s%n", response.getPolicyTag());
      }
      if (!response.getGranteesList().isEmpty()) {
        System.out.printf("  Grantees: %s%n", String.join(", ", response.getGranteesList()));
      }
      if (response.hasDataMaskingPolicy()) {
        DataMaskingPolicy maskingPolicy = response.getDataMaskingPolicy();
        if (maskingPolicy.getPredefinedExpression()
            != PredefinedExpression.PREDEFINED_EXPRESSION_UNSPECIFIED) {
          System.out.printf(
              "  Data Masking Predefined Expression: %s%n",
              maskingPolicy.getPredefinedExpression());
        } else if (!maskingPolicy.getRoutine().isEmpty()) {
          System.out.printf("  Data Masking Routine: %s%n", maskingPolicy.getRoutine());
        }
      }
    } catch (NotFoundException err) {
      System.err.printf(
          "error: data policy '%s' not found: %s%n", dataPolicyName, err.getMessage());
    } catch (ApiException | IOException err) {
      System.err.printf(
          "error: failed to get data policy '%s': %s%n", dataPolicyName, err.getMessage());
    }
  }

קבלת מדיניות ניהול הזהויות והרשאות הגישה (IAM) של מדיניות נתונים

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

Node.js

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

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

const {DataPolicyServiceClient} =
  require('@google-cloud/bigquery-datapolicies').v2;
const {status} = require('@grpc/grpc-js');

const client = new DataPolicyServiceClient();

/**
 * Get the IAM policy for a specified data policy resource from the BigQuery Data Policy API.
 * This is useful for auditing which members have which roles on the policy.
 *
 *
 * @param {string} projectId Google Cloud Project ID (For example, 'example-project-id')
 * @param {string} location Google Cloud Location (For example, 'us-central1')
 * @param {string} dataPolicyId The ID of the data policy (For example, 'example-data-policy-id')
 */
async function getIamPolicy(projectId, location, dataPolicyId) {
  const resourceName = client.dataPolicyPath(projectId, location, dataPolicyId);

  const request = {
    resource: resourceName,
  };

  try {
    const [policy] = await client.getIamPolicy(request);
    console.log(
      'Successfully retrieved IAM policy for data policy %s:',
      resourceName,
    );
    console.log(JSON.stringify(policy, null, 2));
  } catch (err) {
    if (err.code === status.NOT_FOUND) {
      console.error(
        `Error: Data Policy '${dataPolicyId}' not found in location '${location}' of project '${projectId}'. ` +
          'Make sure the data policy exists and the resource name is correct.',
      );
    } else {
      console.error(
        `Error getting IAM policy for data policy '${dataPolicyId}':`,
        err,
      );
    }
  }
}

Python

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

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

from google.api_core import exceptions
from google.cloud import bigquery_datapolicies_v2
from google.iam.v1 import iam_policy_pb2

client = bigquery_datapolicies_v2.DataPolicyServiceClient()


def get_data_policy_iam_policy(
    project_id: str,
    location: str,
    data_policy_id: str,
) -> None:
    """Get the IAM policy for a specified data policy resource from the BigQuery Data Policy API.
    This is useful for auditing which members have which roles on the policy.

    Args:
        project_id: The Google Cloud project ID.
        location: The geographic location of the data policy (for example, "us").
        data_policy_id: The ID of the data policy.
    """

    resource_name = client.data_policy_path(
        project=project_id,
        location=location,
        data_policy=data_policy_id,
    )

    request = iam_policy_pb2.GetIamPolicyRequest(resource=resource_name)

    try:
        policy = client.get_iam_policy(request=request)

        print(f"Successfully retrieved IAM policy for data policy: {resource_name}")
        print("Policy Version:", policy.version)
        if policy.bindings:
            print("Policy Bindings:")
            for binding in policy.bindings:
                print(f"  Role: {binding.role}")
                print(f"  Members: {', '.join(binding.members)}")
                if binding.condition.expression:
                    print(f"  Condition: {binding.condition.expression}")
        else:
            print("No bindings found in the policy.")

    except exceptions.NotFound:
        print(f"Error: Data policy '{resource_name}' not found.")
        print("Make sure the project ID, location, and data policy ID are correct.")
    except exceptions.GoogleAPIError as e:
        print(f"An API error occurred: {e}")
    except Exception as e:
        print(f"An unexpected error occurred: {e}")

Java

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

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

import com.google.api.gax.rpc.ApiException;
import com.google.api.gax.rpc.NotFoundException;
import com.google.cloud.bigquery.datapolicies.v2.DataPolicyName;
import com.google.cloud.bigquery.datapolicies.v2.DataPolicyServiceClient;
import com.google.iam.v1.Binding;
import com.google.iam.v1.GetIamPolicyRequest;
import com.google.iam.v1.Policy;
import java.io.IOException;

public class GetIamPolicy {

  /**
   * Gets the IAM policy for a specified data policy resource from the BigQuery Data Policy API.
   *
   * @param projectId The Google Cloud project ID (for example, "example-project-id").
   * @param location The geographic location of the data policy (for example, "us-central1").
   * @param dataPolicyId The ID of the data policy (for example, "example_data_policy").
   */
  public static void getIamPolicy(String projectId, String location, String dataPolicyId) {
    DataPolicyName resourceName = DataPolicyName.of(projectId, location, dataPolicyId);

    GetIamPolicyRequest request =
        GetIamPolicyRequest.newBuilder().setResource(resourceName.toString()).build();

    try (DataPolicyServiceClient client = DataPolicyServiceClient.create()) {
      Policy policy = client.getIamPolicy(request);

      System.out.printf("Successfully retrieved IAM policy for data policy: %s%n", resourceName);
      System.out.printf("Policy Version: %d%n", policy.getVersion());
      if (policy.getBindingsCount() > 0) {
        System.out.println("Policy Bindings:");
        for (Binding binding : policy.getBindingsList()) {
          System.out.printf("  Role: %s%n", binding.getRole());
          System.out.printf("  Members: %s%n", String.join(", ", binding.getMembersList()));
          if (binding.hasCondition() && !binding.getCondition().getExpression().isEmpty()) {
            System.out.printf("  Condition: %s%n", binding.getCondition().getExpression());
          }
        }
      } else {
        System.out.println("No bindings found in the policy.");
      }
    } catch (NotFoundException err) {
      System.err.printf("error: data policy '%s' not found: %s%n", resourceName, err.getMessage());
    } catch (ApiException | IOException err) {
      System.err.printf(
          "error: failed to get IAM policy for data policy '%s': %s%n",
          resourceName, err.getMessage());
    }
  }

הצגת רשימה של כללי מדיניות הנתונים

כדי להציג רשימה של כללי מדיניות הנתונים:

Node.js

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

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

const {DataPolicyServiceClient} =
  require('@google-cloud/bigquery-datapolicies').v2;
const {status} = require('@grpc/grpc-js');

const client = new DataPolicyServiceClient();

/**
 * Lists all data policies in a given project and location.
 *
 * Data policies define rules for data masking, row-level security, or column-level security.
 *
 * @param {string} projectId The Google Cloud project ID. (for example, 'example-project-id')
 * @param {string} location The Google Cloud location of the data policies. (For example, 'us')
 */
async function listDataPolicies(projectId, location) {
  const parent = `projects/${projectId}/locations/${location}`;

  const request = {
    parent,
  };

  try {
    console.log(
      `Listing data policies for project: ${projectId} in location: ${location}`,
    );
    const [dataPolicies] = await client.listDataPolicies(request);

    if (dataPolicies.length === 0) {
      console.log(
        `No data policies found in location ${location} for project ${projectId}.`,
      );
      return;
    }

    console.log('Data Policies:');
    for (const dataPolicy of dataPolicies) {
      console.log(`  Data Policy Name: ${dataPolicy.name}`);
      console.log(`    ID: ${dataPolicy.dataPolicyId}`);
      console.log(`    Type: ${dataPolicy.dataPolicyType}`);
      if (dataPolicy.policyTag) {
        console.log(`    Policy Tag: ${dataPolicy.policyTag}`);
      }
      if (dataPolicy.grantees && dataPolicy.grantees.length > 0) {
        console.log(`    Grantees: ${dataPolicy.grantees.join(', ')}`);
      }
      if (dataPolicy.dataMaskingPolicy) {
        if (dataPolicy.dataMaskingPolicy.predefinedExpression) {
          console.log(
            `    Data Masking Predefined Expression: ${dataPolicy.dataMaskingPolicy.predefinedExpression}`,
          );
        } else if (dataPolicy.dataMaskingPolicy.routine) {
          console.log(
            `    Data Masking Routine: ${dataPolicy.dataMaskingPolicy.routine}`,
          );
        }
      }
    }

    console.log(`Successfully listed ${dataPolicies.length} data policies.`);
  } catch (err) {
    if (err.code === status.NOT_FOUND) {
      console.error(
        `Error: The project or location '${location}' for project '${projectId}' was not found. ` +
          'Make sure the project ID and location are correct and that the BigQuery Data Policy API is enabled.',
      );
    } else if (err.code === status.PERMISSION_DENIED) {
      console.error(
        `Error: Permission denied when listing data policies for project '${projectId}' in location '${location}'. ` +
          'Make sure the authenticated account has the necessary permissions (For example, bigquery.datapolicies.list).',
      );
    } else {
      console.error(`Error listing data policies: ${err.message}`);
    }
  }
}

Python

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

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

import google.api_core.exceptions
from google.cloud import bigquery_datapolicies_v2

client = bigquery_datapolicies_v2.DataPolicyServiceClient()


def list_data_policies(project_id: str, location: str) -> None:
    """Lists all data policies in a specified project.

    Args:
        project_id: The Google Cloud project ID.
        location: The geographic location of the data policies (for example, "us", "us-central1").
    """

    parent = f"projects/{project_id}/locations/{location}"

    try:
        request = bigquery_datapolicies_v2.ListDataPoliciesRequest(parent=parent)

        print(
            f"Listing data policies for project '{project_id}' in location '{location}':"
        )
        page_result = client.list_data_policies(request=request)

        found_policies = False
        for data_policy in page_result:
            found_policies = True
            print(f"  Data Policy Name: {data_policy.name}")
            print(f"  Data Policy ID: {data_policy.data_policy_id}")
            print(f"  Data Policy Type: {data_policy.data_policy_type.name}")
            if data_policy.policy_tag:
                print(f"  Policy Tag: {data_policy.policy_tag}")
            if data_policy.grantees:
                print(f"  Grantees: {', '.join(data_policy.grantees)}")
            print("-" * 20)

        if not found_policies:
            print("No data policies found.")

    except google.api_core.exceptions.NotFound as e:
        print(f"Error: The specified project or location was not found or accessible.")
        print(f"Details: {e}")
        print(
            "Make sure the project ID and location are correct and you have the necessary permissions."
        )
    except Exception as e:
        print(f"An unexpected error occurred: {e}")

Java

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

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

import com.google.api.gax.rpc.ApiException;
import com.google.api.gax.rpc.NotFoundException;
import com.google.cloud.bigquery.datapolicies.v2.DataPolicy;
import com.google.cloud.bigquery.datapolicies.v2.DataPolicyServiceClient;
import com.google.cloud.bigquery.datapolicies.v2.DataPolicyServiceClient.ListDataPoliciesPagedResponse;
import com.google.cloud.bigquery.datapolicies.v2.ListDataPoliciesRequest;
import com.google.cloud.bigquery.datapolicies.v2.LocationName;
import java.io.IOException;

public class ListDataPolicies {

  /**
   * Lists all data policies in a specified project and location.
   *
   * @param projectId The Google Cloud project ID (for example, "example-project-id").
   * @param location The geographic location of the data policies (for example, "us-central1").
   */
  public static void listDataPolicies(String projectId, String location) {
    LocationName parent = LocationName.of(projectId, location);

    ListDataPoliciesRequest request =
        ListDataPoliciesRequest.newBuilder().setParent(parent.toString()).build();

    try (DataPolicyServiceClient client = DataPolicyServiceClient.create()) {
      System.out.printf(
          "Listing data policies for project '%s' in location '%s':%n", projectId, location);
      ListDataPoliciesPagedResponse pageResult = client.listDataPolicies(request);

      boolean foundPolicies = false;
      for (DataPolicy dataPolicy : pageResult.iterateAll()) {
        foundPolicies = true;
        System.out.printf("  Data Policy Name: %s%n", dataPolicy.getName());
        System.out.printf("  Data Policy ID: %s%n", dataPolicy.getDataPolicyId());
        System.out.printf("  Data Policy Type: %s%n", dataPolicy.getDataPolicyType());
        if (!dataPolicy.getPolicyTag().isEmpty()) {
          System.out.printf("  Policy Tag: %s%n", dataPolicy.getPolicyTag());
        }
        if (!dataPolicy.getGranteesList().isEmpty()) {
          System.out.printf("  Grantees: %s%n", String.join(", ", dataPolicy.getGranteesList()));
        }
        System.out.println("--------------------");
      }

      if (!foundPolicies) {
        System.out.println("No data policies found.");
      }
    } catch (NotFoundException err) {
      System.err.printf(
          "error: project '%s' or location '%s' was not found: %s%n",
          projectId, location, err.getMessage());
    } catch (ApiException | IOException err) {
      System.err.printf(
          "error: failed to list data policies in location '%s' for project '%s': %s%n",
          location, projectId, err.getMessage());
    }
  }

מחיקת מדיניות נתונים

כדי למחוק מדיניות נתונים:

Node.js

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

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

const {DataPolicyServiceClient} =
  require('@google-cloud/bigquery-datapolicies').v2;
const {status} = require('@grpc/grpc-js');

const client = new DataPolicyServiceClient();

/**
 * Deletes a data policy from the BigQuery Data Policy API, which is identified by its project ID, location, and data policy ID.
 *
 * @param {string} projectId The Google Cloud project ID.
 * @param {string} location The Google Cloud location (For example, 'us').
 * @param {string} dataPolicyId The ID of the data policy to delete (For example, 'example-data-policy').
 */
async function deleteDataPolicy(projectId, location, dataPolicyId) {
  const name = client.dataPolicyPath(projectId, location, dataPolicyId);

  const request = {
    name,
  };

  try {
    await client.deleteDataPolicy(request);
    console.log(`Successfully deleted data policy: ${name}`);
  } catch (err) {
    if (err.code === status.NOT_FOUND) {
      console.error(
        `Data policy ${name} not found. Make sure the data policy ID and location are correct.`,
      );
    } else {
      console.error(`Error deleting data policy ${name}:`, err.message);
    }
  }
}

Python

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

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

from google.api_core import exceptions as core_exceptions
from google.cloud import bigquery_datapolicies_v2

client = bigquery_datapolicies_v2.DataPolicyServiceClient()


def delete_data_policy(project_id: str, location: str, data_policy_id: str) -> None:
    """Deletes a data policy from the BigQuery Data Policy APIs.

    Args:
        project_id: The Google Cloud project ID.
        location: The location of the data policy (for example, "us").
        data_policy_id: The ID of the data policy to delete.
    """

    name = client.data_policy_path(
        project=project_id, location=location, data_policy=data_policy_id
    )

    try:
        client.delete_data_policy(name=name)
        print(f"Successfully deleted data policy: {name}")
    except core_exceptions.NotFound:
        print(f"Data policy '{name}' not found. It may have already been deleted.")
    except Exception as e:
        print(f"Error deleting data policy '{name}': {e}")

Java

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

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

import com.google.api.gax.rpc.ApiException;
import com.google.api.gax.rpc.NotFoundException;
import com.google.cloud.bigquery.datapolicies.v2.DataPolicyName;
import com.google.cloud.bigquery.datapolicies.v2.DataPolicyServiceClient;
import java.io.IOException;

public class DeleteDataPolicy {

  /**
   * Deletes a data policy from the BigQuery Data Policy API.
   *
   * @param projectId The Google Cloud project ID (for example, "example-project-id").
   * @param location The geographic location of the data policy (for example, "us-central1").
   * @param dataPolicyId The ID of the data policy to delete (for example, "example_data_policy").
   */
  public static void deleteDataPolicy(String projectId, String location, String dataPolicyId) {
    DataPolicyName name = DataPolicyName.of(projectId, location, dataPolicyId);

    try (DataPolicyServiceClient client = DataPolicyServiceClient.create()) {
      client.deleteDataPolicy(name);
      System.out.printf("Successfully deleted data policy: %s%n", name);
    } catch (NotFoundException err) {
      System.err.printf(
          "error: data policy '%s' not found: %s%n", name, err.getMessage());
    } catch (ApiException | IOException err) {
      System.err.printf(
          "error: failed to delete data policy '%s': %s%n", name, err.getMessage());
    }
  }

עבודה עם תגי מדיניות

בקטע הזה מוסבר איך להציג, לשנות ולמחוק תגי מדיניות.

הצגת תגי מדיניות

כדי לראות את תגי המדיניות שיצרתם לטקסונומיה:

  1. נכנסים לדף Policy tag taxonomies במסוף Google Cloud .

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

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

הצגת תגי מדיניות בסכימה

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

הרשאות צפייה בתגי מדיניות

  1. נכנסים לדף Policy tag taxonomies במסוף Google Cloud .

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

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

עדכון ההרשאות בתגי מדיניות

למשתמש או לחשבון השירות שיוצרים טקסונומיה צריך להקצות את התפקיד "אדמין של תגי מדיניות ב-Data Catalog".

המסוף

  1. נכנסים לדף Policy tag taxonomies במסוף Google Cloud .

    כניסה לדף Policy tag taxonomies

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

  3. בוחרים תג מדיניות אחד או יותר.

  4. אם חלונית המידע מוסתרת, לוחצים על הצגת חלונית המידע.

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

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

API

מפעילים את taxonomies.policytag.setIamPolicy כדי לתת גישה לתג מדיניות באמצעות הקצאת חשבונות משתמשים לתפקידים המתאימים.

אחזור שמות המשאבים של תגי המדיניות

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

כדי לאחזר את שם המשאב של תג המדיניות:

  1. מציגים את תגי המדיניות של הטקסונומיה שמכילה את תג המדיניות.

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

  3. לוחצים על הסמל Copy policy tag resource name.

    העתקת שם המשאב.

מחיקת תגי מדיניות

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

המסוף

בדף Current schema, בקטע תגי מדיניות, לוחצים על X.

מחיקת תג המדיניות.

BQ

  1. אחזור הסכימה ושמירה שלה בקובץ מקומי.

    bq show --schema --format=prettyjson \
       project-id:dataset.table > schema.json

    כאשר:

    • ‫project-id הוא מזהה הפרויקט.
    • ‫dataset הוא השם של קבוצת הנתונים שמכילה את הטבלה שמעדכנים.
    • ‫table הוא שם הטבלה שמעדכנים.
  2. משנים את schema.json כדי להסיר תג מדיניות מעמודה.

    [
     ...
     {
       "name": "ssn",
       "type": "STRING",
       "mode": "REQUIRED",
       "policyTags": {
         "names": []
       }
     },
     ...
    ]
  3. מעדכנים את הסכימה.

    bq update \
       project-id:dataset.table schema.json

API

קוראים ל-tables.patch ומשתמשים במאפיין schema כדי למחוק תג מדיניות בהגדרת הסכימה. בסכימה לדוגמה של שורת הפקודה מוסבר איך למחוק תג מדיניות.

ה-method‏ tables.update מחליפה את כל משאב הטבלה, ולכן עדיף להשתמש ב-method‏ tables.patch.

מחיקת תגי מדיניות

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

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

כדי למחוק תג מדיניות אחד או יותר בטקסונומיה:

  1. נכנסים לדף Policy tag taxonomies במסוף Google Cloud .

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

  2. לוחצים על שם הטקסונומיה שמכילה את התגים שרוצים למחוק.
  3. לוחצים על Edit.
  4. לוחצים על לצד תגי המדיניות שרוצים למחוק.
  5. לוחצים על Save.
  6. לוחצים על אישור.

כדי למחוק טקסונומיה שלמה:

  1. נכנסים לדף Policy tag taxonomies במסוף Google Cloud .

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

  2. לוחצים על שם הטקסונומיה שמכילה את התגים שרוצים למחוק.
  3. לוחצים על Delete Policy Tag Taxonomy.
  4. מקלידים את שם הטקסונומיה ולוחצים על מחיקה.

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

אם למשתמש יש גישה לקבוצת נתונים ויש לו את התפקיד 'קורא ברמת פירוט גבוהה' ב-Data Catalog, נתוני העמודה זמינים למשתמש. המשתמש מריץ שאילתה כרגיל.

אם למשתמש יש גישה למערך הנתונים אבל אין לו את התפקיד "קורא ברמת פירוט גבוהה" ב-Data Catalog, נתוני העמודה לא זמינים למשתמש. אם משתמש כזה מריץ את SELECT *, הוא מקבל שגיאה שמפרטת את העמודות שאין לו גישה אליהן. כדי לפתור את השגיאה, אתם יכולים:

  • משנים את השאילתה כך שלא תכלול את העמודות שלמשתמש אין גישה אליהן. לדוגמה, אם למשתמש אין גישה לעמודה ssn, אבל יש לו גישה לשאר העמודות, הוא יכול להריץ את השאילתה הבאה:

    SELECT * EXCEPT (ssn) FROM ...

    בדוגמה שלמעלה, הסעיף EXCEPT מחריג את העמודה ssn.

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

שאלות נפוצות

האם אבטחה ברמת העמודה ב-BigQuery פועלת בתצוגות?

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

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

מידע נוסף זמין במאמר תצוגות מורשות.

האם בקרת הגישה ברמת העמודה פועלת בעמודות STRUCT או RECORD?

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

אפשר להשתמש גם ב-SQL מדור קודם וגם ב-GoogleSQL?

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

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

האם השאילתות נרשמות ב-Cloud Logging?

הבדיקה של תגי המדיניות מתועדת ב-Logging. למידע נוסף, קראו על יומני ביקורת לבקרת גישה ברמת העמודה.

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

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

הפעולות הבאות מאמתות את ההרשאות ברמת העמודה.

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

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

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

האם בקרת גישה ברמת העמודה תואמת לענן וירטואלי פרטי (VPC)?

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

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

כדי לאכוף את VPC על תגי מדיניות וכללי מדיניות נתונים לבקרת גישה ברמת העמודה ולהסתרת מידע דינמית, צריך להגביל את ממשקי ה-API הבאים באזור:

פתרון בעיות

בקטעים הבאים מוסבר איך לפתור בעיות שקשורות לבקרת גישה ברמת העמודה ולתגי מדיניות של Data Catalog.

אני לא רואה את התפקידים של Data Catalog

אם אתם לא רואים תפקידים כמו Data Catalog Fine-Grained Reader, יכול להיות שלא הפעלתם את Data Catalog API בפרויקט. בקטע לפני שמתחילים מוסבר איך מפעילים את Data Catalog API. התפקידים של Data Catalog מופיעים כמה דקות אחרי שמפעילים את Data Catalog API.

אני לא מצליח/ה לראות את הדף "טקסונומיות"

כדי לראות את הדף Policy tag taxonomies במסוףGoogle Cloud , צריך הרשאות נוספות. לדוגמה, לתפקיד אדמין של תגי מדיניות ב-Data Catalog יש גישה לדף Taxonomies.

אכפתי תגי מדיניות, אבל נראה שזה לא עובד

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

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

אין לי הרשאה לקרוא מטבלה עם אבטחה ברמת העמודה

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

הגדרתי בקרת גישה מפורטת (FGAC) בטקסונומיה של תגי המדיניות, אבל המשתמשים רואים נתונים מוגנים

כדי לפתור את הבעיה, צריך לוודא את הפרטים הבאים:

  • בדף Policy tag taxonomies ב-Security center של BigQuery, מוודאים שהמתג Enforce access control במצב On.
  • מוודאים שהשאילתות לא משתמשות בתוצאות של שאילתות שנשמרו במטמון. אם אתם משתמשים בכלי שורת הפקודה של BigQuery כדי לבדוק את השאילתות, השתמשו בדגל --nouse_cache כדי להשבית את המטמון של השאילתות. לדוגמה:

    bq query --nouse_cache --use_legacy_sql=false "SELECT * EXCEPT (customer_pii) FROM my_table;"

שיקולים בהעברת פרויקטים

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

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

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