ניהול הגישה לפרויקטים, לתיקיות ולארגונים

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

במדריכים הבאים מוסבר איך לנהל את הגישה למשאבים אחרים:

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

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

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

  • מוודאים שיש לכם את תפקידי ה-IAM שנדרשים לניהול הגישה.

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

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

  • מגדירים אימות.

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

    המסוף

    כשמשתמשים במסוף Google Cloud כדי לגשת לשירותים ולממשקי ה-API, לא צריך להגדיר אימות. Google Cloud

    gcloud

    במסוף Google Cloud , מפעילים את Cloud Shell.

    הפעלת Cloud Shell

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

    C#‎

    כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של .NET שבדף הזה, מתקינים ומפעילים את ה-CLI של gcloud, ואז מגדירים את Application Default Credentials באמצעות פרטי הכניסה של המשתמש.

    1. התקינו את ה-CLI של Google Cloud.

    2. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

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

      gcloud auth application-default login

      אם אתם משתמשים ב-Cloud Shell, אין צורך לבצע את הפעולה הזו.

      אם מוחזרת שגיאת אימות ואתם משתמשים בספק זהויות חיצוני (IdP), ודאו ש נכנסתם ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

    למידע נוסף, ראו הגדרת ADC לסביבת פיתוח מקומית במאמרי העזרה בנושא אימות Google Cloud .

    Java

    כדי להשתמש בדוגמאות של Java שבדף הזה בסביבת פיתוח מקומית, מתקינים ומפעילים את ה-CLI של gcloud, ואז מגדירים את Application Default Credentials באמצעות פרטי הכניסה של המשתמש.

    1. התקינו את ה-CLI של Google Cloud.

    2. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

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

      gcloud auth application-default login

      אם אתם משתמשים ב-Cloud Shell, אין צורך לבצע את הפעולה הזו.

      אם מוחזרת שגיאת אימות ואתם משתמשים בספק זהויות חיצוני (IdP), ודאו ש נכנסתם ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

    למידע נוסף, ראו הגדרת ADC לסביבת פיתוח מקומית במאמרי העזרה בנושא אימות Google Cloud .

    Python

    כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של Python שבדף הזה, מתקינים ומפעילים את ה-CLI של gcloud, ואז מגדירים את Application Default Credentials באמצעות פרטי הכניסה של המשתמש.

    1. התקינו את ה-CLI של Google Cloud.

    2. אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

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

      gcloud auth application-default login

      אם אתם משתמשים ב-Cloud Shell, אין צורך לבצע את הפעולה הזו.

      אם מוחזרת שגיאת אימות ואתם משתמשים בספק זהויות חיצוני (IdP), ודאו ש נכנסתם ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

    למידע נוסף, ראו הגדרת ADC לסביבת פיתוח מקומית במאמרי העזרה בנושא אימות Google Cloud .

    REST

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

      התקינו את ה-CLI של Google Cloud.

      אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

    מידע נוסף מופיע במאמר אימות לשימוש ב-REST במסמכי האימות של Google Cloud .

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

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

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

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

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

  • כדי לנהל את הגישה לפרויקטים:
    • resourcemanager.projects.getIamPolicy
    • resourcemanager.projects.setIamPolicy
  • כדי לנהל את הגישה לתיקיות:
    • resourcemanager.folders.getIamPolicy
    • resourcemanager.folders.setIamPolicy
  • כדי לנהל גישה לארגונים:
    • resourcemanager.organizations.getIamPolicy
    • resourcemanager.organizations.setIamPolicy

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

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

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

המסוף

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

    כניסה לדף IAM

  2. בוחרים פרויקט, תיקייה או ארגון.

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

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

gcloud

  1. במסוף Google Cloud , מפעילים את Cloud Shell.

    הפעלת Cloud Shell

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

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

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

    gcloud RESOURCE_TYPE get-iam-policy RESOURCE_ID --format=FORMAT > PATH

    מספקים את הערכים הבאים:

    • RESOURCE_TYPE: סוג המשאב שרוצים להציג את הרשאת הגישה אליו. משתמשים באחד מהערכים הבאים: projects, resource-manager folders או organizations.

    • RESOURCE_ID: מזהה הפרויקט, התיקייה או הארגון ב- Google Cloud . מזהי פרויקטים מכילים אותיות וספרות, למשל my-project. מזהי תיקיות וארגונים מכילים רק ספרות, למשל 123456789012.

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

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

    לדוגמה, הפקודה הבאה מקבלת את המדיניות של הפרויקט my-project ושומרת אותה בספריית הבית בפורמט JSON:

    gcloud projects get-iam-policy my-project --format=json > ~/policy.json

