ניהול הגישה למשאבים ב-Compute Engine

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

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

אם מעניקים גישה למשאב אב (לדוגמה, לפרויקט), מעניקים באופן מרומז גישה לכל משאבי הצאצאים שלו (לדוגמה, לכל המכונות הווירטואליות באותו פרויקט). כדי להגביל את הגישה למשאבים, מומלץ להגדיר מדיניות IAM למשאבים ברמה נמוכה יותר, במקום ברמת הפרויקט או ברמה גבוהה יותר.

מידע כללי על הענקה, שינוי וביטול של גישה למשאבים שלא קשורים ל-Compute Engine, למשל הענקת גישה ל Cloud de Confiance by S3NS פרויקט, זמין במאמר הענקה, שינוי וביטול של גישה למשאבים בחומרי העזר של IAM.

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

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

כדי לקבל את ההרשאות שנדרשות לניהול הגישה למשאבי Compute Engine, צריך לבקש מהאדמין להקצות לכם ב-IAM את התפקיד אדמין של Compute (roles/compute.admin) במשאב. כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

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

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

כדי לנהל את הגישה למשאבי Compute Engine, נדרשות ההרשאות הבאות:

  • כדי להעניק או לבטל גישה למשאבים:
    • compute.projects.get בפרויקט
    • compute.RESOURCE_TYPE.get במשאב
    • compute.RESOURCE_TYPE.getIamPolicy במשאב
    • compute.RESOURCE_TYPE.setIamPolicy במשאב
  • כדי לבדוק את ההרשאות של מבצע הקריאה: compute.RESOURCE_TYPE.getIamPolicy במשאב

    מחליפים את RESOURCE_TYPE במשאב שרוצים לנהל את הגישה אליו. לדוגמה, instances, ‏ instanceTemplates או images.

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

משאבים נתמכים

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

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

הענקת גישה למשאבי Compute Engine

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

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

כדי להעניק הרשאה לגישה למשאבים ספציפיים ב-Compute Engine, מגדירים מדיניות IAM למשאב.

המסוף

  1. במסוף Cloud de Confiance , נכנסים לדף המשאב הרלוונטי שרוצים להוסיף לו הרשאות.
  2. מסמנים את תיבות הסימון לצד המשאבים שרוצים לעדכן.
  3. משלימים את השלבים בדף המשאבים.
    • למכונות וירטואליות, לוחצים על הרשאות.
    • לכל שאר המשאבים, מבצעים את הפעולות הבאות:
      1. בודקים אם חלונית המידע מוצגת. אם היא לא מוצגת, לוחצים על Show info panel.
      2. לוחצים על הכרטיסייה Permissions (הרשאות).
  4. לוחצים על Add principal.
  5. מוסיפים את הזהות של החשבון הראשי ובוחרים את התפקיד הנדרש.
  6. כדי לשמור את השינויים, לוחצים על שמירה.

gcloud

כדי להעניק תפקיד לחשבון ראשי במשאב, משתמשים בפקודת המשנה add-iam-policy-binding של המשאב עם הדגלים --member ו---role.

gcloud compute RESOURCE_TYPE add-iam-policy-binding RESOURCE_NAME \
    --member='PRINCIPAL' \
    --role='ROLE'

מחליפים את מה שכתוב בשדות הבאים:

  • RESOURCE_TYPE: סוג המשאב. הערכים התקפים כוללים:
    • disks
    • images
    • instances
    • instance-templates
    • machine-images
    • reservations
    • sole-tenancy node-groups
    • sole-tenancy node-templates
    • snapshots
  • RESOURCE_NAME: שם המשאב. לדוגמה, my_instance.
  • PRINCIPAL: זהות תקפה של חשבון המשתמש שרוצים להקצות לו את התפקיד. הערך צריך להיות בפורמט user|group|serviceAccount:EMAIL_ADDRESS או domain:DOMAIN_ADDRESS. לדוגמה:
    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com
  • ROLE: התפקיד שרוצים להקצות לחשבון המשתמש הזה.

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

