בדף הזה מוסבר איך לנתח מדיניות של ניהול זהויות והרשאות גישה (IAM) באופן אסינכרוני ולכתוב את התוצאות ב-BigQuery. התהליך דומה לניתוח מדיניות IAM, רק שתוצאת הניתוח נכתבת בטבלאות BigQuery.
לפני שמתחילים
מפעילים את Cloud Asset API.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים
צריך להפעיל את ה-API בפרויקט שבו ישמש לשליחת השאילתה. המשאב הזה לא חייב להיות זהה למשאב שאליו מצומצמת השאילתה.
תפקידים והרשאות נדרשים
כדי להריץ ניתוח של מדיניות ולייצא את התוצאות ל-BigQuery, נדרשים התפקידים וההרשאות הבאים.
התפקידים שצריך ב-IAM
כדי לקבל את ההרשאות שדרושות לניתוח מדיניות ולייצוא התוצאות ל-BigQuery, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט, בתיקייה או בארגון שבהם תגדירו את היקף השאילתה:
- עריכה של נתוני BigQuery (
roles/bigquery.dataEditor) - צפייה במאגר משאבי הענן (
roles/cloudasset.viewer) -
כדי לנתח מדיניות עם תפקידי IAM בהתאמה אישית:
צפייה בתפקיד (
roles/iam.roleViewer) -
כדי להשתמש ב-Google Cloud CLI כדי לנתח מדיניות:
Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
התפקידים המוגדרים מראש האלה כוללים את ההרשאות שנדרשות לניתוח מדיניות ולייצוא התוצאות ל-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. ההרשאה הזו כלולה בתפקיד אדמין עם גישת קריאה לקבוצות, ובתפקידים עם הרשאות נרחבות יותר כמו אדמין של קבוצות או סופר-אדמין. מידע נוסף זמין במאמר בנושא הקצאה של תפקידי אדמין ספציפיים.
ניתוח מדיניות וייצוא תוצאות
המסוף
במסוף Google Cloud , נכנסים לדף כלי הניתוח למדיניות.
בקטע ניתוח מדיניות, מאתרים את תבנית השאילתה שרוצים להשתמש בה ולוחצים על יצירת שאילתה. כדי ליצור שאילתה בהתאמה אישית, לוחצים על יצירת שאילתה בהתאמה אישית.
בשדה Select query scope (בחירת היקף השאילתה), בוחרים את הפרויקט, התיקייה או הארגון שרוצים להגדיר כהיקף השאילתה. כלי ניתוח המדיניות ינתח את הגישה לפרויקט, לתיקייה או לארגון, וגם לכל המשאבים בתוכם.
מוודאים שהפרמטרים של השאילתה מוגדרים:
- אם אתם משתמשים בתבנית שאילתה, צריך לוודא שפרמטרים של שאילתה שמולאו מראש נכונים.
- אם אתם יוצרים שאילתה בהתאמה אישית, צריך להגדיר את המשאבים, חשבונות המשתמשים, התפקידים וההרשאות שאתם רוצים לחפש.
מידע נוסף על סוגי השאילתות שאפשר ליצור זמין במאמר ניתוח מדיניות IAM.
בחלונית עם שם השאילתה, לוחצים על ניתוח > ייצוא התוצאה בלבד. החלונית ייצוא התוצאות תיפתח.
בקטע הגדרת יעד לייצוא, מזינים את המידע הבא:
- Project: הפרויקט שבו נמצא מערך הנתונים שלכם ב-BigQuery.
- Dataset: מערך הנתונים ב-BigQuery שאליו רוצים לייצא את התוצאות.
- טבלה: הקידומת של טבלאות BigQuery שתוצאות הניתוח ייכתבו אליהן. אם לא קיימת טבלה עם הקידומת שצוינה, BigQuery יוצר טבלה חדשה.
לוחצים על Continue.
אופציונלי: בקטע הגדרת הגדרות נוספות, בוחרים את האפשרויות הרצויות:
- חלוקה למחיצות: האם לחלק את הטבלה למחיצות. מידע נוסף על טבלאות עם חלוקה למחיצות זמין במאמר מבוא לטבלאות עם חלוקה למחיצות.
- העדפת כתיבה: מציינת את הפעולה שמתרחשת אם טבלת היעד או המחיצה כבר קיימות. כברירת מחדל, אם הטבלה או המחיצה כבר קיימות, אפליקציית BigQuery מוסיפה את הנתונים לטבלה או למחיצה האחרונה.
לוחצים על ייצוא.
כלי ניתוח המדיניות מריץ את השאילתה ומייצא את התוצאות לטבלה שצוינה.
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:
המסוף
במסוף Google Cloud , עוברים לדף BigQuery.
כדי להציג את הטבלאות והתצוגות במערך הנתונים, פותחים את חלונית הניווט. בקטע Explorer, בוחרים את הפרויקט כדי להרחיב אותו, ואז בוחרים מערך נתונים.
מהרשימה, בוחרים את הטבלאות עם הקידומת. הטבלה עם הסיומת
analysisמכילה את השאילתה ואת המטא-נתונים (לדוגמה, שם הפעולה, זמן הבקשה ושגיאות לא קריטיות). הטבלה עם הסיומתanalysis_resultהיא רשימת התוצאות של טפלים של{identity, role(s)/permission(s), resource}יחד עם מדיניות IAM שיוצרת את הטפלים האלה.כדי לראות נתונים לדוגמה, בוחרים בכרטיסייה תצוגה מקדימה.
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 ;