C#

כדי לבצע אימות למנהל המשאבים, מגדירים את ה-Application Default Credentials מידע נוסף מופיע במאמר לפני שמתחילים.

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

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

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


using Google.Apis.Auth.OAuth2;
using Google.Apis.CloudResourceManager.v1;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy GetPolicy(string projectId)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(CloudResourceManagerService.Scope.CloudPlatform);
        var service = new CloudResourceManagerService(
            new CloudResourceManagerService.Initializer
            {
                HttpClientInitializer = credential
            });

        var policy = service.Projects.GetIamPolicy(new GetIamPolicyRequest(),
            projectId).Execute();
        return policy;
    }
}

Java

כדי לבצע אימות למנהל המשאבים, מגדירים את ה-Application Default Credentials מידע נוסף מופיע במאמר לפני שמתחילים.

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

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

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

import com.google.cloud.resourcemanager.v3.ProjectsClient;
import com.google.iam.admin.v1.ProjectName;
import com.google.iam.v1.GetIamPolicyRequest;
import com.google.iam.v1.Policy;
import java.io.IOException;

public class GetProjectPolicy {
  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";

    getProjectPolicy(projectId);
  }

  // Gets a project's policy.
  public static Policy getProjectPolicy(String projectId) throws IOException {
    // 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 (ProjectsClient projectsClient = ProjectsClient.create()) {
      GetIamPolicyRequest request = GetIamPolicyRequest.newBuilder()
              .setResource(ProjectName.of(projectId).toString())
              .build();
      return projectsClient.getIamPolicy(request);
    }
  }
}

Python

כדי לבצע אימות למנהל המשאבים, מגדירים את ה-Application Default Credentials מידע נוסף מופיע במאמר לפני שמתחילים.

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

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

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

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


def get_project_policy(project_id: str) -> policy_pb2.Policy:
    """Get policy for project.

    project_id: ID or number of the Google Cloud project you want to use.
    """

    client = resourcemanager_v3.ProjectsClient()
    request = iam_policy_pb2.GetIamPolicyRequest()
    request.resource = f"projects/{project_id}"

    policy = client.get_iam_policy(request)
    print(f"Policy retrieved: {policy}")

    return policy

REST

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

ה-method get-iam-policy ב-API של מנהל המשאבים מקבלת את מדיניות ההרשאה של פרויקט, של תיקייה או של ארגון.

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

  • API_VERSION: גרסת ה-API שבה ייעשה שימוש. לפרויקטים ולארגונים, צריך להשתמש ב-v1. לתיקיות, צריך להשתמש ב-v2.
  • RESOURCE_TYPE: סוג המשאב שאת המדיניות שלו רוצים לנהל. אפשר להשתמש ב-projects, ב-folders או ב-organizations.
  • RESOURCE_ID: מזהה הפרויקט, הארגון או התיקייה ב- Google Cloud. מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project. מזהי תיקיות וארגונים מכילים רק ספרות, למשל 123456789012.
  • POLICY_VERSION: הגרסה של המדיניות שתוחזר. בבקשות צריך לציין את הגרסה הכי עדכנית של המדיניות (3). פרטים נוספים מופיעים במאמר ציון גרסת מדיניות בזמן אחזור מדיניות.

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

POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:getIamPolicy

תוכן בקשת JSON:

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

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

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

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

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

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

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

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

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

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

המסוף

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

    כניסה לדף IAM

  2. בוחרים פרויקט, תיקייה או ארגון.

  3. בוחרים חשבון משתמש כדי להקצות לו תפקיד:

    • כדי להקצות תפקיד לחשבון משתמש שכבר יש לו תפקידים אחרים במשאב, לוחצים על 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.

  4. לוחצים על Select a role ומחפשים את התפקיד שרוצים להקצות לפי ההנחיות הבאות:

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

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

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

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

  1. במסוף Google Cloud , נכנסים לדף Manage resources.

    כניסה לדף Manage resources

  2. בוחרים את כל המשאבים שרוצים להעניק להם הרשאות.

  3. אם חלונית המידע לא מוצגת, לוחצים על Show info panel. לוחצים על Permissions.

  4. בוחרים חשבון משתמש כדי להקצות לו תפקיד:

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

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

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

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