REST

כדי לשנות מדיניות IAM באמצעות ה-API, צריך לבצע את הפעולות הבאות:

  1. קוראים את המדיניות הקיימת באמצעות ה-method ‏getIamPolicy של המשאב. לדוגמה, בקשת ה-HTTP הבאה קוראת את מדיניות IAM של מכונה וירטואלית:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME:getIamPolicy

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט שאליו שייכת המכונה הווירטואלית.
    • ZONE: האזור של המכונה הווירטואלית. למשאבים אזוריים או גלובליים, מחליפים את zones/ZONE ב-regions/REGION או ב-global.
    • VM_NAME: השם של מופע ה-VM.

    ‫Compute Engine מחזיר את המדיניות הנוכחית בתגובה.

  2. עורכים את המדיניות באמצעות כלי לעריכת טקסט כדי להוסיף או להסיר חשבונות משתמשים ואת התפקידים שמשויכים אליהם. לדוגמה, כדי להקצות את התפקיד compute.admin לכתובת email@example.com, מוסיפים את הקישור החדש הבא למדיניות:

    {
      "members": [
        "user:email@example.com"
      ],
      "role":"roles/compute.admin"
    }
    
  3. כותבים את המדיניות המעודכנת עם setIamPolicy():

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME:setIamPolicy

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט שאליו שייכת המכונה הווירטואלית.
    • ZONE: האזור של המכונה הווירטואלית. למשאבים אזוריים או גלובליים, מחליפים את zones/ZONE ב-regions/REGION או ב-global.
    • VM_NAME: השם של מופע ה-VM.

    בגוף הבקשה, מציינים את מדיניות ה-IAM המעודכנת מהשלב הקודם.

ביטול הגישה למשאבים

כשיטה מומלצת, אחרי שחשבונות משתמש כבר לא צריכים גישה למשאבי Compute Engine, כדאי לשלול את הגישה שלהם.

המסוף

  1. במסוף Cloud de Confiance , נכנסים לדף המשאב הרלוונטי שרוצים להוסיף לו הרשאות.
  2. מסמנים את תיבות הסימון לצד המשאבים שרוצים לעדכן.
  3. משלימים את השלבים בדף המשאבים.
    • למכונות וירטואליות, לוחצים על הרשאות.
    • לכל שאר המשאבים, מבצעים את הפעולות הבאות:
      1. בודקים אם חלונית המידע מוצגת. אם היא לא מוצגת, לוחצים על Show info panel.
      2. לוחצים על הכרטיסייה Permissions (הרשאות).
  4. לוחצים על כרטיס התפקיד שממנו רוצים להסיר חשבונות משתמש. הכרטיס יורחב ויוצגו בו המשתמשים עם התפקיד הזה במשאב הזה.
  5. כדי להסיר חשבון ראשי מהתפקיד, לוחצים על מחיקה.

gcloud

כדי להסיר תפקיד מחשבון ראשי עבור משאב, משתמשים בפקודת המשנה remove-iam-policy-binding של המשאב עם הדגלים --member ו---role.

gcloud compute RESOURCE_TYPE remove-iam-policy-binding RESOURCE_NAME \
    --member='MEMBER' \
    --role='ROLE'

מחליפים את מה שכתוב בשדות הבאים:

  • RESOURCE_TYPE: סוג המשאב. הערכים התקפים כוללים:
    • disks
    • images
    • instances
    • instance-templates
    • machine-images
    • reservations
    • sole-tenancy node-groups
    • sole-tenancy node-templates
    • snapshots
  • RESOURCE_NAME: שם המשאב. לדוגמה, my_instance.
  • PRINCIPAL: זהות תקפה של החשבון הראשי. הערך צריך להיות בפורמט user|group|serviceAccount:EMAIL_ADDRESS או domain:DOMAIN_ADDRESS. לדוגמה:
    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com
  • ROLE: התפקיד שממנו רוצים להסיר את חשבון המשתמש.

