ניהול הגישה לחשבונות שירות

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

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

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

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

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

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

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

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

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

כדי לנהל את הגישה לחשבון השירות, צריך את ההרשאות הבאות:

  • iam.serviceAccounts.get
  • iam.serviceAccounts.list
  • iam.serviceAccounts.getIamPolicy
  • iam.serviceAccounts.setIamPolicy

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

הצגת הגישה הנוכחית

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

המסוף

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

    כניסה לדף Service Accounts

  2. בוחרים פרויקט.

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

  4. עוברים לכרטיסייה Principals with access. בטבלה מופיעים כל החשבונות הראשיים שיש להם תפקיד בחשבון השירות.

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

  5. אם רוצים לראות את התפקידים שניתנו לסוכני שירות, מסמנים את התיבה Include Google-provided role grants.

gcloud

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

כדי לראות את מדיניות ההרשאות של חשבון השירות, מריצים את הפקודה get-iam-policy לחשבון השירות:

gcloud iam service-accounts get-iam-policy SA_ID --format=FORMAT > PATH

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

  • SA_ID: המזהה של חשבון השירות – כתובת האימייל שלו בפורמט SA_NAME@PROJECT_ID.iam.gserviceaccount.com או המספר הייחודי שלו.

  • FORMAT: הפורמט של המדיניות. אפשר להשתמש ב-json או ב-yaml.

  • PATH: הנתיב לקובץ פלט חדש של המדיניות.

לדוגמה, באמצעות הפקודה הבאה, המדיניות של חשבון השירות my-service-account תישמר בספריית הבית בפורמט JSON:

gcloud iam service-accounts get-iam-policy my-service-account --format json > ~/policy.json

REST

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

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

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

  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud . מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project.
  • SA_ID: המזהה של חשבון השירות – כתובת האימייל שלו בפורמט SA_NAME@PROJECT_ID.iam.gserviceaccount.com או המספר הייחודי שלו.

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

ה-method של ה-HTTP וכתובת ה-URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_ID:getIamPolicy

תוכן בקשת JSON:

{
  "options": {
    "requestedPolicyVersion": POLICY_VERSION
  }
}

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

התשובה תכיל את מדיניות ההרשאות של חשבון השירות. לדוגמה:

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/serviceAccountAdmin",
      "members": [
        "user:my-user@example.com"
      ]
    }
  ]
}

איך נותנים או מבטלים תפקידים בודדים ב-IAM

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

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

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

איך נותנים תפקיד IAM בודד

כדי לתת תפקיד לחשבון ראשי, תוכלו לבצע את הפעולות הבאות:

המסוף

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

    כניסה לדף Service Accounts

  2. בוחרים פרויקט.

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

  4. נכנסים לכרטיסייה Permissions ומחפשים את הקטע Principals with access to this service account.

  5. בוחרים את החשבון הראשי שרוצים לתת לו את התפקיד:

    • כדי לתת את התפקיד לחשבון ראשי שכבר יש לו תפקידים אחרים בחשבון השירות, מחפשים את השורה שמכילה אותו ולוחצים על Edit principal ליד השורה ואז על Add another role.

      כדי להקצות תפקיד לסוכן שירות, מסמנים את התיבה IncludeGoogle-provided role grants כדי לראות את כתובת האימייל שלו.

    • כדי לתת תפקיד לחשבון ראשי שאין לו תפקידים קיימים בחשבון השירות, לוחצים על Grant access ומזינים מזהה של החשבון הראשי, למשל my-user@example.com או //iam.googleapis.com/locations/global/workforcePools/example-pool/group/example-group@example.com.

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

  7. אם רוצים, מוסיפים תנאי לתפקיד.

  8. לוחצים על Save. החשבון הראשי יקבל את התפקיד בחשבון השירות.

gcloud

כדי לתת תפקיד לחשבון ראשי במהירות, תוכלו להריץ את הפקודה add-iam-policy-binding:

gcloud iam service-accounts add-iam-policy-binding SA_ID \
    --member=PRINCIPAL --role=ROLE_NAME \
    --condition=CONDITION

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

  • SA_ID: המזהה של חשבון השירות – כתובת האימייל שלו בפורמט SA_NAME@PROJECT_ID.iam.gserviceaccount.com או המספר הייחודי שלו.

  • PRINCIPAL: המזהה של החשבון הראשי או של המשתמש בקבוצה. בדרך כלל בצורה הבאה: PRINCIPAL-TYPE:ID. לדוגמה, user:my-user@example.com או principalSet://iam.googleapis.com/locations/global/workforcePools/example-pool/group/example-group@example.com. רשימה מלאה של הערכים שיכולים להיות ל-PRINCIPAL מופיעה במאמר מזהים של חשבונות משתמשים.

    בסוג חשבון המשתמש user, שם הדומיין במזהה צריך להיות של Google Workspace או של Cloud Identity. בסקירה הכללית על Cloud Identity תוכלו לקרוא איך מגדירים דומיין ב-Cloud Identity.

  • ROLE_NAME: שם התפקיד שרוצים לתת. תוכלו להשתמש באחד מהפורמטים הבאים:

    • תפקידים מוגדרים מראש: roles/SERVICE.IDENTIFIER
    • תפקידים בהתאמה אישית ברמת הפרויקט: projects/PROJECT_ID/roles/IDENTIFIER
    • תפקידים בהתאמה אישית ברמת הארגון: organizations/ORG_ID/roles/IDENTIFIER

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

  • CONDITION: אופציונלי. התנאי שצריך להוסיף לקישור התפקיד. בסקירה הכללית של התנאים תוכלו לקרוא בהרחבה על תנאים.

לדוגמה, כדי להעניק את התפקיד Service Account User למשתמשmy-user@example.comבחשבון השירות my-service-account@my-project.iam.gserviceaccount.com:

gcloud iam service-accounts add-iam-policy-binding my-service-account@my-project.iam.gserviceaccount.com \
    --member=user:my-user@example.com --role=roles/iam.serviceAccountUser

איך מבטלים תפקידים בודדים ב-IAM

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

המסוף

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

    כניסה לדף Service Accounts

  2. בוחרים פרויקט.

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

  4. נכנסים לכרטיסייה Permissions ומחפשים את הקטע Principals with access to this service account.

  5. מחפשים את השורה שמכילה את חשבון המשתמש שרוצים לבטל את הגישה שלו. בשורה הזו לוחצים על Edit principal.

  6. לוחצים על Delete ליד התפקיד שרוצים לבטל ואז על Save.

gcloud

כדי לבטל תפקידים במהירות, תוכלו להריץ את הפקודה remove-iam-policy-binding:

gcloud iam service-accounts remove-iam-policy-binding SA_ID \
    --member=PRINCIPAL --role=ROLE_NAME

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

  • SA_ID: המזהה של חשבון השירות – כתובת האימייל שלו בפורמט SA_NAME@PROJECT_ID.iam.gserviceaccount.com או המספר הייחודי שלו.

  • PRINCIPAL: המזהה של החשבון הראשי או של המשתמש בקבוצה. בדרך כלל בצורה הבאה: PRINCIPAL-TYPE:ID. לדוגמה, user:my-user@example.com או principalSet://iam.googleapis.com/locations/global/workforcePools/example-pool/group/example-group@example.com. רשימה מלאה של הערכים שיכולים להיות ל-PRINCIPAL מופיעה במאמר מזהים של חשבונות משתמשים.

    בסוג חשבון המשתמש user, שם הדומיין במזהה צריך להיות של Google Workspace או של Cloud Identity. בסקירה הכללית על Cloud Identity תוכלו לקרוא איך מגדירים דומיין ב-Cloud Identity.

  • ROLE_NAME: שם התפקיד שרוצים לבטל. משתמשים באחד מהפורמטים הבאים:

    • תפקידים מוגדרים מראש: roles/SERVICE.IDENTIFIER
    • תפקידים בהתאמה אישית ברמת הפרויקט: projects/PROJECT_ID/roles/IDENTIFIER
    • תפקידים בהתאמה אישית ברמת הארגון: organizations/ORG_ID/roles/IDENTIFIER

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

לדוגמה, כדי לבטל את התפקיד Service Account User מהמשתמשmy-user@example.comבחשבון השירות my-service-account@my-project.iam.gserviceaccount.com:

gcloud iam service-accounts remove-iam-policy-binding my-service-account@my-project.iam.gserviceaccount.com \
    --member=user:my-user@example.com --role=roles/iam.serviceAccountUser

איך נותנים או מבטלים מספר תפקידים ב-IAM בבת אחת באמצעות מסוף Google Cloud

אתם יכולים להשתמש במסוף Google Cloud כדי להעניק ולבטל כמה תפקידים לישות מורשית אחת:

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

    כניסה לדף Service Accounts

  2. בוחרים פרויקט.

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

  4. נכנסים לכרטיסייה Permissions ומחפשים את הקטע Principals with access to this service account.

  5. בוחרים את החשבון הראשי שאת התפקידים שלו רוצים לשנות:

    • כדי לשנות את התפקידים של חשבון ראשי שכבר יש לו תפקידים בחשבון השירות, מחפשים את השורה של החשבון הראשי, לוחצים על Edit principal ליד השורה ואז על Add another role.

      כדי לשנות את התפקידים של סוכן שירות, מסמנים את התיבה Include Google-provided role grants כדי לראות את כתובת האימייל שלו.

    • כדי לתת תפקידים לחשבון ראשי שאין לו תפקידים קיימים בחשבון השירות, לוחצים על ‏Grant access וממלאים את כתובת האימייל או מזהה אחר של החשבון הראשי.

  6. משנים את התפקידים של החשבון הראשי:

    • כדי לתת תפקיד לחשבון ראשי שאין לו תפקידים קיימים במשאב, לוחצים על Select a role ובוחרים מהרשימה הנפתחת את התפקיד שרוצים לתת.
    • כדי לתת תפקיד נוסף לחשבון הראשי, לוחצים על Add another role ובוחרים מהרשימה הנפתחת את התפקיד שרוצים לתת.
    • כדי להחליף לחשבון הראשי תפקיד קיים בתפקיד אחר, לוחצים על התפקיד הקיים ובוחרים מהרשימה הנפתחת את התפקיד האחר שרוצים לתת.
    • כדי לבטל תפקידים של החשבון הראשי, לוחצים על Delete ליד כל אחד מהתפקידים שרוצים לבטל.

    אפשר גם להוסיף תנאי לתפקיד, לשנות את התנאי או להסיר את התנאי.

  7. לוחצים על Save.

הענקת או ביטול מספר תפקידי IAM באופן פרוגרמטי

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

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

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

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

טעינת מדיניות ההרשאות הקיימת

gcloud

כדי לראות את מדיניות ההרשאות של חשבון השירות, מריצים את הפקודה get-iam-policy לחשבון השירות:

gcloud iam service-accounts get-iam-policy SA_ID --format=FORMAT > PATH

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

  • SA_ID: המזהה של חשבון השירות – כתובת האימייל שלו בפורמט SA_NAME@PROJECT_ID.iam.gserviceaccount.com או המספר הייחודי שלו.

  • FORMAT: הפורמט של מדיניות ההרשאות. אפשר להשתמש ב-json או ב-yaml.

  • PATH: הנתיב לקובץ החדש שייווצר עם מדיניות ההרשאות.

לדוגמה, באמצעות הפקודה הבאה המדיניות של חשבון השירות my-service-account תישמר בספריית הבית בפורמט JSON:

gcloud iam service-accounts get-iam-policy my-service-account --format json > ~/policy.json

REST

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

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

  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud . מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project.
  • SA_ID: המזהה של חשבון השירות – כתובת האימייל שלו בפורמט SA_NAME@PROJECT_ID.iam.gserviceaccount.com או המספר הייחודי שלו.

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

ה-method של ה-HTTP וכתובת ה-URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_ID:getIamPolicy

תוכן בקשת JSON:

{
  "options": {
    "requestedPolicyVersion": POLICY_VERSION
  }
}

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

התשובה תכיל את מדיניות ההרשאות של חשבון השירות. לדוגמה:

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/serviceAccountAdmin",
      "members": [
        "user:my-user@example.com"
      ]
    }
  ]
}

שומרים את התגובה בקובץ מהסוג המתאים (json או yaml).

Java