gcloud

  1. במסוף Google Cloud , מפעילים את Cloud Shell.

    הפעלת Cloud Shell

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

  2. הפקודה add-iam-policy-binding מאפשרת להקצות תפקיד לחשבון משתמש במהירות.

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

    • RESOURCE_TYPE: סוג המשאב שרוצים לנהל את הגישה אליו. אפשר להשתמש ב-projects, ב-resource-manager folders או ב-organizations.

    • RESOURCE_ID: מזהה הפרויקט, התיקייה או הארגון ב- Google Cloud . מזהי פרויקטים מכילים אותיות וספרות, למשל my-project. מזהי תיקיות וארגונים מכילים רק ספרות, למשל 123456789012.

    • 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: התנאי שרוצים להוסיף לקישור התפקידים. אם לא רוצים להוסיף תנאי, אפשר להשתמש בערך None. מידע נוסף על התנאים מופיע במאמר סקירה כללית של התנאים.

    מריצים את הפקודה הבאה:

    ‫Linux,‏ macOS או Cloud Shell

    gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \
        --member=PRINCIPAL --role=ROLE_NAME \
        --condition=CONDITION

    ‏Windows (PowerShell)

    gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID `
        --member=PRINCIPAL --role=ROLE_NAME `
        --condition=CONDITION

    Windows‏ (cmd.exe)

    gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID ^
        --member=PRINCIPAL --role=ROLE_NAME ^
        --condition=CONDITION

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

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

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

המסוף

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

    כניסה לדף IAM

  2. בוחרים פרויקט, תיקייה או ארגון.

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

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

gcloud

  1. במסוף Google Cloud , מפעילים את Cloud Shell.

    הפעלת Cloud Shell

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

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

    gcloud RESOURCE_TYPE remove-iam-policy-binding RESOURCE_ID 
    --member=PRINCIPAL --role=ROLE_NAME

    מספקים את הערכים הבאים:

    • RESOURCE_TYPE: סוג המשאב שרוצים לנהל את הגישה אליו. משתמשים ב-projects, ב-resource-manager folders או ב-organizations.

    • RESOURCE_ID: מזהה הפרויקט, התיקייה או הארגון ב- Google Cloud . מזהי פרויקטים מכילים אותיות וספרות, למשל my-project. מזהי תיקיות וארגונים מכילים רק ספרות, למשל 123456789012.

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

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

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

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

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

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

    gcloud projects remove-iam-policy-binding example-project 
    --member=serviceAccount:example-service-account@example-project.iam.gserviceaccount.com
    --role=roles/resourcemanager.projectCreator

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

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

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

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

    כניסה לדף IAM

  2. בוחרים פרויקט, תיקייה או ארגון.

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

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

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

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

  4. עריכת התפקידים של חשבון משתמש:

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

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

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

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

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

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

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

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

קבלת מדיניות ההרשאה הנוכחית

gcloud

הפקודה gcloud get-iam-policy מאחזרת את מדיניות ההרשאות של הפרויקט, התיקייה או הארגון.

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

  • RESOURCE_TYPE: סוג המשאב שאת מדיניות ההרשאה שלו רוצים לקבל. הערכים התקינים הם: projects,‏ resource-manager folders או organizations.

  • RESOURCE_ID: מזהה הפרויקט, התיקייה או הארגון ב- Google Cloud . מזהי פרויקטים מכילים אותיות וספרות, למשל my-project. מזהי תיקיות וארגונים מכילים רק ספרות, למשל 123456789012.

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

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

מריצים את הפקודה הבאה:

‫Linux,‏ macOS או Cloud Shell

gcloud RESOURCE_TYPE get-iam-policy RESOURCE_ID --format=FORMAT > PATH

‏Windows (PowerShell)

gcloud RESOURCE_TYPE get-iam-policy RESOURCE_ID --format=FORMAT > PATH

Windows‏ (cmd.exe)

gcloud RESOURCE_TYPE get-iam-policy RESOURCE_ID --format=FORMAT > PATH