אם אתם מבטלים את הגישה למשאב שנמצא בגרסת Preview, צריך להשתמש בפקודה של gcloud beta compute.

REST

כדי לשנות מדיניות IAM ישירות דרך ה-API, צריך לבצע את הפעולות הבאות:

  1. קוראים את המדיניות הקיימת באמצעות ה-method ‏getIamPolicy של המשאב. לדוגמה, בקשת ה-HTTP הבאה קוראת את מדיניות IAM של מכונה וירטואלית:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME:getIamPolicy

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט שאליו שייכת המכונה הווירטואלית.
    • ZONE: האזור של המכונה הווירטואלית. למשאבים אזוריים או גלובליים, מחליפים את zones/ZONE ב-regions/REGION או ב-global.
    • VM_NAME: השם של מופע ה-VM.

    ‫Compute Engine מחזיר את המדיניות הנוכחית בתגובה.

  2. עורכים את המדיניות באמצעות כלי לעריכת טקסט כדי להסיר חברים מהתפקידים המשויכים. לדוגמה, כדי להסיר את הכתובת email@example.com מהתפקיד compute.admin:

    {
      "members": [
        "user:owner@example.com"
      ],
      "role":"roles/compute.admin"
    }
    
  3. כותבים את המדיניות המעודכנת עם setIamPolicy():

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME:setIamPolicy

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: מזהה הפרויקט שאליו שייכת המכונה הווירטואלית.
    • ZONE: האזור של המכונה הווירטואלית. למשאבים אזוריים או גלובליים, מחליפים את zones/ZONE ב-regions/REGION או ב-global.
    • VM_NAME: השם של מופע ה-VM.

    בגוף הבקשה, מציינים את מדיניות ה-IAM המעודכנת מהשלב הקודם.

בדיקה אם לפונקציית קריאה חוזרת (caller) יש הרשאות

אם אתם לא יודעים אילו הרשאות יש לזהות מסוימת, אתם יכולים להשתמש בשיטת testIamPermissions API כדי לבדוק אילו הרשאות זמינות לזהות.

ה-method מקבלת כתובת URL של משאב וסדרת הרשאות כפרמטרים של קלט, ומחזירה את סדרת ההרשאות שיש למשתמש ששלח את הקריאה. אפשר להשתמש בשיטה הזו בכל אחד מהמקורות הנתמכים.

בדרך כלל, testIamPermissions מיועד לשילוב עם תוכנה קניינית, כמו ממשק משתמש גרפי מותאם אישית. בדרך כלל לא מתקשרים אל testIamPermissions אם משתמשים ב- Cloud de Confianceישירות כדי לנהל הרשאות.

לדוגמה, אם אתם יוצרים ממשק משתמש גרפי (GUI) על בסיס Compute Engine API, ובממשק יש לחצן 'התחלה' להפעלת מכונה, תוכלו לקרוא ל-compute.instances.testIamPermissions() כדי לקבוע אם הלחצן צריך להיות מופעל או מושבת.

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

  1. שולחים בקשה למשאב וכוללים בגוף הבקשה רשימה של הרשאות לבדיקה.

    לדוגמה, במופע, אפשר לבדוק את compute.instances.start, compute.instances.stop ו-compute.instances.delete.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/testIamPermissions
        {
          "permissions": [
            "compute.instances.start",
            "compute.instances.stop",
            "compute.instances.delete"
           ]
        }
  2. הבקשה מחזירה את ההרשאות שמופעלות עבור מבצע הקריאה.

    {
      "permissions": [
        "compute.instances.start",
        "compute.instances.stop"
      ]
    }
    

שינוי הגישה למשאבים של כמה חברים

אם רוצים לשנות את הגישה למשאבי Compute Engine לכמה משתמשים בו-זמנית, כדאי לעיין בהמלצות בנושא שינוי מדיניות IAM באופן פרוגרמטי.

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