בדיקת תובנות לגבי מדיניות במערכי נתונים של BigQuery

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

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

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

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

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

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

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

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

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

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

  • צפייה בתובנות לגבי מדיניות ברמת מערך הנתונים:
    • recommender.iamPolicyInsights.get
    • recommender.iamPolicyInsights.list
  • שינוי תובנות לגבי מדיניות ברמת מערך הנתונים: recommender.iamPolicyInsights.update
  • אפשר לנהל תובנות לגבי מדיניות ברמת מערך הנתונים באמצעות ה-CLI של gcloud או API בארכיטקטורת REST: serviceusage.services.use

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

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

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

gcloud

משתמשים בפקודה gcloud recommender insights list כדי לראות את כל התובנות לגבי מדיניות ברמת מערך הנתונים בפרויקט.

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

  • PROJECT_ID: המזהה של הפרויקט שרוצים לראות את התובנות לגביו.
  • LOCATION: המיקום של מערכי הנתונים שרוצים להציג את התובנות לגביהם.
gcloud recommender insights list --insight-type=google.iam.policy.Insight \
    --project=PROJECT_ID \
    --location=LOCATION\
    --filter="insightSubtype:PERMISSIONS_USAGE_BIGQUERY_DATASET"

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

INSIGHT_ID                            CATEGORY  INSIGHT_STATE  LAST_REFRESH_TIME     SEVERITY  INSIGHT_SUBTYPE                     DESCRIPTION
101d03ad-6148-4628-943e-fcf1a3af6b57  SECURITY  ACTIVE         2024-02-02T08:00:00Z  LOW       PERMISSIONS_USAGE_BIGQUERY_DATASET  0 of the permissions in this role binding were used in the past 90 days.
15133dd9-4cbc-41e9-8990-b189241676d8  SECURITY  ACTIVE         2024-02-02T08:00:00Z  LOW       PERMISSIONS_USAGE_BIGQUERY_DATASET  0 of the permissions in this role binding were used in the past 90 days.
1590aeae-d5bf-4e3d-b7d5-e230212f5faf  SECURITY  ACTIVE         2024-02-02T08:00:00Z  LOW       PERMISSIONS_USAGE_BIGQUERY_DATASET  4 of the permissions in this role binding were used in the past 90 days.
280e5a14-4d09-4ac6-8e14-be7407611ad7  SECURITY  ACTIVE         2024-02-02T08:00:00Z  LOW       PERMISSIONS_USAGE_BIGQUERY_DATASET  0 of the permissions in this role binding were used in the past 90 days.
34102078-085f-45d3-ae72-81da16c75781  SECURITY  ACTIVE         2024-02-02T08:00:00Z  LOW       PERMISSIONS_USAGE_BIGQUERY_DATASET  10 of the permissions in this role binding were used in the past 90 days.

REST

ה-method insights.list של Recommender API מפרטת את כל התובנות לגבי מדיניות ברמת מערך הנתונים בפרויקט שלכם.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • PROJECT_ID: המזהה של הפרויקט שרוצים לראות את התובנות לגביו.
  • LOCATION: המיקום של מערכי הנתונים שרוצים להציג את התובנות לגביהם.

ה-method של ה-HTTP וכתובת ה-URL:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/insightTypes/google.iam.policy.Insight/insights?filter=insightSubtype%20%3D%20PERMISSIONS_USAGE_BIGQUERY_DATASET

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

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

{
  "insights": [
    {
      "name": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/101d03ad-6148-4628-943e-fcf1a3af6b57",
      "description": "0 of the permissions in this role binding were used in the past 90 days.",
      "content": {
        "role": "roles/bigquery.dataEditor",
        "member": "projectEditor:my-project",
        "condition": {
          "expression": "",
          "title": "",
          "description": "",
          "location": ""
        },
        "exercisedPermissions": [],
        "inferredPermissions": [],
        "currentTotalPermissionsCount": "37"
      },
      "lastRefreshTime": "2024-02-02T08:00:00Z",
      "observationPeriod": "7779600s",
      "stateInfo": {
        "state": "ACTIVE"
      },
      "category": "SECURITY",
      "associatedRecommendations": [
        {
          "recommendation": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/9327f952-1ceb-488e-9e49-f17eb21f6e5e"
        }
      ],
      "targetResources": [
        "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1"
      ],
      "insightSubtype": "PERMISSIONS_USAGE_BIGQUERY_DATASET",
      "etag": "\"35d4af47524d3f0c\"",
      "severity": "LOW"
    },
    {
      "name": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/15133dd9-4cbc-41e9-8990-b189241676d8",
      "description": "0 of the permissions in this role binding were used in the past 90 days.",
      "content": {
        "role": "roles/bigquery.dataViewer",
        "member": "projectViewer:my-project",
        "condition": {
          "expression": "",
          "title": "",
          "description": "",
          "location": ""
        },
        "exercisedPermissions": [],
        "inferredPermissions": [],
        "currentTotalPermissionsCount": "17"
      },
      "lastRefreshTime": "2024-02-02T08:00:00Z",
      "observationPeriod": "7779600s",
      "stateInfo": {
        "state": "ACTIVE"
      },
      "category": "SECURITY",
      "associatedRecommendations": [
        {
          "recommendation": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/bc9b4c28-cc93-4a91-97ea-ff67e3cef1b4"
        }
      ],
      "targetResources": [
        "//bigquery.googleapis.com/projects/my-project/datasets/dataset-2"
      ],
      "insightSubtype": "PERMISSIONS_USAGE_BIGQUERY_DATASET",
      "etag": "\"eafa79df1b329063\"",
      "severity": "LOW"
    }
  ]
}

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

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

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