לדוגמה, הפקודה הבאה מקבלת את מדיניות ההרשאה של הפרויקט my-project ושומרת אותה בספריית הבית בפורמט JSON:

gcloud projects get-iam-policy my-project --format json > ~/policy.json

C#

כדי לבצע אימות למנהל המשאבים, מגדירים את ה-Application Default Credentials מידע נוסף מופיע במאמר לפני שמתחילים.

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

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


using Google.Apis.Auth.OAuth2;
using Google.Apis.CloudResourceManager.v1;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy GetPolicy(string projectId)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(CloudResourceManagerService.Scope.CloudPlatform);
        var service = new CloudResourceManagerService(
            new CloudResourceManagerService.Initializer
            {
                HttpClientInitializer = credential
            });

        var policy = service.Projects.GetIamPolicy(new GetIamPolicyRequest(),
            projectId).Execute();
        return policy;
    }
}

Java

כדי לבצע אימות למנהל המשאבים, מגדירים את ה-Application Default Credentials מידע נוסף מופיע במאמר לפני שמתחילים.

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

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

import com.google.cloud.resourcemanager.v3.ProjectsClient;
import com.google.iam.admin.v1.ProjectName;
import com.google.iam.v1.GetIamPolicyRequest;
import com.google.iam.v1.Policy;
import java.io.IOException;

public class GetProjectPolicy {
  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";

    getProjectPolicy(projectId);
  }

  // Gets a project's policy.
  public static Policy getProjectPolicy(String projectId) throws IOException {
    // 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 (ProjectsClient projectsClient = ProjectsClient.create()) {
      GetIamPolicyRequest request = GetIamPolicyRequest.newBuilder()
              .setResource(ProjectName.of(projectId).toString())
              .build();
      return projectsClient.getIamPolicy(request);
    }
  }
}

Python

כדי לבצע אימות למנהל המשאבים, מגדירים את ה-Application Default Credentials מידע נוסף מופיע במאמר לפני שמתחילים.

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

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

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


def get_project_policy(project_id: str) -> policy_pb2.Policy:
    """Get policy for project.

    project_id: ID or number of the Google Cloud project you want to use.
    """

    client = resourcemanager_v3.ProjectsClient()
    request = iam_policy_pb2.GetIamPolicyRequest()
    request.resource = f"projects/{project_id}"

    policy = client.get_iam_policy(request)
    print(f"Policy retrieved: {policy}")

    return policy

REST

ה-method get-iam-policy ב-API של מנהל המשאבים מקבלת את מדיניות ההרשאה של פרויקט, של תיקייה או של ארגון.

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

  • API_VERSION: גרסת ה-API שבה ייעשה שימוש. לפרויקטים ולארגונים, צריך להשתמש ב-v1. לתיקיות, צריך להשתמש ב-v2.
  • RESOURCE_TYPE: סוג המשאב שאת המדיניות שלו רוצים לנהל. אפשר להשתמש ב-projects, ב-folders או ב-organizations.
  • RESOURCE_ID: מזהה הפרויקט, הארגון או התיקייה ב- Google Cloud. מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project. מזהי תיקיות וארגונים מכילים רק ספרות, למשל 123456789012.
  • POLICY_VERSION: הגרסה של המדיניות שתוחזר. בבקשות צריך לציין את הגרסה הכי עדכנית של המדיניות (3). פרטים נוספים מופיעים במאמר ציון גרסת מדיניות בזמן אחזור מדיניות.

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

POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:getIamPolicy

תוכן בקשת JSON:

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

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

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

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

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

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

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

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

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

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

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

  • 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: אופציונלי. כל התנאים שמציינים מתי תוענק גישה.

מתן תפקידים ב-IAM

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

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

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

gcloud

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

לדוגמה, נניח שמדיניות ההרשאות כוללת את קישור התפקיד הבא, שמקצה את התפקיד 'בודק אבטחה' (roles/iam.securityReviewer) ל-Kai:

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

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

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

C#

כדי לבצע אימות למנהל המשאבים, מגדירים את ה-Application Default Credentials מידע נוסף מופיע במאמר לפני שמתחילים.

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


using System.Linq;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy AddMember(Policy policy, string role, string member)
    {
        var binding = policy.Bindings.First(x => x.Role == role);
        binding.Members.Add(member);
        return policy;
    }
}

Go

