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

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

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

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

במאמר הענקה, שינוי וביטול גישה למשאבים בחומרי העזר של IAM מוסבר איך נותנים גישה למשאבים שלא קשורים ל-Compute Engine, למשל לפרויקט Google Cloud .

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

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

כדי לקבל את ההרשאות שנדרשות לניהול הגישה למשאבי 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. במסוף Google Cloud , נכנסים לדף המשאב הרלוונטי שרוצים להוסיף לו הרשאות.
  2. מסמנים את תיבות הסימון לצד המשאבים שרוצים לעדכן.
  3. מבצעים את השלבים הבאים בהתאם לדף המשאבים.
    • למכונות וירטואליות, לוחצים על הרשאות.
    • לכל שאר המשאבים, צריך לבצע את הפעולות הבאות:
      1. בודקים אם חלונית המידע מוצגת. אם היא לא מוצגת, לוחצים על Show info panel.
      2. לוחצים על הכרטיסייה הרשאות.
  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. במסוף Google Cloud , נכנסים לדף המשאב הרלוונטי שרוצים להוסיף לו הרשאות.
  2. מסמנים את תיבות הסימון לצד המשאבים שרוצים לעדכן.
  3. מבצעים את השלבים הבאים בהתאם לדף המשאבים.
    • למכונות וירטואליות, לוחצים על הרשאות.
    • לכל שאר המשאבים, צריך לבצע את הפעולות הבאות:
      1. בודקים אם חלונית המידע מוצגת. אם היא לא מוצגת, לוחצים על Show info panel.
      2. לוחצים על הכרטיסייה הרשאות.
  4. לוחצים על כרטיס התפקיד שממנו רוצים להסיר חשבונות ראשיים. הכרטיס יורחב ויוצגו בו המשתמשים עם התפקיד הזה במשאב הזה.
  5. כדי להסיר חשבון ראשי מהתפקיד, לוחצים על Delete.

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: התפקיד שממנו רוצים להסיר את חשבון המשתמש.

אם אתם מבטלים את הגישה למשאב שנמצא בגרסת טרום-השקה, צריך להשתמש בפקודה 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 אם משתמשים ב- Google Cloudישירות כדי לנהל הרשאות.

לדוגמה, אם אתם יוצרים ממשק משתמש גרפי (GUI) על בסיס ה-API של Compute Engine, ובממשק יש לחצן 'התחלה' להפעלת מכונה, תוכלו לקרוא ל-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 באופן פרוגרמטי.

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