כתיבת ניתוח מדיניות ל-BigQuery

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

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

מפעילים את Cloud Asset API.

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

כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

להפעלת ה-API

צריך להפעיל את ה-API בפרויקט שבו ישמש לשליחת השאילתה. המשאב הזה לא חייב להיות זהה למשאב שאליו מצומצמת השאילתה.

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

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

התפקידים שצריך ב-IAM

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

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

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

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

כדי לנתח מדיניות ולייצא את התוצאות ל-BigQuery, נדרשות ההרשאות הבאות:

  • bigquery.datasets.create
  • bigquery.jobs.create
  • bigquery.tables.create
  • bigquery.tables.get
  • bigquery.tables.updateData
  • bigquery.tables.update
  • cloudasset.assets.analyzeIamPolicy
  • cloudasset.assets.searchAllResources
  • cloudasset.assets.searchAllIamPolicies
  • כדי לנתח מדיניות עם תפקידים בהתאמה אישית ב-IAM: iam.roles.get
  • כדי להשתמש ב-Google Cloud CLI כדי לנתח מדיניות: serviceusage.services.use

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

ההרשאות הנדרשות ב-Google Workspace

כדי לראות אם לגורם יש תפקידים או הרשאות מסוימים כתוצאה מהחברות שלו בקבוצה ב-Google Workspace, צריך את ההרשאה groups.readGoogle Workspace. ההרשאה הזו כלולה בתפקיד אדמין עם גישת קריאה לקבוצות, ובתפקידים עם הרשאות נרחבות יותר כמו אדמין של קבוצות או סופר-אדמין. מידע נוסף זמין במאמר בנושא הקצאה של תפקידי אדמין ספציפיים.

ניתוח מדיניות וייצוא תוצאות

המסוף

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

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

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

  3. בשדה Select query scope (בחירת היקף השאילתה), בוחרים את הפרויקט, התיקייה או הארגון שרוצים להגדיר כהיקף השאילתה. כלי ניתוח המדיניות ינתח את הגישה לפרויקט, לתיקייה או לארגון, וגם לכל המשאבים בתוכם.

  4. מוודאים שהפרמטרים של השאילתה מוגדרים:

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

    מידע נוסף על סוגי השאילתות שאפשר ליצור זמין במאמר ניתוח מדיניות IAM.

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

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

    • Project: הפרויקט שבו נמצא מערך הנתונים שלכם ב-BigQuery.
    • Dataset: מערך הנתונים ב-BigQuery שאליו רוצים לייצא את התוצאות.
    • טבלה: הקידומת של טבלאות BigQuery שתוצאות הניתוח ייכתבו אליהן. אם לא קיימת טבלה עם הקידומת שצוינה, BigQuery יוצר טבלה חדשה.
  7. לוחצים על Continue.

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

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

כלי ניתוח המדיניות מריץ את השאילתה ומייצא את התוצאות לטבלה שצוינה.

gcloud

השיטה AnalyzeIamPolicyLongrunning מאפשרת לשלוח בקשת ניתוח ולקבל תוצאות ביעד BigQuery שצוין.

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

  • RESOURCE_TYPE: סוג המשאב שרוצים להגביל את החיפוש אליו. המערכת תנתח רק את מדיניות ההרשאות של IAM שמצורפת למשאב הזה ולצאצאים שלו. אפשר להשתמש בערך project,‏ folder או organization.
  • RESOURCE_ID: המזהה שלGoogle Cloud הפרויקט, התיקייה או הארגון שרוצים להגביל את החיפוש אליהם. רק מדיניות הרשאות של IAM שמצורפת למשאב הזה ולצאצאים שלו תנותח. מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project. מזהי תיקיות וארגונים מכילים רק ספרות, למשל 123456789012.
  • PRINCIPAL: החשבון הראשי שרוצים לנתח את הגישה שלו, בפורמט PRINCIPAL_TYPE:ID. לדוגמה, user:my-user@example.com. רשימה מלאה של סוגי החשבונות הראשיים מופיעה במאמר מזהים של חשבונות משתמשים.
  • PERMISSIONS: רשימה מופרדת בפסיקים של ההרשאות שרוצים לבדוק, לדוגמה: compute.instances.get,compute.instances.start. אם מפרטים כמה הרשאות, כלי הניתוח למדיניות יבדוק אם יש הרשאה כלשהי מהרשימה.
  • DATASET: מערך הנתונים ב-BigQuery בפורמט projects/PROJECT_ID/datasets/DATASET_ID, כאשר PROJECT_ID הוא המזהה האלפאנומרי של פרויקט Google Cloud ו-DATASET_ID הוא המזהה של מערך הנתונים.
  • TABLE_PREFIX: הקידומת של הטבלאות ב-BigQuery שאליהן ייכתבו תוצאות הניתוח. אם לא קיימת טבלה עם הקידומת שצוינה, BigQuery יוצר טבלה חדשה.
  • PARTITION_KEY: אופציונלי. מפתח המחיצה של טבלה מחולקת למחיצות ב-BigQuery. כלי ניתוח המדיניות תומך רק במפתחות חלוקה REQUEST_TIME.
  • WRITE_DISPOSITION: אופציונלי. מציין את הפעולה שמתרחשת אם טבלת היעד או המחיצה כבר קיימות. רשימה של הערכים האפשריים זמינה במאמר writeDisposition. כברירת מחדל, אם הטבלה או המחיצה כבר קיימות, אפליקציית BigQuery מוסיפה את הנתונים לטבלה או למחיצה האחרונה.