כדי לבצע אימות למנהל המשאבים, מגדירים את ה-Application Default Credentials מידע נוסף מופיע במאמר לפני שמתחילים.

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

import (
	"fmt"
	"io"

	"google.golang.org/api/iam/v1"
)

// addMember adds a member to a role binding.
func addMember(w io.Writer, policy *iam.Policy, role, member string) {
	for _, binding := range policy.Bindings {
		if binding.Role != role {
			continue
		}
		for _, m := range binding.Members {
			if m != member {
				continue
			}
			fmt.Fprintf(w, "Role %q found. Member already exists.\n", role)
			return
		}
		binding.Members = append(binding.Members, member)
		fmt.Fprintf(w, "Role %q found. Member added.\n", role)
		return
	}
	fmt.Fprintf(w, "Role %q not found. Member not added.\n", role)
}

Java

כדי לבצע אימות למנהל המשאבים, מגדירים את ה-Application Default Credentials מידע נוסף מופיע במאמר לפני שמתחילים.

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

import com.google.iam.v1.Binding;
import com.google.iam.v1.Policy;
import java.util.ArrayList;
import java.util.List;

public class AddMember {
  public static void main(String[] args) {
    // TODO(developer): Replace the variables before running the sample.
    // TODO: Replace with your policy, GetPolicy.getPolicy(projectId, serviceAccount).
    Policy policy = Policy.newBuilder().build();
    // TODO: Replace with your role.
    String role = "roles/existing-role";
    // TODO: Replace with your principal.
    // For examples, see https://cloud.google.com/iam/docs/principal-identifiers
    String member = "principal-id";

    addMember(policy, role, member);
  }

  // Adds a principal to a pre-existing role.
  public static Policy addMember(Policy policy, String role, String member) {
    List<Binding> newBindingsList = new ArrayList<>();

    for (Binding b : policy.getBindingsList()) {
      if (b.getRole().equals(role)) {
        newBindingsList.add(b.toBuilder().addMembers(member).build());
      } else {
        newBindingsList.add(b);
      }
    }

    // Update the policy to add the principal.
    Policy updatedPolicy = policy.toBuilder()
            .clearBindings()
            .addAllBindings(newBindingsList)
            .build();

    System.out.println("Added principal: " + updatedPolicy.getBindingsList());

    return updatedPolicy;
  }
}

Python

כדי לבצע אימות למנהל המשאבים, מגדירים את ה-Application Default Credentials מידע נוסף מופיע במאמר לפני שמתחילים.

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

from google.iam.v1 import policy_pb2
from snippets.get_policy import get_project_policy
from snippets.set_policy import set_project_policy


def modify_policy_add_principal(
    project_id: str, role: str, principal: str
) -> policy_pb2.Policy:
    """Add a principal to certain role in project policy.

    project_id: ID or number of the Google Cloud project you want to use.
    role: role to which principal need to be added.
    principal: The principal requesting access.

    For principal ID formats, see https://cloud.google.com/iam/docs/principal-identifiers
    """
    policy = get_project_policy(project_id)

    for bind in policy.bindings:
        if bind.role == role:
            bind.members.append(principal)
            break

    return set_project_policy(project_id, policy)

REST

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

לדוגמה, נניח שמדיניות ההרשאות כוללת את קישור התפקיד הבא, שמקצה את התפקיד 'בודק אבטחה' (roles/iam.securityReviewer) ל-Kai:

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

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

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

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

gcloud

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

לדוגמה, כדי להקצות את התפקיד 'אדמין של Compute Storage' (roles/compute.storageAdmin) ל-Raha, מוסיפים את קישור התפקיד הבא למערך bindings של מדיניות ההרשאות:

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

C#

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

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

כדי לבצע אימות למנהל המשאבים, מגדירים את ה-Application Default Credentials מידע נוסף מופיע במאמר לפני שמתחילים.

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


using System.Collections.Generic;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy AddBinding(Policy policy, string role, string member)
    {
        var binding = new Binding
        {
            Role = role,
            Members = new List<string> { member }
        };
        policy.Bindings.Add(binding);
        return policy;
    }
}

Java

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

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

כדי לבצע אימות למנהל המשאבים, מגדירים את ה-Application Default Credentials מידע נוסף מופיע במאמר לפני שמתחילים.

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


import com.google.iam.v1.Binding;
import com.google.iam.v1.Policy;
import java.util.Collections;
import java.util.List;