במאמר ספריות הלקוח של IAM מוסבר איך להתקין את ספריית הלקוח ולהשתמש בה ב-IAM. למידע נוסף, קראו את מאמרי העזרה של ‎IAM Java API‎.

כדי לבצע אימות ב-IAM, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.


import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.iam.admin.v1.ServiceAccountName;
import com.google.iam.v1.GetIamPolicyRequest;
import com.google.iam.v1.Policy;
import java.io.IOException;

public class GetServiceAccountPolicy {
  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    // TODO: Replace with your project ID.
    String projectId = "your-project-id";
    // TODO: Replace with your service account name.
    String serviceAccount = "your-service-account";
    getPolicy(projectId, serviceAccount);
  }

  // Gets a service account's IAM policy.
  public static Policy getPolicy(String projectId, String serviceAccount) throws IOException {

    // Construct the service account email.
    // You can modify the ".iam.gserviceaccount.com" to match the name of the service account
    // whose allow policy you want to get.
    String serviceAccountEmail = serviceAccount + "@" + projectId + ".iam.gserviceaccount.com";

    // Initialize client that will be used to send requests.
    // This client only needs to be created once, and can be reused for multiple requests.
    try (IAMClient iamClient = IAMClient.create()) {
      GetIamPolicyRequest request = GetIamPolicyRequest.newBuilder()
              .setResource(ServiceAccountName.of(projectId, serviceAccountEmail).toString())
              .build();
      Policy policy = iamClient.getIamPolicy(request);
      System.out.println("Policy retrieved: " + policy.toString());
      return policy;
    }
  }
}

Python

במאמר ספריות הלקוח של IAM מוסבר איך להתקין את ספריית הלקוח ולהשתמש בה ב-IAM. למידע נוסף, קראו את מאמרי העזרה של ‎IAM Python API‎.

כדי לבצע אימות ב-IAM, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.

from google.cloud import iam_admin_v1
from google.iam.v1 import iam_policy_pb2, policy_pb2


def get_service_account_iam_policy(project_id: str, account: str) -> policy_pb2.Policy:
    """Get policy for service account.

    project_id: ID or number of the Google Cloud project you want to use.
    account: ID or email which is unique identifier of the service account.
    """

    iam_client = iam_admin_v1.IAMClient()
    request = iam_policy_pb2.GetIamPolicyRequest()
    request.resource = f"projects/{project_id}/serviceAccounts/{account}"

    policy = iam_client.get_iam_policy(request)
    return policy

עריכת מדיניות ההרשאה

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

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

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

{
  "role": "ROLE_NAME",
  "members": [
    "PRINCIPAL_1",
    "PRINCIPAL_2",
    ...
    "PRINCIPAL_N"
  ],
  "conditions:" {
    CONDITIONS
  }
}

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

  • ROLE_NAME: שם התפקיד שרוצים לתת. תוכלו להשתמש באחד מהפורמטים הבאים:

    • תפקידים מוגדרים מראש: roles/SERVICE.IDENTIFIER
    • תפקידים בהתאמה אישית ברמת הפרויקט: projects/PROJECT_ID/roles/IDENTIFIER
    • תפקידים בהתאמה אישית ברמת הארגון: organizations/ORG_ID/roles/IDENTIFIER

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

  • PRINCIPAL_1, ‏PRINCIPAL_2 ו-...PRINCIPAL_N: מזהי החשבונות הראשיים שאתם רוצים לתת להם את התפקיד.

    בדרך כלל, מזהי החשבונות הראשיים מופיעים בפורמט הבא: PRINCIPAL-TYPE:ID. לדוגמה, user:my-user@example.com או principalSet://iam.googleapis.com/locations/global/workforcePools/example-pool/group/example-group@example.com. רשימה מלאה של הערכים שיכולים להיות ל-PRINCIPAL מופיעה במאמר מזהים של חשבונות משתמשים.

    בסוג חשבון המשתמש user, שם הדומיין במזהה צריך להיות של Google Workspace או של Cloud Identity. בסקירה הכללית על Cloud Identity תוכלו לקרוא איך מגדירים דומיין ב-Cloud Identity.

  • CONDITIONS: אופציונלי. כל התנאים שמציינים מתי תוענק גישה.

מתן תפקידים

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

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

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

