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

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

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

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

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

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

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

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

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

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

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

    C#‎

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

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

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

      If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

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

    Java

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

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

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

      If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

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

    Python

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

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

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

      If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    למידע נוסף, ראו הגדרת 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. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  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
  3. 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 getIamPolicy ב-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. נכנסים לדף Manage resources במסוף Google Cloud .

    כניסה לדף 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. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  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. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  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

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

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

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  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
  3. 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 getIamPolicy ב-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
  }
}

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

מתן תפקידים ב-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

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

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

    gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH

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

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

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

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

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

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

    gcloud projects set-iam-policy my-project ~/policy.json
  3. 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 setIamPolicy של ה-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$ להרצה, לבדיקה ולפריסה של עומסי העבודה.

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