צירוף חשבונות שירות למשאבים

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

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

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

  • Enable the IAM and Resource Manager APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  • חשוב לוודא שאתם מבינים איך חשבונות שירות עובדים ב-IAM.

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

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

התפקיד המוגדר מראש הזה כולל את ההרשאה iam.serviceAccounts.actAs, שנדרשת כדי לצרף חשבון שירות למשאב.

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

הגדרת מדיניות הארגון

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

הגדרת חשבון השירות

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

הגדרת משאב באותו פרויקט

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

הגדרת משאב בפרויקט אחר

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

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

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

    לדוגמה, אם יוצרים מינוי ל-Pub/Sub, אז Pub/Sub הוא הבעלים של המשאב.

  4. מוצאים את כתובת האימייל של סוכן השירות בשביל השירות.

    שירותים שונים משתמשים בסוכני שירות שונים. למידע נוסף, קראו את המאמר סוכני שירות.

  5. מקצים את התפקיד 'יצירת אסימונים בחשבון שירות' (roles/iam.serviceAccountTokenCreator) לסוכני השירות:

    המסוף

    1. נכנסים לדף Service accounts במסוף Google Cloud .

      כניסה לדף Service accounts

    2. בוחרים את הפרויקט שבבעלותו חשבון השירות שרוצים לצרף למשאב.

    3. לוחצים על כתובת האימייל של חשבון השירות שרוצים לצרף למשאב.

    4. עוברים לכרטיסייה Principals with access.

    5. לוחצים על Grant access ומזינים את כתובת האימייל של סוכן השירות.

    6. לוחצים על Select a role (בחירת תפקיד), מקלידים Service Account Token Creator ולוחצים על התפקיד.

    7. לוחצים על Save כדי לשמור את השינויים.

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

    gcloud

    משתמשים בפקודה gcloud iam service-accounts add-iam-policy-binding:

    gcloud iam service-accounts add-iam-policy-binding \
        SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --member=serviceAccount:SERVICE_AGENT_EMAIL \
        --role=roles/iam.serviceAccountTokenCreator

    מחליפים את הערכים הבאים:

    • SERVICE_ACCOUNT_NAME: השם של חשבון השירות שמנוהל על ידי המשתמש שמצרפים למשאב.
    • PROJECT_ID: מזהה הפרויקט שבו נמצא חשבון השירות שמנוהל על ידי המשתמש.
    • SERVICE_AGENT_EMAIL: כתובת האימייל של סוכן השירות.

    הפקודה מדפיסה את מדיניות ההרשאה המעודכנת לחשבון השירות המנוהל על ידי המשתמש.

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

    REST

    כדי להעניק את התפקיד הזה, משתמשים בתבנית read-modify-write כדי לעדכן את מדיניות ההרשאה לחשבון השירות המנוהל על ידי המשתמש.

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

    ה-method projects.serviceAccounts.getIamPolicy מחזירה את מדיניות ההרשאה לחשבון השירות.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • PROJECT_ID: מזהה הפרויקט ב- Google Cloud . מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project.
    • USER_SA_NAME: השם של חשבון השירות המנוהל על ידי המשתמש שמקשרים למשאב.

    שיטת ה-HTTP וכתובת ה-URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/USER_SA_NAME@PROJECT_ID.iam.gserviceaccount.com:getIamPolicy

    תוכן בקשת JSON:

    {
      "requestedPolicyVersion": 3
    }
    

    כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

    צריכה להתקבל תגובת JSON שדומה לזו:

    {
      "version": 1,
      "etag": "BwWl3KCTUMY=",
      "bindings": [
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com"
          ]
        }
      ]
    }
    

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

    {
      "version": 1,
      "etag": "BwWl3KCTUMY=",
      "bindings": [
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "serviceAccount:SERVICE_AGENT_EMAIL"
          ]
        },
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com"
          ]
        }
      ]
    }

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

    • SERVICE_AGENT_EMAIL: כתובת האימייל של סוכן השירות
    • SERVICE_ACCOUNT_NAME: השם של חשבון השירות שמנוהל על ידי המשתמש.
    • PROJECT_ID: מזהה הפרויקט שבו נמצא חשבון השירות שמנוהל על ידי המשתמש.

    לבסוף, כותבים את מדיניות ההרשאה המעודכנת:

    ה-method projects.serviceAccounts.setIamPolicy מעדכנת את מדיניות ההרשאה בחשבון השירות.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • PROJECT_ID: מזהה הפרויקט ב- Google Cloud . מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project.
    • USER_SERVICE_ACCOUNT_NAME: השם של חשבון השירות המנוהל על ידי המשתמש שמקשרים למשאב.
    • SERVICE_AGENT_EMAIL: כתובת האימייל של סוכן השירות שייצור אסימוני גישה לחשבון השירות המנוהל על ידי המשתמש.

    שיטת ה-HTTP וכתובת ה-URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com:setIamPolicy

    תוכן בקשת JSON:

    {
      "policy": {
        "version": 1,
        "etag": "BwWl3KCTUMY=",
        "bindings": [
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:SERVICE_AGENT_EMAIL"
            ]
          },
          {
            "role": "roles/iam.serviceAccountUser",
            "members": [
              "serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com"
            ]
          }
        ]
      }
    }
    

    כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

    אתם אמורים לקבל תגובת JSON שדומה לזו:

    {
      "version": 1,
      "etag": "BwWo331TkHE=",
      "bindings": [
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "serviceAccount:SERVICE_AGENT_EMAIL"
          ]
        },
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com"
          ]
        }
      ]
    }
    