מריצים את הפקודה gcloud asset analyze-iam-policy-longrunning:

‫Linux,‏ macOS או Cloud Shell

gcloud asset analyze-iam-policy-longrunning --RESOURCE_TYPE=RESOURCE_ID \
    --full-resource-name=FULL_RESOURCE_NAME \
    --identity=PRINCIPAL \
    --permissions='PERMISSIONS' \
    --bigquery-dataset=DATASET \
    --bigquery-table-prefix=TABLE_PREFIX \
    --bigquery-partition-key=PARTITION_KEY \
    --bigquery-write-disposition=WRITE_DISPOSITION

‏Windows (PowerShell)

gcloud asset analyze-iam-policy-longrunning --RESOURCE_TYPE=RESOURCE_ID `
    --full-resource-name=FULL_RESOURCE_NAME `
    --identity=PRINCIPAL `
    --permissions='PERMISSIONS' `
    --bigquery-dataset=DATASET `
    --bigquery-table-prefix=TABLE_PREFIX `
    --bigquery-partition-key=PARTITION_KEY `
    --bigquery-write-disposition=WRITE_DISPOSITION

Windows‏ (cmd.exe)

gcloud asset analyze-iam-policy-longrunning --RESOURCE_TYPE=RESOURCE_ID ^
    --full-resource-name=FULL_RESOURCE_NAME ^
    --identity=PRINCIPAL ^
    --permissions='PERMISSIONS' ^
    --bigquery-dataset=DATASET ^
    --bigquery-table-prefix=TABLE_PREFIX ^
    --bigquery-partition-key=PARTITION_KEY ^
    --bigquery-write-disposition=WRITE_DISPOSITION

אמורים לקבל תגובה שדומה לזו:

Analyze IAM Policy in progress.
Use [gcloud asset operations describe projects/my-project/operations/AnalyzeIamPolicyLongrunning/1195028485971902504711950280359719028666] to check the status of the operation.

REST

השיטה AnalyzeIamPolicyLongrunning מאפשרת לשלוח בקשת ניתוח ולקבל תוצאות ביעד BigQuery שצוין.

כדי לנתח מדיניות הרשאות של IAM ולייצא את התוצאות ל-BigQuery, משתמשים ב-method ‏analyzeIamPolicyLongrunning של מאגר משאבי ענן API.

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

  • RESOURCE_TYPE: סוג המשאב שרוצים להגביל את החיפוש אליו. המערכת תנתח רק את מדיניות ההרשאות של IAM שמצורפת למשאב הזה ולצאצאים שלו. אפשר להשתמש בערך projects,‏ folders או organizations.
  • RESOURCE_ID: המזהה שלGoogle Cloud הפרויקט, התיקייה או הארגון שרוצים להגביל את החיפוש אליהם. רק מדיניות הרשאות של IAM שמצורפת למשאב הזה ולצאצאים שלו תנותח. מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project. מזהי תיקיות וארגונים מכילים רק ספרות, למשל 123456789012.
  • FULL_RESOURCE_NAME: אופציונלי. השם המלא של המשאב שרוצים לנתח את הגישה אליו. רשימה של הפורמטים של שמות מלאים של משאבים זמינה במאמר בנושא פורמט השמות של המשאבים.
  • PRINCIPAL: אופציונלי. החשבון הראשי שרוצים לנתח את הגישה שלו, בפורמט PRINCIPAL_TYPE:ID – לדוגמה, user:my-user@example.com. רשימה מלאה של סוגי החשבונות הראשיים מופיעה במאמר מזהים של חשבונות משתמשים.
  • PERMISSION_1, PERMISSION_2... PERMISSION_N: אופציונלי. הרשאות שרוצים לבדוק – לדוגמה, compute.instances.get. אם תציינו כמה הרשאות, כלי הניתוח למדיניות יבדוק אם יש לכם אחת מההרשאות שציינתם.
  • DATASET: מערך הנתונים ב-BigQuery בפורמט projects/PROJECT_ID/datasets/DATASET_ID, כאשר PROJECT_ID הוא המזהה האלפאנומרי של פרויקט Google Cloud ו-DATASET_ID הוא המזהה של מערך הנתונים.
  • TABLE_PREFIX: הקידומת של הטבלאות ב-BigQuery שאליהן ייכתבו תוצאות הניתוח. אם לא קיימת טבלה עם הקידומת שצוינה, BigQuery יוצר טבלה חדשה.
  • PARTITION_KEY: אופציונלי. מפתח המחיצה של טבלה מחולקת למחיצות ב-BigQuery. כלי ניתוח המדיניות תומך רק במפתחות חלוקה REQUEST_TIME.
  • WRITE_DISPOSITION: אופציונלי. מציין את הפעולה שמתרחשת אם טבלת היעד או המחיצה כבר קיימות. רשימה של הערכים האפשריים זמינה במאמר writeDisposition. כברירת מחדל, אם הטבלה או המחיצה כבר קיימות, אפליקציית BigQuery מוסיפה את הנתונים לטבלה או למחיצה האחרונה.

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

POST https://cloudasset.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID:analyzeIamPolicyLongrunning

תוכן בקשת JSON:

{
  "analysisQuery": {
    "resourceSelector": {
      "fullResourceName": "FULL_RESOURCE_NAME"
    },
    "identitySelector": {
      "identity": "PRINCIPAL"
    },
    "accessSelector": {
      "permissions": [
        "PERMISSION_1",
        "PERMISSION_2",
        "PERMISSION_N"
      ]
    }
  },
  "outputConfig": {
    "bigqueryDestination": {
      "dataset": "DATASET",
      "tablePrefix": "TABLE_PREFIX",
      "partitionKey": "PARTITION_KEY",
      "writeDisposition": "WRITE_DISPOSITION"
    }
  }
}

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

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "name": "projects/my-project/operations/AnalyzeIamPolicyLongrunning/1206385342502762515812063858425027606003",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.asset.v1.AnalyzeIamPolicyLongrunningMetadata",
    "createTime": "2022-04-12T21:31:10.753173929Z"
  }
}

הצגת תוצאות של ניתוח מדיניות IAM

כדי לראות את תוצאות הניתוח של מדיניות IAM:

המסוף

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

    כניסה ל-BigQuery

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

  3. מהרשימה, בוחרים את הטבלאות עם הקידומת. הטבלה עם הסיומת analysis מכילה את השאילתה ואת המטא-נתונים (לדוגמה, שם הפעולה, זמן הבקשה ושגיאות לא קריטיות). הטבלה עם הסיומת analysis_result היא רשימת התוצאות של טפלים של {identity, role(s)/permission(s), resource} יחד עם מדיניות IAM שיוצרת את הטפלים האלה.

  4. כדי לראות נתונים לדוגמה, בוחרים בכרטיסייה תצוגה מקדימה.

API

כדי לעיין בנתונים של הטבלה, קוראים ל-tabledata.list. בפרמטר tableId, מציינים את שם הטבלה.

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

  • maxResults הוא המספר המקסימלי של התוצאות שיוחזרו.
  • selectedFields היא רשימה של עמודות להחזרה, מופרדות בפסיקים. אם לא מציינים עמודות, כל העמודות מוחזרות.
  • startIndex הוא האינדקס של השורה הראשונה לקריאה, כשהספירה מתחילה מ-0.

הערכים מוחזרים כשהם עטופים באובייקט JSON שצריך לנתח, כמו שמתואר במסמכי העזר של tabledata.list.

שאילתות ב-BigQuery

בקטע הזה מפורטות דוגמאות לשאילתות SQL שמראות איך להשתמש בטבלאות BigQuery שנכתבו על ידי AnalyzeIamPolicyLongrunning. מידע נוסף על התחביר של BigQuery זמין במאמר בנושא תחביר של שאילתות SQL סטנדרטי.

נדרש OP_ID לרוב השאילתות. אפשר לקבל אותו מהתגובה של AnalyzeIamPolicyLongrunning. לדוגמה, ב-gcloud, תראו ש-OP_ID הוא 123456 בקטע 'שימוש ב-[gcloud asset operations describe organizations/123456789/operations/AnalyzeIamPolicyLongrunning/123456] כדי לבדוק את סטטוס הפעולה'.

הצגת רשימה של פעולות

הטבלה יכולה לאחסן תוצאות של כמה AnalyzeIamPolicyLongrunning פעולות. אפשר להשתמש בשאילתה הבאה כדי לראות רשימה של כל המשתמשים:

SELECT DISTINCT
  requestTime,
  opName
FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis`
ORDER BY 1 DESC
;

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