public class AddBinding {
  public static void main(String[] args) {
    // TODO(developer): Replace the variables before running the sample.
    // TODO: Replace with your policy: GetPolicy.getPolicy(projectId, serviceAccount).
    Policy policy = Policy.newBuilder().build();
    // TODO: Replace with your role.
    String role = "roles/role-to-add";
    // TODO: Replace with your principals.
    // For examples, see https://cloud.google.com/iam/docs/principal-identifiers
    List<String> members = Collections.singletonList("principal-id");

    addBinding(policy, role, members);
  }

  // Adds a principals to a role.
  public static Policy addBinding(Policy policy, String role, List<String> members) {
    Binding binding = Binding.newBuilder()
            .setRole(role)
            .addAllMembers(members)
            .build();

    // Update bindings for the policy.
    Policy updatedPolicy = policy.toBuilder().addBindings(binding).build();

    System.out.println("Added binding: " + updatedPolicy.getBindingsList());

    return updatedPolicy;
  }
}

Python

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

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

כדי לבצע אימות למנהל המשאבים, מגדירים את ה-Application Default Credentials מידע נוסף מופיע במאמר לפני שמתחילים.

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

def modify_policy_add_role(policy: dict, role: str, principal: str) -> dict:
    """Adds a new role binding to a policy."""

    binding = {"role": role, "members": [principal]}
    policy["bindings"].append(binding)
    print(policy)
    return policy

REST

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

לדוגמה, כדי להקצות את התפקיד 'אדמין של Compute Storage' (roles/compute.storageAdmin) ל-Raha, מוסיפים את קישור התפקיד הבא למערך bindings של מדיניות ההרשאות:

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

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

יש מספר אילוצים ייחודיים כשמעניקים הרשאות לפרויקטים, במיוחד כשמקצים את התפקיד 'בעלים' (roles/owner). מידע נוסף מופיע בprojects.setIamPolicy()מאמרי העזרה.

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

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

gcloud

כדי לבטל תפקיד, עורכים את מדיניות ההרשאה מסוג JSON או YAML שהוחזרה באמצעות הפקודה get-iam-policy. השינוי הזה יתעדכן רק אחרי שתגדירו את מדיניות ההרשאות המעודכנת.

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

C#

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

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

כדי לבצע אימות למנהל המשאבים, מגדירים את ה-Application Default Credentials מידע נוסף מופיע במאמר לפני שמתחילים.

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


using System.Linq;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy RemoveMember(Policy policy, string role, string member)
    {
        try
        {
            var binding = policy.Bindings.First(x => x.Role == role);
            if (binding.Members.Count != 0 && binding.Members.Contains(member))
            {
                binding.Members.Remove(member);
            }
            if (binding.Members.Count == 0)
            {
                policy.Bindings.Remove(binding);
            }
            return policy;
        }
        catch (System.InvalidOperationException e)
        {
            System.Diagnostics.Debug.WriteLine("Role does not exist in policy: \n" + e.ToString());
            return policy;
        }
    }
}

Go

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

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

כדי לבצע אימות למנהל המשאבים, מגדירים את ה-Application Default Credentials מידע נוסף מופיע במאמר לפני שמתחילים.

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

import (
	"fmt"
	"io"

	"google.golang.org/api/iam/v1"
)

// removeMember removes a member from a role binding.
func removeMember(w io.Writer, policy *iam.Policy, role, member string) {
	bindings := policy.Bindings
	bindingIndex, memberIndex := -1, -1
	for bIdx := range bindings {
		if bindings[bIdx].Role != role {
			continue
		}
		bindingIndex = bIdx
		for mIdx := range bindings[bindingIndex].Members {
			if bindings[bindingIndex].Members[mIdx] != member {
				continue
			}
			memberIndex = mIdx
			break
		}
	}
	if bindingIndex == -1 {
		fmt.Fprintf(w, "Role %q not found. Member not removed.\n", role)
		return
	}
	if memberIndex == -1 {
		fmt.Fprintf(w, "Role %q found. Member not found.\n", role)
		return
	}

	members := removeIdx(bindings[bindingIndex].Members, memberIndex)
	bindings[bindingIndex].Members = members
	if len(members) == 0 {
		bindings = removeIdx(bindings, bindingIndex)
		policy.Bindings = bindings
	}
	fmt.Fprintf(w, "Role %q found. Member removed.\n", role)
}