צירוף חשבון השירות למשאב

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

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

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

צירוף חשבון שירות כשיוצרים משאב
חיזוי של AI Platform גרסאות מודלים
הדרכת AI Platform משימות
סביבה רגילה של App Engine גרסאות של אפליקציות
סביבה גמישה של App Engine גרסאות של אפליקציות
Cloud Composer סביבות
פונקציות Cloud Run פונקציית Cloud Run
Cloud Run שירותים
Cloud Scheduler משימות
Cloud Source Repositories
Compute Engine
Dataproc אשכולות
Google Kubernetes Engine
Notebooks מכונות Notebook
Pub/Sub מינויים

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

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

הפעלה של צירוף חשבונות שירות בין פרויקטים

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

  • מוודאים שהאילוץ הבוליאני iam.disableCrossProjectServiceAccountUsage לא נאכף בפרויקט.

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

    כאשר האילוץ הזה לא נאכף, IAM מוסיף מנעול למניעת מחיקה של פרויקט שמונע את מחיקת הפרויקט. המקור של המנעול הזה למניעת מחיקה הוא iam.googleapis.com/cross-project-service-accounts. אנחנו ממליצים לא למחוק את המנעול הזה למניעת מחיקה.

  • מומלץ: ודאו שהאילוץ הבוליאני iam.restrictCrossProjectServiceAccountLienRemoval נאכף בפרויקט.

    האילוץ הבוליאני הזה מבטיח שחשבונות משתמשים יוכלו להסיר את המנעול למניעת מחיקה של פרויקט רק אם יש להם הרשאת resourcemanager.projects.updateLiens ברמת הארגון. אם המגבלה הזו לא נאכפת, חשבונות המשתמשים יכולים להסיר את המנעול למניעת מחיקה של הפרויקט אם יש להם את ההרשאה הזו ברמת הפרויקט.

למידע על הצגה או שינוי של אילוץ בוליאני במדיניות הארגון, ראו יצירה וניהול של מדיניות הארגון.

השבתה של צירוף חשבונות שירות בין פרויקטים

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

באופן ספציפי, אסור לבצע את השינויים הבאים בפרויקט שבו נמצאים חשבונות השירות:

  • אל תעדכנו את מדיניות הארגון של הפרויקט כדי לאכוף את האילוץ הבוליאני iam.disableCrossProjectServiceAccountUsage.
  • אל תעדכנו את מדיניות הארגון של הפרויקט כדי לא לאכוף את האילוץ הבוליאני iam.restrictCrossProjectServiceAccountLienRemoval.
  • אל תסירו את המנעול למניעת מחיקה של פרויקט שמקורו ב-iam.googleapis.com/cross-project-service-accounts, שמונע מחיקה של הפרויקט.
  • לא מוחקים את הפרויקט.

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

יומני ביקורת לצירוף חשבונות שירות

כשחשבון משתמש משתמש בהרשאה iam.serviceAccounts.actAs כדי לצרף חשבון שירות למשאב, IAM יוצר יומן ביקורת. יומן הביקורת הזה מכיל את הפרטים הבאים:

  • כתובת האימייל של החשבון הראשי שצרף את חשבון השירות למשאב
  • פרטים על חשבון השירות שצורף למשאב

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

דוגמה ליומן ביקורת מסוג זה מופיעה במאמר יומנים לשימוש בהרשאה iam.serviceAccounts.actAs. למידע נוסף על יומני ביקורת באופן כללי, אפשר לעיין במאמר סקירה כללית על יומני ביקורת של Cloud.

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