אתם יכולים להשתמש בכללי מדיניות הדחייה של ניהול זהויות והרשאות גישה (IAM) יחד עם תגים כדי לחסום פעולות ספציפיות בקישורים למאגר Git בחיבור Developer Connect.
מצרפים תג לחיבור, ואז יוצרים מדיניות דחייה שהתנאי שלה תואם לתג הזה. כל קישור למאגר Git בחיבור יורש את התג, כך שמדיניות הדחייה חלה על כל המאגרים שמקושרים דרך החיבור הזה.
מתי כדאי להשתמש בתגים ובכללי מדיניות דחייה
כללי מדיניות ההרשאה של IAM נותנים הרשאות. בעזרת כללי מדיניות הדחייה אפשר להגדיר אמצעי הגנה שמקבלים עדיפות על פני כללי מדיניות ההרשאה, בלי קשר לתפקידים שהוקצו לחשבון המשתמש. שילוב של כללי מדיניות דחייה עם תגים מאפשר להחיל את אמצעי ההגנה האלה על חיבורים נבחרים, במקום על כל חיבור בפרויקט.
לדוגמה, אתם יכולים להשתמש בגישה הזו כדי:
- לאפשר לסוכן AI או לחשבון שירות של שירות אוטומציה לקרוא בקשות להוספה של קוד ובקשות משיכה דרך Developer Connect, אבל למנוע ממנו לפתוח, לשנות או להגיב לבקשות משיכה במאגרים בסביבת הייצור.
- לחסום את כל הפעולות במאגרים לקבוצה של חשבונות משתמשים בחיבורים שמקושרים למאגרים רגישים, תוך שמירה על הגישה שלהם לחיבורים אחרים באותו פרויקט.
- כדי להחיל קבוצה עקבית של הגבלות על פרויקטים רבים, יוצרים את התג ואת מדיניות הדחייה ברמת הארגון.
איך התגים חלים על קישורים למאגר Git
ב-Developer Connect, אתם יכולים לצרף תגים לחיבורים, אבל לא ישירות לקישורים למאגרים ב-Git.
קישור למאגר Git הוא משאב צאצא של החיבור שלו. כש-IAM מעריך מדיניות דחייה לפעולה בקישור למאגר Git, התנאי מוערך ביחס לתגים בפועל של הקישור. התגים בפועל כוללים את התגים שמצורפים לחיבור ההורה, ואת התגים שעוברים בירושה מהפרויקט, מהתיקייה ומהארגון של החיבור.
מכיוון שהקישורים למאגר Git מקבלים בירושה תגים מהחיבור שלהם, אמצעי הבקרה במסמך הזה חלים על כל חיבור. אם אתם צריכים אמצעי בקרה שונים למאגרים שונים, קשרו את המאגרים האלה באמצעות חיבורים שונים, ואז תייגו כל חיבור בנפרד.
לפני שמתחילים
- מוודאים שיש לכם חיבור ל-Developer Connect עם מאגר Git מקושר אחד לפחות.
- חשוב לוודא שאתם יודעים מהו מזהה הארגון ומהו מספר הפרויקט שמכיל את החיבור.
- כדי להשתמש בדוגמאות של שורת הפקודה במסמך הזה, צריך להתקין ולהגדיר את Google Cloud CLI.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות ליצירת תגים, לצירוף תגים לחיבורים וליצירת כללי מדיניות דחייה, בקשו מהאדמין להקצות לכם את התפקידים הבאים ב-IAM ברמת הארגון:
-
כדי ליצור ולנהל מפתחות וערכים של תגים: אדמין תגים (
roles/resourcemanager.tagAdmin) -
כדי לצרף ערך תג לחיבור:
משתמש בתגים (
roles/resourcemanager.tagUser) בערך התג, ואדמין ב-Developer Connect (roles/developerconnect.admin) בחיבור -
כדי ליצור, לעדכן ולמחוק כללי מדיניות דחייה:
דחיית אדמין (
roles/iam.denyAdmin)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
הרשאות שאפשר לדחות
אתם יכולים לדחות את ההרשאות הבאות בקישורים למאגר Git. במדיניות דחייה, משתמשים בפורמט developerconnect.googleapis.com/gitRepositoryLinks.PERMISSION.
קריאת נתונים מהמאגר
| הרשאה | מאפשר לחשבון משתמש |
|---|---|
developerconnect.googleapis.com/gitRepositoryLinks.fetchCommit |
קבלת קובץ commit. |
developerconnect.googleapis.com/gitRepositoryLinks.fetchCommitList |
הצגת רשימת השמירות. |
developerconnect.googleapis.com/gitRepositoryLinks.diffCommit |
הצגת ההבדלים בין גרסאות commit. |
developerconnect.googleapis.com/gitRepositoryLinks.fetchFileBlame |
קבלת מידע על האשמה בקובץ. |
developerconnect.googleapis.com/gitRepositoryLinks.fetchPullRequest |
מקבלים בקשת משיכה. |
developerconnect.googleapis.com/gitRepositoryLinks.fetchPullRequestList |
רשימה של בקשות משיכה. |
developerconnect.googleapis.com/gitRepositoryLinks.fetchGitRefs |
הצגת רשימה של ענפים ותגים. |
שינוי נתוני המאגר
| הרשאה | מאפשר לחשבון משתמש |
|---|---|
developerconnect.googleapis.com/gitRepositoryLinks.openPullRequest |
פותחים בקשת משיכה. |
developerconnect.googleapis.com/gitRepositoryLinks.modifyPullRequest |
לשנות בקשת משיכה, למשל את השם, התיאור או הסטטוס שלה. |
developerconnect.googleapis.com/gitRepositoryLinks.addPullRequestComment |
להוסיף תגובה לבקשת משיכה. |
developerconnect.googleapis.com/gitRepositoryLinks.addPullRequestReviewComment |
להוסיף הערת ביקורת לבקשת משיכה. |
טוקני גישה ושרת ה-proxy של Git
| הרשאה | מאפשר לחשבון משתמש |
|---|---|
developerconnect.googleapis.com/gitRepositoryLinks.fetchReadToken |
מקבלים טוקן גישה לקריאה בלבד למאגר. |
developerconnect.googleapis.com/gitRepositoryLinks.fetchReadWriteToken |
מקבלים טוקן גישה לקריאה ולכתיבה למאגר. |
developerconnect.googleapis.com/gitRepositoryLinks.gitProxyRead |
לקרוא מהמאגר דרך שרת ה-proxy של Developer Connect. |
developerconnect.googleapis.com/gitRepositoryLinks.gitProxyWrite |
כותבים למאגר דרך שרת ה-proxy של Developer Connect. |
לרשימה המלאה של ההרשאות שנתמכות בכללי מדיניות הדחייה, אפשר לעיין במאמר ההרשאות שנתמכות בכללי מדיניות הדחייה.
יצירת תג וצירוף שלו לחיבור
בדוגמה הזו, יוצרים מפתח תג בשם scm-agent-access עם ערך תג בשם read-only, ואז מצרפים את ערך התג לחיבור.
יוצרים את מפתח התג. הפקודה הבאה יוצרת את מפתח התג בארגון, כדי שתוכלו להשתמש בו בחיבורים בכל פרויקט:
gcloud resource-manager tags keys create scm-agent-access \ --parent=organizations/ORGANIZATION_ID \ --description="Controls agent access to Developer Connect repositories"
מחליפים את ORGANIZATION_ID במזהה הארגון.
אפשר גם ליצור את מפתח התג בפרויקט על ידי הגדרת
--parentלערךprojects/PROJECT_ID. אפשר לצרף מפתח תג ברמת הפרויקט רק למשאבים באותו פרויקט.יוצרים את ערך התג:
gcloud resource-manager tags values create read-only \ --parent=ORGANIZATION_ID/scm-agent-access
מצרפים את ערך התג לחיבור:
gcloud resource-manager tags bindings create \ --tag-value=ORGANIZATION_ID/scm-agent-access/read-only \ --parent=//developerconnect.googleapis.com/projects/PROJECT_NUMBER/locations/LOCATION/connections/CONNECTION_ID \ --location=LOCATION
מחליפים את מה שכתוב בשדות הבאים:
- PROJECT_NUMBER: מספר הפרויקט שמכיל את החיבור.
- LOCATION: האזור של החיבור, לדוגמה
us-central1. - CONNECTION_ID: מזהה החיבור.
מוודאים שהתג מצורף לחיבור:
gcloud resource-manager tags bindings list \ --parent=//developerconnect.googleapis.com/projects/PROJECT_NUMBER/locations/LOCATION/connections/CONNECTION_ID \ --location=LOCATION
יצירה של מדיניות דחייה
מדיניות הדחייה הבאה מונעת מחשבון שירות לפתוח, לשנות או להגיב לבקשות משיכה, ולקבל אסימוני קריאה וכתיבה או כתיבה דרך שרת ה-proxy של Developer Connect, בכל קישור למאגר Git שהחיבור שלו כולל את התג scm-agent-access שמוגדר ל-read-only. חשבון השירות עדיין יכול לקרוא בקשות להעברת שינויים ובקשות משיכה, אם מדיניות ההרשאה מעניקה לו את ההרשאות האלה.
יוצרים קובץ בשם
policy.jsonעם התוכן הבא:{ "displayName": "Read-only Developer Connect access for agents", "rules": [ { "denyRule": { "deniedPrincipals": [ "principal://iam.googleapis.com/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL" ], "deniedPermissions": [ "developerconnect.googleapis.com/gitRepositoryLinks.openPullRequest", "developerconnect.googleapis.com/gitRepositoryLinks.modifyPullRequest", "developerconnect.googleapis.com/gitRepositoryLinks.addPullRequestComment", "developerconnect.googleapis.com/gitRepositoryLinks.addPullRequestReviewComment", "developerconnect.googleapis.com/gitRepositoryLinks.fetchReadWriteToken", "developerconnect.googleapis.com/gitRepositoryLinks.gitProxyWrite" ], "denialCondition": { "title": "Connection is tagged scm-agent-access=read-only", "expression": "resource.matchTag('ORGANIZATION_ID/scm-agent-access', 'read-only')" } } } ] }
מחליפים את SERVICE_ACCOUNT_EMAIL בכתובת האימייל של חשבון השירות שרוצים להגביל. כדי להגביל סוגים אחרים של חשבונות משתמשים, כמו משתמשים או קבוצות, קראו את המאמר מזהים של חשבונות משתמשים.
יוצרים את מדיניות הדחייה ומצרפים אותה לארגון:
gcloud iam policies create scm-agent-read-only \ --attachment-point=cloudresourcemanager.googleapis.com/organizations/ORGANIZATION_ID \ --kind=denypolicies \ --policy-file=policy.json
אפשר גם לצרף את מדיניות הדחייה לתיקייה או לפרויקט. מדיניות דחייה חלה על כל המשאבים שנמצאים מתחת לנקודת הצירוף שלה.
איך יוצרים כללי מדיניות דחייה?
אימות מדיניות הדחייה
שינויים בתגים ובכללי מדיניות דחייה הם עקביים באופן הדרגתי. יכול להיות שיעברו כמה דקות עד שקישור תג חדש או מדיניות דחייה ייכנסו לתוקף. למידע נוסף, קראו את המאמרים ההשפעה של שינויים בתגים והפצת שינוי גישה.
אחרי שהשינויים יופצו, בקשה מהחשבון שנדחה להרשאה שנדחתה בקישור למאגר Git בחיבור המתויג תיכשל עם שגיאת HTTP 403 PERMISSION_DENIED. בהודעת השגיאה מצוינים ההרשאה והקישור למאגר Git, וכתוב שהגישה נדחתה על ידי מדיניות דחייה ב-IAM. לדוגמה:
Permission 'developerconnect.gitRepositoryLinks.openPullRequest' denied on resource '//developerconnect.googleapis.com/projects/my-project/locations/us-central1/connections/my-connection/gitRepositoryLinks/my-repo' due to an IAM deny policy.
בקשות להרשאות שהמדיניות לא דוחה, ובקשות לקישורים למאגרי Git בחיבורים שאין להם את התג, לא מושפעות ממדיניות הדחייה.
כדי לבדוק אם מדיניות הדחייה חלה על חשבון משתמש ועל קישור למאגר Git, אפשר להשתמש בפותר הבעיות שקשורות למדיניות:
gcloud policy-intelligence troubleshoot-policy iam \ //developerconnect.googleapis.com/projects/PROJECT_ID/locations/LOCATION/connections/CONNECTION_ID/gitRepositoryLinks/GIT_REPOSITORY_LINK_ID \ --principal-email=SERVICE_ACCOUNT_EMAIL \ --permission=developerconnect.googleapis.com/gitRepositoryLinks.openPullRequest
הסרת ההגבלה
כדי להסיר את ההגבלה מחיבור יחיד, מוחקים את קישור התג מהחיבור:
gcloud resource-manager tags bindings delete \ --tag-value=ORGANIZATION_ID/scm-agent-access/read-only \ --parent=//developerconnect.googleapis.com/projects/PROJECT_NUMBER/locations/LOCATION/connections/CONNECTION_ID \ --location=LOCATION
כדי להסיר את ההגבלה מכל החיבורים, צריך למחוק את מדיניות הדחייה:
gcloud iam policies delete scm-agent-read-only \ --attachment-point=cloudresourcemanager.googleapis.com/organizations/ORGANIZATION_ID \ --kind=denypolicies
מגבלות
- התגים מצורפים לכל חיבור. אפשר לצרף תגים לחיבורים, אבל לא לקישורים למאגרי Git. כל הקישורים למאגרי Git בקישור מסוים חולקים את התגים של הקישור.
- תנאי דחייה תומכים רק בתגים. התנאי בכלל דחייה יכול להשתמש רק בפונקציות של תגים, כמו
resource.matchTag()ו-resource.hasTagKey(). אי אפשר לכתוב תנאי דחייה שמבוסס על שם המאגר או על מאפייני משאבים אחרים. למידע נוסף, קראו את המאמר תנאי דחייה. - מפתחות התגים חייבים להיות ממרחב השמות. בשדה
resource.matchTag(), מזהים את מפתח התג לפי השם שלו ממרחב השמות, כמוORGANIZATION_ID/scm-agent-accessאוPROJECT_ID/scm-agent-access, ולא לפי השם המקוצר שלו. - לוקח זמן עד שהשינויים מתעדכנים. קישורי תגים חדשים, ערכי תגים שהשתנו וכללי מדיניות דחייה לא נכנסים לתוקף באופן מיידי, והסרת תג לא משחזרת את הגישה באופן מיידי. כל שינוי יכול לקחת כמה דקות, וחשוב לבדוק את ההגדרות לפני שמתחילים להשתמש בהן.
- התגים הפעילים מופיעים בחיבורים. כדי לראות את התגים שחלים על קישור למאגר Git, צריך להציג את התגים בפועל של החיבור ההורה שלו.
המאמרים הבאים
- מידע נוסף על כללי מדיניות דחייה
- מידע נוסף על תגים וגישה מותנית
- מידע על תפקידים והרשאות ב-Developer Connect