// removeIdx removes arr[idx] from arr.
func removeIdx[T any](arr []T, idx int) []T {
	return append(arr[:idx], arr[idx+1:]...)
}

Java

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

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

כדי לבצע אימות למנהל המשאבים, מגדירים את ה-Application Default Credentials מידע נוסף מופיע במאמר לפני שמתחילים.

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

import com.google.iam.v1.Binding;
import com.google.iam.v1.Policy;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class RemoveMember {
  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    // TODO: Replace with your policy, GetPolicy.getPolicy(projectId, serviceAccount).
    Policy policy = Policy.newBuilder().build();
    // TODO: Replace with your role.
    String role = "roles/existing-role";
    // TODO: Replace with your principal.
    // For examples, see https://cloud.google.com/iam/docs/principal-identifiers
    String member = "principal-id";

    removeMember(policy, role, member);
  }

  // Removes principal from a role; removes binding if binding contains no members.
  public static Policy removeMember(Policy policy, String role, String member) {
    // Creating new builder with all values copied from origin policy
    Policy.Builder policyBuilder = policy.toBuilder();

    // Getting binding with suitable role.
    Binding binding = null;
    for (Binding b : policy.getBindingsList()) {
      if (b.getRole().equals(role)) {
        binding = b;
        break;
      }
    }

    if (binding != null && binding.getMembersList().contains(member)) {
      List<String> newMemberList = new ArrayList<>(binding.getMembersList());
      // Removing principal from the role
      newMemberList.remove(member);

      System.out.println("Member " + member + " removed from " + role);

      // Adding all remaining principals to create new binding
      Binding newBinding = binding.toBuilder()
              .clearMembers()
              .addAllMembers(newMemberList)
              .build();

      List<Binding> newBindingList = new ArrayList<>(policyBuilder.getBindingsList());

      // Removing old binding to replace with new one
      newBindingList.remove(binding);

      // If binding has no more members, binding will not be added
      if (!newBinding.getMembersList().isEmpty()) {
        newBindingList.add(newBinding);
      }

      // Update the policy to remove the principal.
      policyBuilder.clearBindings()
              .addAllBindings(newBindingList);
    }

    Policy updatedPolicy = policyBuilder.build();

    System.out.println("Exising principals: " + updatedPolicy.getBindingsList());

    return updatedPolicy;
  }
}

Python

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

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

כדי לבצע אימות למנהל המשאבים, מגדירים את ה-Application Default Credentials מידע נוסף מופיע במאמר לפני שמתחילים.

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

from google.iam.v1 import policy_pb2
from snippets.get_policy import get_project_policy
from snippets.set_policy import set_project_policy


def modify_policy_remove_principal(
    project_id: str, role: str, principal: str
) -> policy_pb2.Policy:
    """Remove a principal from certain role in project policy.

    project_id: ID or number of the Google Cloud project you want to use.
    role: role to revoke.
    principal: The principal to revoke access from.

    For principal ID formats, see https://cloud.google.com/iam/docs/principal-identifiers
    """
    policy = get_project_policy(project_id)

    for bind in policy.bindings:
        if bind.role == role:
            if principal in bind.members:
                bind.members.remove(principal)
            break

    return set_project_policy(project_id, policy, False)

REST

כדי לבטל תפקיד, עורכים את מדיניות ההרשאה מסוג JSON או YAML שהוחזרה באמצעות הפקודה get-iam-policy. השינוי הזה יתעדכן רק אחרי שתגדירו את מדיניות ההרשאות המעודכנת.

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

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

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

gcloud

הפקודה gcloud set-iam-policy מגדירה את המדיניות בבקשה כמדיניות ההרשאה החדשה של הפרויקט, התיקייה או הארגון.

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

  • RESOURCE_TYPE: סוג המשאב שעבורו רוצים להגדיר את מדיניות ההרשאה. הערכים התקפים הם projects,‏ resource-manager folders או organizations.

  • RESOURCE_ID: מזהה הפרויקט, התיקייה או הארגון ב- Google Cloud . מזהי פרויקטים מכילים אותיות וספרות, למשל my-project. מזהי תיקיות וארגונים מכילים רק ספרות, למשל 123456789012.

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

מריצים את הפקודה הבאה:

‫Linux,‏ macOS או Cloud Shell

gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH

‏Windows (PowerShell)

gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH

Windows‏ (cmd.exe)

gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH

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

לדוגמה, הפקודה הבאה מגדירה את מדיניות ההרשאה ששמורה ב-policy.json כמדיניות ההרשאה של הפרויקט my-project:

gcloud projects set-iam-policy my-project ~/policy.json

C#


using Google.Apis.Auth.OAuth2;
using Google.Apis.CloudResourceManager.v1;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy SetPolicy(string projectId, Policy policy)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(CloudResourceManagerService.Scope.CloudPlatform);
        var service = new CloudResourceManagerService(
            new CloudResourceManagerService.Initializer
            {
                HttpClientInitializer = credential
            });

        return service.Projects.SetIamPolicy(new SetIamPolicyRequest
        {
            Policy = policy
        }, projectId).Execute();
    }
}

Java

כדי לבצע אימות למנהל המשאבים, מגדירים את ה-Application Default Credentials מידע נוסף מופיע במאמר לפני שמתחילים.

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

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

import com.google.cloud.resourcemanager.v3.ProjectsClient;
import com.google.iam.admin.v1.ProjectName;
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 SetProjectPolicy {
  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 policy, GetPolicy.getPolicy(projectId, serviceAccount).
    Policy policy = Policy.newBuilder().build();

    setProjectPolicy(policy, projectId);
  }

  // Sets a project's policy.
  public static Policy setProjectPolicy(Policy policy, String projectId)
          throws IOException {

    // 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 (ProjectsClient projectsClient = ProjectsClient.create()) {
      List<String> paths = Arrays.asList("bindings", "etag");
      SetIamPolicyRequest request = SetIamPolicyRequest.newBuilder()
              .setResource(ProjectName.of(projectId).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 projectsClient.setIamPolicy(request);
    }
  }
}

Python

כדי לבצע אימות למנהל המשאבים, מגדירים את ה-Application Default Credentials מידע נוסף מופיע במאמר לפני שמתחילים.

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

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

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


def set_project_policy(
    project_id: str, policy: policy_pb2.Policy, merge: bool = True
) -> policy_pb2.Policy:
    """
    Set policy for project. 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.
    policy: Policy which has to be set.
    merge: The strategy to be used forming the request. CopyFrom is clearing both mutable and immutable fields,
    when MergeFrom is replacing only immutable fields and extending mutable.
    https://googleapis.dev/python/protobuf/latest/google/protobuf/message.html#google.protobuf.message.Message.CopyFrom
    """
    client = resourcemanager_v3.ProjectsClient()

    request = iam_policy_pb2.GetIamPolicyRequest()
    request.resource = f"projects/{project_id}"
    current_policy = client.get_iam_policy(request)

    # Etag should as fresh as possible to lower chance of collisions
    policy.ClearField("etag")
    if merge:
        current_policy.MergeFrom(policy)
    else:
        current_policy.CopyFrom(policy)

    request = iam_policy_pb2.SetIamPolicyRequest()
    request.resource = f"projects/{project_id}"

    # 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.CopyFrom(current_policy)

    policy = client.set_iam_policy(request)
    return policy

REST

ה-method set-iam-policy של ה-API של מנהל המשאבים קובע את המדיניות בבקשה כמדיניות ההרשאה החדשה של הפרויקט, התיקייה או הארגון.

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

  • API_VERSION: גרסת ה-API שבה ייעשה שימוש. לפרויקטים ולארגונים, צריך להשתמש ב-v1. לתיקיות, צריך להשתמש ב-v2.
  • RESOURCE_TYPE: סוג המשאב שאת המדיניות שלו רוצים לנהל. אפשר להשתמש ב-projects, ב-folders או ב-organizations.
  • RESOURCE_ID: מזהה הפרויקט, הארגון או התיקייה ב- Google Cloud. מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project. מזהי תיקיות וארגונים מכילים רק ספרות, למשל 123456789012.
  • POLICY: ייצוג ב-JSON של המדיניות שרוצים להגדיר. מידע נוסף על הפורמט של מדיניות מופיע במאמרי העזרה בנושא מדיניות.

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

POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:setIamPolicy

תוכן בקשת JSON:

{
  "policy": POLICY
}

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

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

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

נסו בעצמכם

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

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