gcloud

משתמשים בפקודה gcloud recommender insights describe עם מזהה התובנה כדי לראות מידע על תובנה ספציפית.

  • INSIGHT_ID: המזהה של התובנה שרוצים להציג. כדי למצוא את המזהה, מציגים את רשימת התובנות של הפרויקט.
  • PROJECT_ID: המזהה של הפרויקט שרוצים לנהל את התובנות לגביו.
  • LOCATION: המיקום של מערך הנתונים שרוצים לקבל לגביו תובנות.
gcloud recommender insights describe INSIGHT_ID \
    --insight-type=google.iam.policy.Insight \
    --project=PROJECT_ID \
    --location=LOCATION

הפלט מציג את התובנה בפירוט. לדוגמה, התובנה הבאה מציינת שלכל המשתמשים עם התפקיד Editor בפרויקט my-project (projectEditor:my-project) יש את התפקיד BigQuery Data Editor‏ (roles/bigquery.dataEditor) במערך הנתונים dataset-1, אבל אף אחת מההרשאות בתפקיד הזה לא הייתה בשימוש ב-90 הימים האחרונים:

associatedRecommendations:
- recommendation: projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/9327f951-1ceb-488e-9e49-f17eb21f6e5e
category: SECURITY
content:
  condition:
    description: ''
    expression: ''
    location: ''
    title: ''
  currentTotalPermissionsCount: '37'
  exercisedPermissions: []
  inferredPermissions: []
  member: projectEditor:my-project
  role: roles/bigquery.dataEditor
description: 0 of the permissions in this role binding were used in the past 90 days.
etag: '"5f2f352a738f7a24"'
insightSubtype: PERMISSIONS_USAGE_BIGQUERY_DATASET
lastRefreshTime: '2024-02-04T08:00:00Z'
name: projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/101d03ad-6148-4628-943e-fcf1a3af6b57
observationPeriod: 7776000s
severity: LOW
stateInfo:
  state: ACTIVE
targetResources:
- //bigquery.googleapis.com/projects/my-project/datasets/dataset-1

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

REST

ה-method insights.get של Recommender API מחזירה תובנה אחת.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • PROJECT_ID: המזהה של הפרויקט שרוצים לנהל את התובנות לגביו.
  • LOCATION: המיקום של מערך הנתונים שרוצים לקבל לגביו תובנות.
  • INSIGHT_ID: המזהה של התובנה שרוצים להציג. אם אתם לא יודעים מהו מזהה התובנה, תוכלו לראות את רשימת התובנות בפרויקט שלכם. המזהה של תובנה הוא כל מה שמופיע אחרי insights/ בשדה name של התובנה.

ה-method של ה-HTTP וכתובת ה-URL:

GET https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/insightTypes/google.iam.policy.Insight/insights/INSIGHT_ID

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

התשובה מכילה את התובנה. לדוגמה, התובנה הבאה מציינת שלכל המשתמשים עם התפקיד Editor בפרויקט my-project (projectEditor:my-project) יש את התפקיד BigQuery Data Editor‏ (roles/bigquery.dataEditor) במערך הנתונים dataset-1, אבל אף אחת מההרשאות בתפקיד הזה לא הייתה בשימוש ב-90 הימים האחרונים:

{
  "name": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/101d03ad-6148-4628-943e-fcf1a3af6b57",
  "description": "0 of the permissions in this role binding were used in the past 90 days.",
  "content": {
    "role": "roles/bigquery.dataEditor",
    "member": "projectEditor:my-project",
    "condition": {
      "expression": "",
      "title": "",
      "description": "",
      "location": ""
    },
    "exercisedPermissions": [],
    "inferredPermissions": [],
    "currentTotalPermissionsCount": "37"
  },
  "lastRefreshTime": "2024-02-02T08:00:00Z",
  "observationPeriod": "7779600s",
  "stateInfo": {
    "state": "ACTIVE"
  },
  "category": "SECURITY",
  "associatedRecommendations": [
    {
      "recommendation": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/9327f952-1ceb-488e-9e49-f17eb21f6e5e"
    }
  ],
  "targetResources": [
    "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1"
  ],
  "insightSubtype": "PERMISSIONS_USAGE_BIGQUERY_DATASET",
  "etag": "\"35d4af47524d3f0c\"",
  "severity": "LOW"
}

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

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

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