בפעולה אחת של AnalyzeIamPolicyLongrunning יכולות להיווצר כמה רשומות ניתוח. לדוגמה, אם מפעילים את האפשרות analyze_service_account_impersonation בבקשה, התוצאה יכולה להכיל ניתוח ראשי אחד (עם analysisId 0) וכמה ניתוחים של התחזות לחשבון שירות.

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

DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID";

SELECT
  analysisId,
  requestTime,
  TO_JSON_STRING(analysis.analysisQuery, true) as analysisQuery,
  analysis.fullyExplored,
  TO_JSON_STRING(analysis.nonCriticalErrors, true) as nonCriticalErrors
FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis`
WHERE opName=_opName
ORDER BY 1
;

רשימת ACEs(רשומות בקרת גישה) בניתוח אחד

‫ACE הוא ערך בקרת גישה {identity, role(s)/permission(s), resource}. אפשר להשתמש בשאילתה הבאה כדי לפרט את ה-ACE בניתוח אחד.

DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID";

SELECT DISTINCT
  ids.name AS identity,
  resources.fullResourceName AS resource,
  accesses.role AS role,
  accesses.permission AS permission
FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis_result`,
  UNNEST(analysisResult.identityList.identities) AS ids,
  UNNEST(analysisResult.accessControlLists) AS acls,
  UNNEST(acls.accesses) AS accesses,
  UNNEST(acls.resources) AS resources