gcloud

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

לדוגמה, נניח שמדיניות ההרשאות כוללת את הקישור הבא בין תפקידים, שנותן את התפקיד Service Account User ‏ (roles/iam.serviceAccountUser) ל-Kai:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com"
  ]
}

כדי להעניק את אותו התפקיד ל-Raha, צריך להוסיף את Raha לקישור הקיים בין התפקידים:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com",
    "user:raha@example.com"
  ]
}

REST

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

לדוגמה, נניח שמדיניות ההרשאות כוללת את הקישור הבא בין תפקידים, שנותן את התפקיד Service Account User ‏ (roles/iam.serviceAccountUser) ל-Kai:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com"
  ]
}

כדי להעניק את אותו התפקיד ל-Raha, צריך להוסיף את Raha לקישור הקיים בין התפקידים:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com",
    "user:raha@example.com"
  ]
}

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

gcloud

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

לדוגמה, כדי לתת את התפקיד Service Account Token Creator ‏(roles/iam.serviceAccountTokenCreator) ל-Raha, מוסיפים את הקישור הבא בין תפקידים למערך bindings במדיניות ההרשאות:

{
  "role": "roles/iam.serviceAccountTokenCreator",
  "members": [
    "user:raha@example.com"
  ]
}

REST

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

לדוגמה, כדי לתת את התפקיד Service Account Token Creator ‏(roles/iam.serviceAccountTokenCreator) ל-Raha, מוסיפים את הקישור הבא בין תפקידים למערך bindings במדיניות ההרשאות:

{
  "role": "roles/iam.serviceAccountTokenCreator",
  "members": [
    "user:raha@example.com"
  ]
}

ביטול תפקיד

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

gcloud

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

לדוגמה, נניח שמדיניות ההרשאות כוללת את הקישור הבא בין תפקידים, שנותן לקאי ולראחה את התפקיד Service Account User ‏(roles/iam.serviceAccountUser):

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com",
    "user:raha@example.com"
  ]
}

כדי לבטל את התפקיד של Kai, מסירים את מזהה החשבון הראשי של Kai מהקישור בין התפקידים:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    user:raha@example.com
  ]
}

כדי לבטל את התפקיד גם מ-Kai וגם מ-Raha, מסירים את הקישור בין התפקידים ממדיניות ההרשאות.

REST

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

לדוגמה, נניח שמדיניות ההרשאות כוללת את הקישור הבא בין תפקידים, שנותן לקאי ולראחה את התפקיד Service Account User ‏(roles/iam.serviceAccountUser):

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com",
    "user:raha@example.com"
  ]
}

כדי לבטל את התפקיד של Kai, מסירים את מזהה החשבון הראשי של Kai מהקישור בין התפקידים:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    user:raha@example.com
  ]
}

כדי לבטל את התפקיד גם מ-Kai וגם מ-Raha, מסירים את הקישור בין התפקידים ממדיניות ההרשאות.

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

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

gcloud

כדי להגדיר את מדיניות ההרשאות של המשאב, מריצים את הפקודה set-iam-policy לחשבון השירות:

gcloud iam service-accounts set-iam-policy SA_ID PATH

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

  • SA_ID: המזהה של חשבון השירות – כתובת האימייל שלו בפורמט SA_NAME@PROJECT_ID.iam.gserviceaccount.com או המספר הייחודי שלו.

  • PATH: הנתיב לקובץ שמכיל את מדיניות ההרשאות החדשה.

התשובה תכיל את מדיניות ההרשאות המעודכנת.

לדוגמה, באמצעות הפקודה הבאה תגדירו את מדיניות ההרשאות ששמורה ב-policy.json כמדיניות של חשבון השירות my-service-account@my-project.iam.gserviceaccount.com:

gcloud iam service-accounts set-iam-policy my-service-account@my-project.iam.gserviceaccount.com \
    ~/policy.json

REST