התוכן של תובנה נקבע לפי סוגי המשנה שלה. תובנות לגבי מדיניות ברמת מערך הנתונים (google.iam.policy.Insight) מסוג תובנות כוללות את סוג המשנה PERMISSIONS_USAGE_BIGQUERY_DATASET.

תובנות PERMISSIONS_USAGE_BIGQUERY_DATASET כוללות את הרכיבים הבאים, לא בהכרח בסדר הזה:

  • associatedRecommendations: המזהים של כל ההמלצות שמשויכות לתובנה. אם אין המלצות שמשויכות לתובנה, השדה הזה ריק.
  • category: הקטגוריה של תובנות IAM היא תמיד SECURITY.
  • content: מדווח על השימוש בהרשאות של חשבון משתמש בתפקיד ספציפי. השדה הזה מכיל את הרכיבים הבאים:

    • condition: תנאים כלשהם שמצורפים לקישור שמעניק לחשבון המשתמש את התפקיד. אם אין תנאים, השדה הזה מכיל תנאי ריק.
    • exercisedPermissions: ההרשאות בתפקיד שחשבון המשתמש השתמש בהן במהלך תקופת הבדיקה.
    • inferredPermissions: ההרשאות בתפקיד ששירות Recommender קבע באמצעות ML, שסביר להניח שהחשבון הראשי יזדקק להן על סמך ההרשאות שהופעלו.
    • member: חשבון המשתמש שהשימוש שלו בהרשאות נותח.
    • role: התפקיד שעבורו נותח השימוש בהרשאה.
  • description: סיכום קריא של התובנה.
  • etag: מזהה ייחודי של המצב הנוכחי של התובנה. בכל פעם שהתובנה משתנה, מוקצה לה ערך etag חדש.

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

  • insightSubtype: תת-הסוג של התובנה.
  • lastRefreshTime: התאריך שבו התובנה עודכנה לאחרונה, שמציין את עדכניות הנתונים ששימשו ליצירת התובנה.
  • name: השם של התובנה, בפורמט הבא:

    projects/PROJECT_ID/locations/LOCATION/insightTypes/google.iam.policy.Insight/insights/INSIGHT_ID

    מחליפים את ה-placeholders בערכים הבאים:

    • PROJECT_ID: המזהה של הפרויקט שבו נוצר התובנה.
    • LOCATION: המיקום של מערך הנתונים שאליו מתייחס התובנה.
    • INSIGHT_ID: מזהה ייחודי של התובנה.
  • observationPeriod: תקופת הזמן שקדמה לתובנה. הנתונים מהמקור ששימשו ליצירת התובנה מסתיימים בתאריך lastRefreshTime ומתחילים בתאריך lastRefreshTime פחות observationPeriod.
  • stateInfo: אחרי שהתובנות מוצעות, הן עוברות כמה שינויי סטטוס:

    • ACTIVE: התובנה נוצרה, אבל לא בוצעה פעולה או שבוצעה פעולה בלי לעדכן את מצב התובנה. תובנות פעילות מתעדכנות כשיש שינויים בנתוני הבסיס.
    • ACCEPTED: בוצעה פעולה מסוימת על סמך התובנה. התובנות מתקבלות כשסימנתם המלצה משויכת כCLAIMED,‏ SUCCEEDED או FAILED, או כשאישרתם את התובנה ישירות. כשמצב התובנה הוא ACCEPTED, אי אפשר לשנות את התוכן שלה. תובנות שאושרו נשמרות למשך 90 יום אחרי האישור.
  • targetResources: שם המשאב המלא של מערך הנתונים שאליו מתייחס התובנה. לדוגמה, //bigquery.googleapis.com/projects/my-project/datasets/my-dataset.

סימון תובנה לגבי מדיניות ברמת מערך הנתונים כ-ACCEPTED

אם אתם מבצעים פעולה על סמך תובנה פעילה, אתם יכולים לסמן את התובנה הזו כACCEPTED. הסטטוס ACCEPTED מציין ל-Recommender API שפעלתם על סמך התובנה הזו, וכך הוא יכול לשפר את ההמלצות.

תובנות שאושרו נשמרות למשך 90 ימים אחרי שמסמנים אותן כACCEPTED.

