תגים וגישה מותנית

בדף הזה מוסבר איך משתמשים בתגים בפלטפורמה לניהול הזהויות והרשאות הגישה (IAM) כדי לשלוט טוב יותר בגישה למשאבים ב- Google Cloud .

לסקירה כללית על התגים

סקירה כללית על התגים

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

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

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

  • סביבות פיתוח, Staging וייצור: תוכלו להוסיף את התג environment: dev לסביבת הפיתוח ואת התג environment: prod לסביבת הייצור.
  • סוגי הרכיבים: תוכלו להוסיף את התג component: frontend למשאבים בממשק-קצה ואת התג component: batch למשאבים לעיבוד ברצף (batch processing).
  • שמות פרויקטים: נניח שהצוות שלכם עובד על פרויקט בשם Atlas. תוכלו להוסיף את התג project: atlas למשאבי הפיתוח של הצוות.

הגדרות ומזהי תגים

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

לכל מפתח וערך של תג יש מספר מזהים שונים:

  • מזהה קבוע: מזהה ייחודי גלובלי, שאי אפשר להשתמש בו במקומות אחרים. לדוגמה, tagKeys/123456789012 יכול להיות המזהה הקבוע של מפתח התג ו-tagValues/567890123456 של ערך התג.
  • שם מקוצר. השם המקוצר של כל מפתח צריך להיות ייחודי בפרויקט או בארגון שבו המפתח מוגדר, והשם המקוצר של כל ערך צריך להיות ייחודי למפתח המשויך אליו. לדוגמה, env יכול להיות השם המקוצר של מפתח התג, ו-prod של ערך התג.
  • שם ממרחב שמות: צירוף של מספר הארגון או מזהה הפרויקט והשם המקוצר של מפתח התג. לדוגמה, 123456789012/env יכול להיות השם ממרחב השמות של מפתח התג שנוצר לארגון. איך מוצאים את מזהה משאב הארגון לדוגמה, myproject/env יכול להיות השם ממרחב השמות של מפתח התג שנוצר לפרויקט. איך מוצאים את מזהה הפרויקט

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

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

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

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

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

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

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

גישה למשאבים עם תגים

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

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

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

תנאים שבודקים מזהים קבועים

התנאי הבא נותן תפקיד במשאבים עם התג tagKeys/123456789012: tagValues/567890123456:

resource.matchTagId('tagKeys/123456789012', 'tagValues/567890123456')

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

resource.hasTagKeyId('tagKeys/123456789012')

התנאי הבא נותן תפקיד במשאבים עם התג tagKeys/123456789012: tagValues/567890123456 ועם כל תג שהמפתח שלו הוא tagKeys/987654321098:

resource.matchTagId('tagKeys/123456789012', 'tagValues/567890123456') &&
    resource.hasTagKeyId('tagKeys/987654321098')

תנאים שבודקים שמות (ממרחבי שמות או שמות מקוצרים)

התנאי הבא נותן תפקיד במשאבים עם התג env: prod, שמציין שהמשאב נמצא בסביבת ייצור:

resource.matchTag('123456789012/env', 'prod')

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

resource.hasTagKey('123456789012/env')

התנאי הבא נותן תפקיד במשאבים עם התג env: prod ועם כל תג שהמפתח שלו הוא project:

resource.matchTag('123456789012/env', 'prod') &&
    resource.hasTagKey('123456789012/project')

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