השיטה serviceAccounts.setIamPolicy מגדירה מדיניות הרשאות מעודכנת לחשבון השירות.

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

  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud . מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project.
  • SA_ID: המזהה של חשבון השירות – כתובת האימייל שלו בפורמט SA_NAME@PROJECT_ID.iam.gserviceaccount.com או המספר הייחודי שלו.

  • POLICY: ייצוג ב-JSON של המדיניות שרוצים להגדיר. בדף העזר בנושא מדיניות תוכלו לקרוא על הפורמטים של המדיניות.

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

    {
      "version": 1,
      "etag": "BwUqLaVeua8=",
      "bindings": [
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "group:my-group@example.com"
          ]
        },
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:my-user@example.com"
          ]
        }
      ]
    }

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

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_ID:setIamPolicy

תוכן בקשת JSON:

{
  "policy": POLICY
}

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

התגובה מכילה את מדיניות ההרשאה המעודכנת.

Java

במאמר ספריות הלקוח של IAM מוסבר איך להתקין את ספריית הלקוח ולהשתמש בה ב-IAM. למידע נוסף, קראו את מאמרי העזרה של ‎IAM Java API‎.

כדי לבצע אימות ב-IAM, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.

import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.iam.admin.v1.ServiceAccountName;
import com.google.iam.v1.Policy;
import com.google.iam.v1.SetIamPolicyRequest;
import com.google.protobuf.FieldMask;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

public class SetServiceAccountPolicy {
  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    // TODO: Replace with your project ID.
    String projectId = "your-project-id";
    // TODO: Replace with your service account name.
    String serviceAccount = "your-service-account";
    // TODO: Replace with your policy, GetPolicy.getPolicy(projectId, serviceAccount).
    Policy policy = Policy.newBuilder().build();

    setServiceAccountPolicy(policy, projectId, serviceAccount);
  }

  // Sets a service account's policy.
  public static Policy setServiceAccountPolicy(Policy policy, String projectId,
                                               String serviceAccount) throws IOException {

    // Construct the service account email.
    // You can modify the ".iam.gserviceaccount.com" to match the name of the service account
    // whose allow policy you want to set.
    String accountEmail = String.format("%s@%s.iam.gserviceaccount.com", serviceAccount, projectId);

    // Initialize client that will be used to send requests.
    // This client only needs to be created once, and can be reused for multiple requests.
    try (IAMClient iamClient = IAMClient.create()) {
      List<String> paths = Arrays.asList("bindings", "etag");
      SetIamPolicyRequest request = SetIamPolicyRequest.newBuilder()
              .setResource(ServiceAccountName.of(projectId, accountEmail).toString())
              .setPolicy(policy)
              // A FieldMask specifying which fields of the policy to modify. Only
              // the fields in the mask will be modified. If no mask is provided, the
              // following default mask is used:
              // `paths: "bindings, etag"`
              .setUpdateMask(FieldMask.newBuilder().addAllPaths(paths).build())
              .build();

      return iamClient.setIamPolicy(request);
    }
  }
}

Python

במאמר ספריות הלקוח של IAM מוסבר איך להתקין את ספריית הלקוח ולהשתמש בה ב-IAM. למידע נוסף, קראו את מאמרי העזרה של ‎IAM Python API‎.

כדי לבצע אימות ב-IAM, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.

from google.cloud import iam_admin_v1
from google.iam.v1 import iam_policy_pb2, policy_pb2


def set_service_account_iam_policy(
    project_id: str, account: str, policy: policy_pb2.Policy
) -> policy_pb2.Policy:
    """Set policy for service account.

    Pay attention that previous state will be completely rewritten.
    If you want to update only part of the policy follow the approach
    read->modify->write.
    For more details about policies check out
    https://cloud.google.com/iam/docs/policies

    project_id: ID or number of the Google Cloud project you want to use.
    account: ID or email which is unique identifier of the service account.
    policy: Policy which has to be set.
    """

    # Same approach as for policies on project level,
    # but client stub is different.
    iam_client = iam_admin_v1.IAMClient()
    request = iam_policy_pb2.SetIamPolicyRequest()
    request.resource = f"projects/{project_id}/serviceAccounts/{account}"

    # request.etag field also will be merged which means
    # you are secured from collision, but it means that request
    # may fail and you need to leverage exponential retries approach
    # to be sure policy has been updated.
    request.policy.MergeFrom(policy)

    policy = iam_client.set_iam_policy(request)
    return policy

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

נסו בעצמכם

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

מתחילים לעבוד בלי לשלם