WHERE opName=_opName
AND analysisId = 0
ORDER BY 1,2,3,4
;

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

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

DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID";

SELECT
  ids.name AS identity,
  resources.fullResourceName AS resource,
  accesses.role AS role,
  accesses.permission AS permission,
  analysisResult.attachedResourceFullName as iam_policy_attached_resource,
  TO_JSON_STRING(analysisResult.iamBinding, true) as iam_policy_binding
FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis_result`,
  UNNEST(analysisResult.identityList.identities) AS ids,
  UNNEST(analysisResult.accessControlLists) AS acls,
  UNNEST(acls.accesses) AS accesses,
  UNNEST(acls.resources) AS resources
WHERE opName=_opName AND analysisId = 0
ORDER BY 1,2,3,4
;

הצגת רשימה של קשרי מדיניות IAM בניתוח אחד

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

DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID";

SELECT DISTINCT
  analysisResult.attachedResourceFullName as iam_policy_attached_resource,
  TO_JSON_STRING(analysisResult.iamBinding, true) as iam_policy_binding
FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis_result`
WHERE opName=_opName AND analysisId = 0
ORDER BY 1, 2
;

הצגת רשימה של קשרי מדיניות של IAM עם ACE(ערך בקרת גישה) בניתוח אחד

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

DECLARE _opName STRING DEFAULT "organizations/ORG_ID/operations/AnalyzeIamPolicyLongrunning/OP_ID";

SELECT
  analysisResult.attachedResourceFullName as iam_policy_attached_resource,
  TO_JSON_STRING(analysisResult.iamBinding, true) as iam_policy_binding,
  TO_JSON_STRING(analysisResult.identityList.identities, true) as identities,
  TO_JSON_STRING(acls.accesses, true) as accesses,
  TO_JSON_STRING(acls.resources, true) as resources
FROM `BQ_PROJECT_ID.BQ_DATASET_NAME.BQ_TABLE_PREFIX_analysis_result`,
  UNNEST(analysisResult.accessControlLists) AS acls
WHERE opName=_opName AND analysisId = 0
ORDER BY 1,2
;