gcloud

משתמשים בפקודה gcloud recommender insights mark-accepted עם מזהה התובנה כדי לסמן תובנה כACCEPTED.

  • INSIGHT_ID: המזהה של התובנה שרוצים להציג. כדי למצוא את המזהה, מציגים את רשימת התובנות של הפרויקט.
  • PROJECT_ID: המזהה של הפרויקט שרוצים לנהל את התובנות לגביו.
  • LOCATION: המיקום של מערך הנתונים שרוצים לסמן את התובנה שלו כACCEPTED.
  • ETAG: מזהה של גרסת התובנה. כדי לקבל את etag, מבצעים את הפעולות הבאות:

    1. מקבלים את התובנה באמצעות הפקודה gcloud recommender insights describe.
    2. מוצאים ומעתיקים את הערך etag מהפלט, כולל המירכאות שמקיפות אותו. לדוגמה, "d3cdec23cc712bd0".
gcloud recommender insights mark-accepted INSIGHT_ID \
    --insight-type=google.iam.policy.Insight \
    --project=PROJECT_ID \
    --location=LOCATION \
    --etag=ETAG

הפלט מציג את התובנה, ועכשיו הסטטוס הוא ACCEPTED:

associatedRecommendations:
- recommendation: projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/9327f951-1ceb-488e-9e49-f17eb21f6e5e
category: SECURITY
content:
  condition:
    description: ''
    expression: ''
    location: ''
    title: ''
  currentTotalPermissionsCount: '37'
  exercisedPermissions: []
  inferredPermissions: []
  member: projectEditor:my-project
  role: roles/bigquery.dataEditor
description: 0 of the permissions in this role binding were used in the past 90 days.
etag: '"5f2f352a738f7a24"'
insightSubtype: PERMISSIONS_USAGE_BIGQUERY_DATASET
lastRefreshTime: '2024-02-04T08:00:00Z'
name: projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/101d03ad-6148-4628-943e-fcf1a3af6b57
observationPeriod: 7776000s
severity: LOW
stateInfo:
  state: ACCEPTED
targetResources:
- //bigquery.googleapis.com/projects/my-project/datasets/dataset-1

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

REST

ה-method insights.markAccepted של Recommender API מסמנת תובנה כ-ACCEPTED.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • PROJECT_ID: המזהה של הפרויקט שרוצים לנהל את התובנות לגביו.
  • LOCATION: המיקום של מערך הנתונים שרוצים לסמן את התובנה שלו כACCEPTED.
  • INSIGHT_ID: המזהה של התובנה שרוצים להציג. אם אתם לא יודעים מהו מזהה התובנה, תוכלו לראות את רשימת התובנות בפרויקט שלכם. המזהה של תובנה הוא כל מה שמופיע אחרי insights/ בשדה name של התובנה.
  • ETAG: מזהה של גרסת התובנה. כדי לקבל את etag, מבצעים את הפעולות הבאות:
    1. קבלת התובנה באמצעות השיטה insights.get.
    2. מאתרים את הערך etag בתשובה ומעתיקים אותו.

ה-method של ה-HTTP וכתובת ה-URL:

POST https://recommender.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/insightTypes/google.iam.policy.Insight/insights/INSIGHT_ID:markAccepted

תוכן בקשת JSON:

{
  "etag": "ETAG"
}

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

התשובה מכילה את התובנה, ועכשיו הסטטוס שלה הוא ACCEPTED:

{
  "name": "projects/1069248613794/locations/us/insightTypes/google.iam.policy.Insight/insights/101d03ad-6148-4628-943e-fcf1a3af6b57",
  "description": "0 of the permissions in this role binding were used in the past 90 days.",
  "content": {
    "role": "roles/bigquery.dataEditor",
    "member": "projectEditor:my-project",
    "condition": {
      "expression": "",
      "title": "",
      "description": "",
      "location": ""
    },
    "exercisedPermissions": [],
    "inferredPermissions": [],
    "currentTotalPermissionsCount": "37"
  },
  "lastRefreshTime": "2024-02-02T08:00:00Z",
  "observationPeriod": "7779600s",
  "stateInfo": {
    "state": "ACCEPTED"
  },
  "category": "SECURITY",
  "associatedRecommendations": [
    {
      "recommendation": "projects/1069248613794/locations/us/recommenders/google.iam.policy.Recommender/recommendations/9327f952-1ceb-488e-9e49-f17eb21f6e5e"
    }
  ],
  "targetResources": [
    "//bigquery.googleapis.com/projects/my-project/datasets/dataset-1"
  ],
  "insightSubtype": "PERMISSIONS_USAGE_BIGQUERY_DATASET",
  "etag": "\"35d4af47524d3f0c\"",
  "severity": "LOW"
}

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

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