יצירה וניהול של תפקידים בהתאמה אישית

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

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

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

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

  • כדי לנהל את התפקידים ברמת הפרויקט: Role Administrator ‏ (roles/iam.roleAdmin) בפרויקט שבו רוצים לנהל את התפקידים.
  • כדי לנהל את התפקידים ברמת הארגון: Organization Role Administrator ‏ (roles/iam.organizationRoleAdmin) בארגון שבו רוצים לנהל את התפקידים.

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

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

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

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

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

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

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

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. אפשר להשתמש בפקודה gcloud iam list-testable-permissions כדי לקבל רשימה של הרשאות זמינות לתפקידים בהתאמה אישית בפרויקט או בארגון מסוימים. התשובה מפרטת את ההרשאות שבהן ניתן להשתמש בתפקידים מותאמים אישית בפרויקט או בארגון הזה.

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

    gcloud iam list-testable-permissions FULL_RESOURCE_NAME \
        --filter="customRolesSupportLevel!=NOT_SUPPORTED"

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

    • לפרויקט: //cloudresourcemanager.googleapis.com/projects/PROJECT_ID (לדוגמה, //cloudresourcemanager.googleapis.com/projects/my-project)

    • לארגון: //cloudresourcemanager.googleapis.com/organizations/NUMERIC_ID (לדוגמה, //cloudresourcemanager.googleapis.com/organizations/123456789012)

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

    כשמשתמשים בפקודה list-testable-permissions, יכולות לחזור מאות תוצאות. זוהי דוגמה חלקית של הפורמט של כל תוצאה:

    ---
    name: appengine.applications.create
    stage: GA
    ---
    customRolesSupportLevel: TESTING
    name: appengine.applications.disable
    stage: GA
    ---
    name: appengine.applications.get
    stage: GA
    ---
    name: appengine.applications.update
    stage: GA
    ---
    name: appengine.instances.delete
    stage: GA
    ---
    name: appengine.instances.get
    stage: GA
    ---
    
  3. C++

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

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

    namespace iam = ::google::cloud::iam_admin_v1;
    [](std::string const& resource) {
      iam::IAMClient client(iam::MakeIAMConnection());
      google::iam::admin::v1::QueryTestablePermissionsRequest request;
      request.set_full_resource_name(resource);
      int count = 0;
      for (auto& permission : client.QueryTestablePermissions(request)) {
        if (!permission) throw std::move(permission).status();
        std::cout << "Permission successfully retrieved: " << permission->name()
                  << "\n";
        ++count;
      }
      if (count == 0) {
        std::cout << "No testable permissions found in resource: " << resource
                  << "\n";
      }
    }

    C#

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

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

    
    using System;
    using System.Collections.Generic;
    using Google.Apis.Auth.OAuth2;
    using Google.Apis.Iam.v1;
    using Google.Apis.Iam.v1.Data;
    
    public partial class CustomRoles
    {
        public static IList<Permission> QueryTestablePermissions(
            string fullResourceName)
        {
            var credential = GoogleCredential.GetApplicationDefault()
                .CreateScoped(IamService.Scope.CloudPlatform);
            var service = new IamService(new IamService.Initializer
            {
                HttpClientInitializer = credential
            });
    
            var request = new QueryTestablePermissionsRequest
            {
                FullResourceName = fullResourceName
            };
            var response = service.Permissions.QueryTestablePermissions(request)
                .Execute();
            foreach (var p in response.Permissions)
            {
                Console.WriteLine(p.Name);
            }
            return response.Permissions;
        }
    }
    

    Go

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

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

    import (
    	"context"
    	"fmt"
    	"io"
    
    	iam "google.golang.org/api/iam/v1"
    )
    
    // queryTestablePermissions lists testable permissions on a resource.
    func queryTestablePermissions(w io.Writer, fullResourceName string) ([]*iam.Permission, error) {
    	ctx := context.Background()
    	service, err := iam.NewService(ctx)
    	if err != nil {
    		return nil, fmt.Errorf("iam.NewService: %w", err)
    	}
    
    	request := &iam.QueryTestablePermissionsRequest{
    		FullResourceName: fullResourceName,
    	}
    	response, err := service.Permissions.QueryTestablePermissions(request).Do()
    	if err != nil {
    		return nil, fmt.Errorf("Permissions.QueryTestablePermissions: %w", err)
    	}
    	for _, p := range response.Permissions {
    		fmt.Fprintf(w, "Found permissions: %v", p.Name)
    	}
    	return response.Permissions, nil
    }
    

    Java

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

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

    
    import com.google.cloud.iam.admin.v1.IAMClient;
    import com.google.cloud.iam.admin.v1.IAMClient.QueryTestablePermissionsPagedResponse;
    import com.google.iam.admin.v1.QueryTestablePermissionsRequest;
    import java.io.IOException;
    
    /** View available permissions in a project. */
    public class QueryTestablePermissions {
      public static void main(String[] args) throws IOException {
        // TODO(developer): Replace the variable before running the sample.
        // Full resource names can take one of the following forms:
        // cloudresourcemanager.googleapis.com/projects/PROJECT_ID
        // cloudresourcemanager.googleapis.com/organizations/NUMERIC_ID
        String fullResourceName = "your-full-resource-name";
    
        queryTestablePermissions(fullResourceName);
      }
    
      public static void queryTestablePermissions(String fullResourceName) throws IOException {
        QueryTestablePermissionsRequest queryTestablePermissionsRequest =
            QueryTestablePermissionsRequest.newBuilder().setFullResourceName(fullResourceName).build();
    
        try (IAMClient iamClient = IAMClient.create()) {
          QueryTestablePermissionsPagedResponse queryTestablePermissionsPagedResponse =
              iamClient.queryTestablePermissions(queryTestablePermissionsRequest);
          queryTestablePermissionsPagedResponse
              .iterateAll()
              .forEach(permission -> System.out.println(permission.getName()));
        }
      }
    }

    Python

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

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

    import os
    from typing import List
    
    from google.cloud import resourcemanager_v3
    from google.iam.v1 import iam_policy_pb2, policy_pb2
    
    
    def query_testable_permissions(
        project_id: str, permissions: List[str]
    ) -> policy_pb2.Policy:
        """Tests IAM permissions of the caller.
    
        project_id: ID or number of the Google Cloud project you want to use.
        permissions: List of permissions to get.
        """
    
        client = resourcemanager_v3.ProjectsClient()
        request = iam_policy_pb2.TestIamPermissionsRequest()
        request.resource = f"projects/{project_id}"
        request.permissions.extend(permissions)
    
        permissions_reponse = client.test_iam_permissions(request)
        print(permissions_reponse)
        return permissions_reponse.permissions

    REST

    באמצעות permissions.queryTestablePermissions תוכלו לראות את רשימת ההרשאות שזמינות בארגון או בפרויקט.

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

    • FULL_RESOURCE_NAME: ‏URI שמכיל את שם השירות ואת הנתיב למשאב. לדוגמאות, תוכלו להיעזר בשמות המלאים של המשאבים
    • PAGE_SIZE: אופציונלי. מספר ההרשאות שאפשר לכלול בתשובה. ערך ברירת המחדל הוא 100, והערך המקסימלי הוא 1,000. אם מספר ההרשאות לא נכנס בדף אחד, התשובה תכיל אסימון עימוד שמשמש לטעינת דף התוצאות הבא.
    • NEXT_PAGE_TOKEN: אופציונלי. אסימון העימוד שהוחזר באחת מהתשובות הקודמות באמצעות ה-method. אפשר להשתמש בו כדי להתחיל את רשימת ההרשאות מהמקום שבו הסתיימה התשובה הקודמת.

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

    POST https://iam.googleapis.com/v1/permissions:queryTestablePermissions

    תוכן בקשת JSON:

    {
      "fullResourceName": "FULL_RESOURCE_NAME"
      "pageSize": PAGE_SIZE,
      "pageToken": "NEXT_PAGE_TOKEN"
    }
    

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

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

    {
      "permissions": [
        {
          "name": "iam.serviceAccountKeys.create",
          "stage": "GA"
        },
        {
          "name": "iam.serviceAccountKeys.delete",
          "stage": "GA"
        },
        {
          "name": "iam.serviceAccountKeys.get",
          "stage": "GA"
        }
      ],
      "nextPageToken": "CgoHBajEfjUDQyABEPaIv5vIiMDTVhgDIhtpYW0uc2VydmljZUFjY291bnRLZXlzLmxpc3Q"
    }
    

הצגת המטא-נתונים של תפקיד

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

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

המסוף

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

    לדף Roles

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

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

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

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

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. תוכלו להשתמש בפקודה gcloud iam roles describe כדי לראות את המטא-נתונים של תפקידים מוגדרים מראש ותפקידים בהתאמה אישית.

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

    gcloud iam roles describe ROLE_ID

    ROLE_ID הוא המזהה של התפקיד. תפקידים מוגדרים מראש כוללים את הקידומת role במזהים, לדוגמה, roles/iam.roleViewer.

    בדוגמה הבאה תוכלו לראות את הפלט של הפקודה describe כשמריצים אותה על התפקיד המוגדר מראש roles/iam.roleViewer:

    gcloud iam roles describe roles/iam.roleViewer

    description: Read access to all custom roles in the project.
    etag: AA==
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    - resourcemanager.projects.get
    - resourcemanager.projects.getIamPolicy
    name: roles/iam.roleViewer
    stage: GA
    title: Role Viewer

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

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

      gcloud iam roles describe --organization=ORGANIZATION_ID ROLE_ID
    • כדי להציג את המטא-נתונים של תפקיד בהתאמה אישית שנוצר ברמת הפרויקט, מריצים את הפקודה הבאה:

      gcloud iam roles describe --project=PROJECT_ID ROLE_ID

    הסבר על הערכים הזמניים לשמירת מקום (placeholders):

    • ORGANIZATION_ID: מספר הארגון, למשל 123456789012.

    • PROJECT_ID: שם הפרויקט, למשל my-project.

    • ROLE_ID הוא מזהה התפקיד, לא כולל קידומות כמו projects/‏, organizations/ או roles/. לדוגמה: myCompanyAdmin.

    למידע נוסף, תוכלו לקרוא את מאמרי העזרה של gcloud iam roles describe.

  3. C++

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

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

    namespace iam = ::google::cloud::iam_admin_v1;
    [](std::string const& name) {
      iam::IAMClient client(iam::MakeIAMConnection());
      google::iam::admin::v1::GetRoleRequest request;
      request.set_name(name);
      auto response = client.GetRole(request);
      if (!response) throw std::move(response).status();
      std::cout << "Role successfully retrieved: " << response->DebugString()
                << "\n";
    }

    C#

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

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

    
    using System;
    using Google.Apis.Auth.OAuth2;
    using Google.Apis.Iam.v1;
    using Google.Apis.Iam.v1.Data;
    
    public partial class CustomRoles
    {
        public static Role GetRole(string name)
        {
            var credential = GoogleCredential.GetApplicationDefault()
                .CreateScoped(IamService.Scope.CloudPlatform);
            var service = new IamService(new IamService.Initializer
            {
                HttpClientInitializer = credential
            });
    
            var role = service.Roles.Get(name).Execute();
            Console.WriteLine(role.Name);
            Console.WriteLine(String.Join(", ", role.IncludedPermissions));
            return role;
        }
    }
    

    Go

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

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

    import (
    	"context"
    	"fmt"
    	"io"
    
    	iam "google.golang.org/api/iam/v1"
    )
    
    // getRole gets role metadata.
    func getRole(w io.Writer, name string) (*iam.Role, error) {
    	ctx := context.Background()
    	service, err := iam.NewService(ctx)
    	if err != nil {
    		return nil, fmt.Errorf("iam.NewService: %w", err)
    	}
    
    	role, err := service.Roles.Get(name).Do()
    	if err != nil {
    		return nil, fmt.Errorf("Roles.Get: %w", err)
    	}
    	fmt.Fprintf(w, "Got role: %v\n", role.Name)
    	for _, permission := range role.IncludedPermissions {
    		fmt.Fprintf(w, "Got permission: %v\n", permission)
    	}
    	return role, nil
    }
    

    Java

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

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

    
    import com.google.cloud.iam.admin.v1.IAMClient;
    import com.google.iam.admin.v1.GetRoleRequest;
    import com.google.iam.admin.v1.Role;
    import java.io.IOException;
    
    /** Get role metadata. Specifically, printing out role permissions. */
    public class GetRole {
    
      public static void main(String[] args) throws IOException {
        // TODO(developer): Replace the variable before running the sample.
        String roleId = "a unique identifier (e.g. testViewer)";
    
        getRole(roleId);
      }
    
      public static void getRole(String roleId) throws IOException {
        GetRoleRequest getRoleRequest = GetRoleRequest.newBuilder().setName(roleId).build();
    
        // Initialize client for sending requests. This client only needs to be created
        // once, and can be reused for multiple requests.
        try (IAMClient iamClient = IAMClient.create()) {
          Role role = iamClient.getRole(getRoleRequest);
          role.getIncludedPermissionsList().forEach(permission -> System.out.println(permission));
        }
      }
    }

    Python

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

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

    from google.api_core.exceptions import NotFound
    from google.cloud.iam_admin_v1 import GetRoleRequest, IAMClient, Role
    
    
    def get_role(project_id: str, role_id: str) -> Role:
        client = IAMClient()
        name = f"projects/{project_id}/roles/{role_id}"
        request = GetRoleRequest(name=name)
        try:
            role = client.get_role(request)
            print(f"Retrieved role: {role_id}: {role}")
            return role
        except NotFound as exc:
            raise NotFound(f"Role with id [{role_id}] not found, take some actions") from exc

    REST

    השיטה roles.get מקבלת את ההגדרה של תפקיד.

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

    • ROLE_NAME: שם התפקיד המלא, כולל הקידומות organizations/,‏ projects/ או roles/. לדוגמה: organizations/123456789012/roles/myCompanyAdmin.

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

    GET https://iam.googleapis.com/v1/ROLE_NAME

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

    התשובה תכיל את הגדרת התפקיד.

    {
      "name": "projects/my-project/roles/customRole",
      "title": "My Custom Role",
      "description": "My custom role description.",
      "includedPermissions": [
        "storage.buckets.get",
        "storage.buckets.list"
      ],
      "etag": "BwWiPg2fmDE="
    }
    
    

יצירת תפקיד בהתאמה אישית

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

ברמת הארגון, התפקיד יכול להכיל כל אחת מההרשאות של IAM שאפשר לתת לתפקידים בהתאמה אישית. לכל תפקיד בהתאמה אישית ברמת הפרויקט תוכלו לתת את ההרשאות הנתמכות, חוץ מהרשאות שאפשר לתת רק ברמת הארגון או התיקייה (למשל, resourcemanager.organizations.get). אם תנסו להוסיף את ההרשאות האלה לתפקיד בהתאמה אישית ברמת הפרויקט, תופיע הודעת שגיאה:

המסוף

האזהרה הבאה תופיע: ‎"Not applicable for project-level custom roles"‎. ההרשאות יוסרו אוטומטית מרשימת ההרשאות שכלולות בתפקיד ותוכלו ליצור אותו.

gcloud

הודעת השגיאה הבאה תופיע: INVALID_ARGUMENT: Permission PERMISSION is not valid. התפקיד בהתאמה אישית לא ייווצר עד שתסירו את ההרשאה מהגדרת התפקיד ותנסו לבצע את הפעולה שוב.

‫API בארכיטקטורת REST

הודעת השגיאה הבאה תופיע: Permission PERMISSION is not valid. יחד איתה יופיעו גם קוד השגיאה HTTP 400 והסטטוס INVALID_ARGUMENT. התפקיד בהתאמה אישית לא ייווצר עד שתסירו את ההרשאה מהגדרת התפקיד ותנסו לבצע את הפעולה שוב.

כל תפקיד בהתאמה אישית יכול להכיל עד 3,000 הרשאות. בנוסף, הגודל המקסימלי הכולל של השם, התיאור ושמות ההרשאות של תפקיד בהתאמה אישית הוא 64KB. אם אתם צריכים ליצור תפקיד בהתאמה אישית גדול יותר, אתם יכולים לפצל את ההרשאות בין מספר תפקידים בהתאמה אישית. כדאי לבחור לתפקידים בהתאמה אישית שמות שמייצגים את הקשרים ביניהם, למשל Custom Admin (1 of 2) ו-Custom Admin (2 of 2).

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

המסוף

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

איך יוצרים מאפס תפקיד בהתאמה אישית

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

    לדף Roles

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

  3. לוחצים על Create Role.

  4. מזינים את השדות הבאים לתפקיד: Title,‏ Description,‏ ID ו-Role launch stage. אי אפשר לשנות את מזהה התפקיד אחרי שיוצרים אותו.

  5. לוחצים על Add Permissions.

  6. בוחרים את ההרשאות שרוצים לכלול בתפקיד, ולוחצים על Add Permissions. תוכלו להשתמש ברשימות הנפתחות All Services ו-All Types כדי לסנן ולבחור הרשאות לפי שירותים וסוגים.

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

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

    לדף Roles

  2. בוחרים את הארגון או הפרויקט שבהם רוצים ליצור את התפקיד.
  3. בוחרים את התפקידים שעליהם רוצים לבסס את התפקיד החדש בהתאמה אישית.
  4. לוחצים על Create Role from Selection.
  5. מזינים את השדות הבאים לתפקיד: Title,‏ Description,‏ ID ו-Role launch stage. אי אפשר לשנות את מזהה התפקיד אחרי שיוצרים אותו.
  6. מבטלים את הסימון בתיבות של ההרשאות שלא רוצים לתת לתפקיד.
  7. לוחצים על Add Permissions כדי להוסיף הרשאות.
  8. לוחצים על יצירה.

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. משתמשים בפקודה gcloud iam roles create כדי ליצור תפקידים חדשים בהתאמה אישית. יש שתי דרכים להשתמש בפקודה הזו:

    • שליחת קובץ YAML שמכיל את הגדרת התפקיד

    • שימוש בדגלים כדי לציין את הגדרת התפקיד

    כשיוצרים תפקיד בהתאמה אישית, צריך להשתמש בדגלים --organization=ORGANIZATION_ID או --project=PROJECT_ID כדי לציין אם הוא ברמת הארגון או ברמת הפרויקט. בדוגמאות שבהמשך התפקיד בהתאמה אישית הוא ברמת הפרויקט.

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

    כדי ליצור תפקיד בהתאמה אישית באמצעות קובץ YAML:

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

    title: ROLE_TITLE
    description: ROLE_DESCRIPTION
    stage: LAUNCH_STAGE
    includedPermissions:
    - PERMISSION_1
    - PERMISSION_2

    הסבר על הערכים הזמניים לשמירת מקום (placeholders):

    • ROLE_TITLE: שם קליט לתפקיד, למשל "My Company Admin".

    • ROLE_DESCRIPTION: תיאור קצר של התפקיד, למשל "My custom role description".

    • LAUNCH_STAGE: השלב של התפקיד במחזור החיים של ההשקה, למשל ALPHA, ‏BETA או GA.

    • PERMISSION_1 ו-PERMISSION_2: ההרשאות שיהיו בתפקיד בהתאמה אישית, למשל iam.roles.get. בשמות ההרשאות אי אפשר להשתמש בתווים כלליים לחיפוש (*).

    שומרים את קובץ ה-YAML ומריצים אחת מהפקודות הבאות:

    • כדי ליצור תפקיד בהתאמה אישית ברמת הארגון, מריצים את הפקודה הבאה:

      gcloud iam roles create ROLE_ID--organization=ORGANIZATION_ID \
          --file=YAML_FILE_PATH
    • כדי ליצור תפקיד בהתאמה אישית ברמת הפרויקט, מריצים את הפקודה הבאה:

      gcloud iam roles create ROLE_ID --project=PROJECT_ID \
          --file=YAML_FILE_PATH

    הסבר על הערכים הזמניים לשמירת מקום (placeholders):

    • ROLE_ID: השם של התפקיד, למשל myCompanyAdmin.

    • ORGANIZATION_ID: מספר הארגון, למשל 123456789012.

    • PROJECT_ID: שם הפרויקט, למשל my-project.

    • YAML_FILE_PATH: הנתיב למיקום של קובץ ה-YAML שמכיל את ההגדרה לתפקיד בהתאמה אישית.

    דוגמאות

    תוכלו להיעזר בקובץ הבא לדוגמה כדי ליצור הגדרה לתפקיד ב-YAML:

    title: "My Company Admin"
    description: "My custom role description."
    stage: "ALPHA"
    includedPermissions:
    - iam.roles.get
    - iam.roles.list

    תוכלו להיעזר בדוגמה הבאה כדי ליצור תפקיד ברמת הארגון באמצעות קובץ YAML:

    gcloud iam roles create myCompanyAdmin --organization=123456789012 \
        --file=my-role-definition.yaml

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

    Created role [myCompanyAdmin].
    description: My custom role description.
    etag: BwVkBX0sQD0=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: organizations/123456789012/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

    תוכלו להיעזר בדוגמה הבאה כדי ליצור תפקיד ברמת הפרויקט באמצעות קובץ YAML:

    gcloud iam roles create myCompanyAdmin --project=my-project \
        --file=my-role-definition.yaml

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

    Created role [myCompanyAdmin].
    description: My custom role description.
    etag: BwVkBX0sQD0=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: projects/my-project/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

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

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

    • כדי ליצור תפקיד בהתאמה אישית ברמת הארגון, מריצים את הפקודה הבאה:

      gcloud iam roles create ROLE_ID--organization=ORGANIZATION_ID \
          --title=ROLE_TITLE --description=ROLE_DESCRIPTION \
          --permissions="PERMISSIONS_LIST" --stage=LAUNCH_STAGE
    • כדי ליצור תפקיד בהתאמה אישית ברמת הפרויקט, מריצים את הפקודה הבאה:

      gcloud iam roles create ROLE_ID --project=PROJECT_ID \
          --title=ROLE_TITLE --description=ROLE_DESCRIPTION \
          --permissions="PERMISSIONS_LIST" --stage=LAUNCH_STAGE

    הסבר על הערכים הזמניים לשמירת מקום (placeholders):

    • ROLE_ID: השם של התפקיד, למשל myCompanyAdmin.

    • ORGANIZATION_ID: מספר הארגון, למשל 123456789012.

    • PROJECT_ID: שם הפרויקט, למשל my-project.

    • ROLE_TITLE: שם קליט לתפקיד, למשל "My Company Admin".

    • ROLE_DESCRIPTION: תיאור קצר של התפקיד, למשל "My custom role description.".

    • PERMISSIONS_LIST: רשימה מופרדת בפסיקים של ההרשאות שיהיו בתפקיד בהתאמה אישית. לדוגמה: iam.roles.get,iam.roles.list. בשמות ההרשאות אי אפשר להשתמש בתווים כלליים לחיפוש (*).

    • LAUNCH_STAGE: השלב של התפקיד במחזור החיים של ההשקה, למשל ALPHA, ‏BETA או GA.

    דוגמאות

    תוכלו להיעזר בדוגמה הבאה כדי ליצור תפקיד ברמת הארגון באמצעות דגלים:

    gcloud iam roles create myCompanyAdmin --organization=123456789012 \
        --title="My Company Admin" --description="My custom role description." \
        --permissions="iam.roles.get,iam.roles.list" --stage=ALPHA

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

    Created role [myCompanyAdmin].
    description: My custom role description.
    etag: BwVkBX0sQD0=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: organizations/123456789012/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

    תוכלו להיעזר בדוגמה הבאה כדי ליצור תפקיד ברמת הפרויקט באמצעות דגלים:

    gcloud iam roles create myCompanyAdmin --project=my-project \
        --title="My Company Admin" --description="My custom role description." \
        --permissions="iam.roles.get,iam.roles.list" --stage=ALPHA

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

    Created role [myCompanyAdmin].
    description: My custom role description.
    etag: BwVkBX0sQD0=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: projects/my-project/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin
  3. C++

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

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

    namespace iam = ::google::cloud::iam_admin_v1;
    [](std::string const& parent, std::string const& role_id,
       std::vector<std::string> const& included_permissions) {
      iam::IAMClient client(iam::MakeIAMConnection());
      google::iam::admin::v1::CreateRoleRequest request;
      request.set_parent("projects/" + parent);
      request.set_role_id(role_id);
      google::iam::admin::v1::Role role;
      role.set_stage(google::iam::admin::v1::Role::GA);
      for (auto const& permission : included_permissions) {
        *role.add_included_permissions() = permission;
      }
      *request.mutable_role() = role;
      auto response = client.CreateRole(request);
      if (!response) throw std::move(response).status();
      std::cout << "Role successfully created: " << response->DebugString()
                << "\n";
    }

    C#

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

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

    
    using System;
    using System.Collections.Generic;
    using Google.Apis.Auth.OAuth2;
    using Google.Apis.Iam.v1;
    using Google.Apis.Iam.v1.Data;
    
    public partial class CustomRoles
    {
        public static Role CreateRole(string name, string projectId, string title,
            string description, IList<string> permissions, string stage)
        {
            var credential = GoogleCredential.GetApplicationDefault()
                .CreateScoped(IamService.Scope.CloudPlatform);
            var service = new IamService(new IamService.Initializer
            {
                HttpClientInitializer = credential
            });
    
            var role = new Role
            {
                Title = title,
                Description = description,
                IncludedPermissions = permissions,
                Stage = stage
            };
            var request = new CreateRoleRequest
            {
                Role = role,
                RoleId = name
            };
            role = service.Projects.Roles.Create(request,
                "projects/" + projectId).Execute();
            Console.WriteLine("Created role: " + role.Name);
            return role;
        }
    }
    

    Go

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

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

    import (
    	"context"
    	"fmt"
    	"io"
    
    	iam "google.golang.org/api/iam/v1"
    )
    
    // createRole creates a custom role.
    func createRole(w io.Writer, projectID, name, title, description, stage string, permissions []string) (*iam.Role, error) {
    	ctx := context.Background()
    	service, err := iam.NewService(ctx)
    	if err != nil {
    		return nil, fmt.Errorf("iam.NewService: %w", err)
    	}
    
    	request := &iam.CreateRoleRequest{
    		Role: &iam.Role{
    			Title:               title,
    			Description:         description,
    			IncludedPermissions: permissions,
    			Stage:               stage,
    		},
    		RoleId: name,
    	}
    	role, err := service.Projects.Roles.Create("projects/"+projectID, request).Do()
    	if err != nil {
    		return nil, fmt.Errorf("Projects.Roles.Create: %w", err)
    	}
    	fmt.Fprintf(w, "Created role: %v", role.Name)
    	return role, nil
    }
    

    Java

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

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

    
    import com.google.cloud.iam.admin.v1.IAMClient;
    import com.google.iam.admin.v1.CreateRoleRequest;
    import com.google.iam.admin.v1.Role;
    import com.google.iam.admin.v1.Role.RoleLaunchStage;
    import java.io.IOException;
    import java.util.Arrays;
    
    /** Create role. */
    public class CreateRole {
      public static void main(String[] args) throws IOException {
        // TODO(developer): Replace the variables before running the sample.
        String projectId = "your-project-id";
        String roleId = "a unique identifier (e.g. testViewer)";
        String title = "a title for your role (e.g. IAM Role Viewer)";
        String description = "a description of the role";
        Iterable<String> includedPermissions =
            Arrays.asList("roles/iam.roleViewer", "roles/logging.viewer");
    
        createRole(projectId, title, description, includedPermissions, roleId);
      }
    
      public static void createRole(
          String projectId,
          String title,
          String description,
          Iterable<String> includedPermissions,
          String roleId)
          throws IOException {
        Role.Builder roleBuilder =
            Role.newBuilder()
                .setTitle(title)
                .setDescription(description)
                .addAllIncludedPermissions(includedPermissions)
                // See launch stage enums at
                // https://cloud.google.com/iam/docs/reference/rpc/google.iam.admin.v1#rolelaunchstage
                .setStage(RoleLaunchStage.BETA);
        CreateRoleRequest createRoleRequest =
            CreateRoleRequest.newBuilder()
                .setParent("projects/" + projectId)
                .setRoleId(roleId)
                .setRole(roleBuilder)
                .build();
    
        // Initialize client for sending requests. This client only needs to be created
        // once, and can be reused for multiple requests.
        try (IAMClient iamClient = IAMClient.create()) {
          Role result = iamClient.createRole(createRoleRequest);
          System.out.println("Created role: " + result.getName());
        }
      }
    }

    Python

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

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

    from typing import List, Optional
    
    from google.api_core.exceptions import AlreadyExists, FailedPrecondition
    from google.cloud.iam_admin_v1 import CreateRoleRequest, IAMClient, Role
    
    
    def create_role(
        project_id: str, role_id: str, permissions: List[str], title: Optional[str] = None
    ) -> Role:
        """Creates iam role with given parameters.
    
        Args:
            project_id: GCP project id
            role_id: id of GCP iam role
            permissions: list of iam permissions to assign to role. f.e ["iam.roles.get", "iam.roles.list"]
            title: title for iam role. role_id will be used in case of None
    
        Returns: google.cloud.iam_admin_v1.Role object
        """
        client = IAMClient()
    
        parent = f"projects/{project_id}"
    
        request = CreateRoleRequest(
            parent=parent,
            role_id=role_id,
            role=Role(title=title, included_permissions=permissions),
        )
        try:
            role = client.create_role(request)
            print(f"Created iam role: {role_id}: {role}")
            return role
        except AlreadyExists:
            print(f"Role with id [{role_id}] already exists, take some actions")
        except FailedPrecondition:
            print(
                f"Role with id [{role_id}] already exists and in deleted state, take some actions"
            )

    REST

    באמצעות roles.create תוכלו ליצור תפקיד בהתאמה אישית ברמת הפרויקט או הארגון.

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

    • RESOURCE_TYPE: סוג המשאב שאת התפקידים בהתאמה אישית שלו רוצים לנהל. אפשר להשתמש ב-projects או ב-organizations.
    • RESOURCE_ID: מזהה הפרויקט או הארגון שרוצים לנהל. מזהי פרויקטים מכילים אותיות וספרות, למשל my-project. מזהי ארגונים הם מספרים, למשל 123456789012.
    • ROLE_ID: השם של התפקיד, למשל myCompanyAdmin.
    • ROLE_TITLE: שם קריא לאנשים של התפקיד. למשל, My Company Admin.
    • ROLE_DESCRIPTION: תיאור התפקיד. למשל, "The company admin role allows company admins to access important resources".
    • PERMISSION_1 ו-PERMISSION_2: ההרשאות שיהיו בתפקיד בהתאמה אישית. למשל, storage.objects.update. בשמות ההרשאות אי אפשר להשתמש בתווים כלליים לחיפוש (*).

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

    • LAUNCH_STAGE: השלב הנוכחי בהשקה של התפקיד. השדה הזה יכול להכיל אחד מהערכים האלה: EAP,‏ ALPHA, ‏BETA, ‏GA, ‏DEPRECATED או DISABLED.

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

    POST https://iam.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID/roles

    תוכן בקשת JSON:

    {
      "roleId": "ROLE_ID",
      "role": {
        "title": "ROLE_TITLE",
        "description": "ROLE_DESCRIPTION",
        "includedPermissions": [
          "PERMISSION_1",
          "PERMISSION_2"
        ],
        "stage": "LAUNCH_STAGE"
      }
    }
    

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

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

    {
      "name": "projects/myProject/roles/myCompanyAdmin",
      "title": "My Company Admin",
      "description": "My custom role description.",
      "includedPermissions": [
        "iam.roles.get",
        "iam.roles.list"
      ],
      "etag": "BwWox/JbaZw="
    }
    

עריכת תפקיד קיים בהתאמה אישית

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

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

כשאתם מעדכנים את התפקיד, אתם צריכים קודם לטעון אותו באמצעות roles.get(), לבצע את השינויים ואז לכתוב את התפקיד המעודכן באמצעות roles.patch(). חשוב להשתמש בערך ה-ETag בתהליך רק אם התפקיד התואם ב-roles.get() מכיל ערך ETag.

המסוף

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

    לדף Roles

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

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

  4. לוחצים על Edit Role.

  5. אם רוצים לעדכן את המטא-נתונים של התפקיד, עורכים את השדות Title,‏ Description או Role launch stage.

  6. אם רוצים לעדכן את ההרשאות של התפקיד:

    1. כדי להוסיף לתפקיד הרשאות חדשות לוחצים על Add Permissions.
    2. כדי להסיר הרשאות, מבטלים את הסימון בתיבות של ההרשאות שרוצים להסיר.
  7. לוחצים על Update כדי לשמור את התפקיד הערוך.

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. תוכלו להשתמש גם בפקודה gcloud iam roles update כדי לעדכן תפקידים בהתאמה אישית, באחת משתי דרכים:

    • שליחת קובץ YAML שמכיל את הגדרת התפקיד המעודכנת

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

    כשמעדכנים תפקיד בהתאמה אישית, צריך להשתמש בדגלים --organization=ORGANIZATION_ID או --project=PROJECT_ID כדי לציין אם הוא ברמת הארגון או ברמת הפרויקט. בדוגמאות שבהמשך התפקיד בהתאמה אישית הוא ברמת הפרויקט.

    כדי לעדכן תפקיד בהתאמה אישית באמצעות קובץ YAML:

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

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

      gcloud iam roles describe ROLE_ID --organization=ORGANIZATION_ID
    • כדי לטעון את ההגדרה של תפקיד בהתאמה אישית ברמת הפרויקט, מריצים את הפקודה הבאה:

      gcloud iam roles describe ROLE_ID --project=PROJECT_ID

    הסבר על הערכים הזמניים לשמירת מקום (placeholders):

    • ROLE_ID: השם של התפקיד שרוצים לעדכן, למשל myCompanyAdmin.

    • ORGANIZATION_ID: מספר הארגון, למשל 123456789012.

    • PROJECT_ID: שם הפרויקט, למשל my-project.

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

    הפלט הבא אמור להתקבל באמצעות הפקודה describe:

    description: ROLE_DESCRIPTION
    etag: ETAG
    includedPermissions:
    - PERMISSION_1
    - PERMISSION_2
    name: ROLE_NAME
    stage: LAUNCH_STAGE
    title: ROLE_TITLE

    הסבר על הערכים הזמניים לשמירת מקום (placeholders):

    • ROLE_DESCRIPTION: תיאור קצר של התפקיד, למשל "My custom role description".

    • ETAG: המזהה הייחודי של הגרסה הנוכחית של התפקיד, למשל BwVkBkbfr70=.

    • PERMISSION_1 ו-PERMISSION_2: ההרשאות שיהיו בתפקיד בהתאמה אישית, למשל iam.roles.get. בשמות ההרשאות אי אפשר להשתמש בתווים כלליים לחיפוש (*).

    • ROLE_NAME: השם המלא של התפקיד, כולל הקידומות organizations/, ‏projects/ או roles/, למשל organizations/123456789012/roles/myCompanyAdmin..

    • LAUNCH_STAGE: השלב של התפקיד במחזור החיים של ההשקה, למשל ALPHA, ‏BETA או GA.

    • ROLE_TITLE: שם קליט לתפקיד, למשל "My Company Admin".

    כדי לעדכן את התפקיד, אפשר לכלול את הגדרת הפלט שהופקה בקובץ YAML, או לעדכן את קובץ ה-YAML המקורי עם ערך הפלט etag.

    לדוגמה, זהו קובץ YAML שמכיל את הפלט מהפקודה describe של תפקיד ברמת הפרויקט, ומוסיף שתי הרשאות ל-Cloud Storage:

    description: My custom role description.
    etag: BwVkBkbfr70=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    - storage.buckets.get
    - storage.buckets.list
    name: projects/my-project/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

    שומרים את קובץ ה-YAML ומריצים אחת מהפקודות הבאות:

    • כדי לעדכן תפקיד ברמת הארגון, מריצים את הפקודה הבאה:

      gcloud iam roles update ROLE_ID--organization=ORGANIZATION_ID \
          --file=YAML_FILE_PATH
    • כדי לעדכן תפקיד ברמת הפרויקט, מריצים את הפקודה הבאה:

      gcloud iam roles update ROLE_ID --project=PROJECT_ID \
          --file=YAML_FILE_PATH

    הסבר על הערכים הזמניים לשמירת מקום (placeholders):

    • ROLE_ID: השם של התפקיד שרוצים לעדכן, למשל myCompanyAdmin.

    • ORGANIZATION_ID: מספר הארגון, למשל 123456789012.

    • PROJECT_ID: שם הפרויקט, למשל my-project-id.

    • YAML_FILE_PATH הוא הנתיב למיקום של קובץ ה-YAML שמכיל את ההגדרה המעודכנת לתפקיד בהתאמה אישית.

    דוגמאות

    תוכלו להיעזר בדוגמה הבאה כדי לעדכן תפקיד ברמת הארגון באמצעות קובץ YAML:

    gcloud iam roles update ROLE_ID --organization=ORGANIZATION_ID \
        --file=YAML_FILE_PATH
    • כדי לעדכן תפקיד ברמת הפרויקט, מריצים את הפקודה הבאה:

      gcloud iam roles update ROLE_ID --project=PROJECT_ID \
          --file=YAML_FILE_PATH

    הסבר על הערכים הזמניים לשמירת מקום (placeholders):

    • ROLE_ID: השם של התפקיד שרוצים לעדכן, למשל myCompanyAdmin.

    • ORGANIZATION_ID: מספר הארגון, למשל 123456789012.

    • PROJECT_ID: שם הפרויקט, למשל my-project.

    • YAML_FILE_PATH הוא הנתיב למיקום של קובץ ה-YAML שמכיל את ההגדרה המעודכנת לתפקיד בהתאמה אישית.

    דוגמאות

    תוכלו להיעזר בדוגמה הבאה כדי לעדכן תפקיד ברמת הארגון באמצעות קובץ YAML:

    gcloud iam roles update myCompanyAdmin --organization=123456789012 \
        --file=my-role-definition.yaml

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

    description: My custom role description.
    etag: BwVkBwDN0lg=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    - storage.buckets.get
    - storage.buckets.list
    name: organizations/123456789012/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

    תוכלו להיעזר בדוגמה הבאה כדי לעדכן תפקיד ברמת הפרויקט באמצעות קובץ YAML:

    gcloud iam roles update myCompanyAdmin --project=my-project \
        --file=my-role-definition.yaml

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

    description: My custom role description.
    etag: BwVkBwDN0lg=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    - storage.buckets.get
    - storage.buckets.list
    name: projects/my-project/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

    כדי לעדכן תפקיד בהתאמה אישית באמצעות דגלים:

    אתם יכולים לעדכן כל חלק מהגדרת התפקיד באמצעות הדגל התואם. בנושא gcloud iam roles update מפורטת רשימה של כל הדגלים האפשריים.

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

    • --add-permissions=PERMISSIONS: הוספת הרשאות לתפקיד (אם מוסיפים כמה הרשאות, צריך להפריד ביניהן באמצעות פסיקים). בשמות ההרשאות אי אפשר להשתמש בתווים כלליים לחיפוש (*).

    • --remove-permissions=PERMISSIONS: הסרת הרשאות מהתפקיד (אם מסירים כמה הרשאות, צריך להפריד ביניהן באמצעות פסיקים). בשמות ההרשאות אי אפשר להשתמש בתווים כלליים לחיפוש (*).

    אתם יכולים גם להשתמש בדגל --permissions=PERMISSIONS כדי לציין את ההרשאות החדשות, עם רשימת ההרשאות (שמופרדות בפסיקים) שיחליפו את ההרשאות הקיימות.

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

    • כדי לעדכן תפקיד ברמת הארגון, מריצים את הפקודה הבאה:

      gcloud iam roles update ROLE_ID--organization=ORGANIZATION_ID \
          --title=ROLE_TITLE --description=ROLE_DESCRIPTION \
          --stage=LAUNCH_STAGE
    • כדי לעדכן תפקיד ברמת הפרויקט, מריצים את הפקודה הבאה:

      gcloud iam roles update ROLE_ID --project=PROJECT_ID \
          --title=ROLE_TITLE --description=ROLE_DESCRIPTION \
          --stage=LAUNCH_STAGE

    הסבר על הערכים הזמניים לשמירת מקום (placeholders):

    • ROLE_ID: השם של התפקיד, למשל myCompanyAdmin.

    • ORGANIZATION_ID: מספר הארגון, למשל 123456789012.

    • PROJECT_ID: שם הפרויקט, למשל my-project.

    • ROLE_TITLE: שם קליט לתפקיד, למשל "My Company Admin".

    • ROLE_DESCRIPTION: תיאור קצר של התפקיד, למשל "My custom role description.".

    • LAUNCH_STAGE: השלב של התפקיד במחזור החיים של ההשקה, למשל ALPHA, ‏BETA או GA.

    דוגמאות

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

    gcloud iam roles update myCompanyAdmin --organization=123456789012 \
        --add-permissions="storage.buckets.get,storage.buckets.list"

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

    description: My custom role description.
    etag: BwVkBwDN0lg=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    - storage.buckets.get
    - storage.buckets.list
    name: organizations/123456789012/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

    תוכלו להיעזר בדוגמה הבאה כדי להוסיף הרשאות לתפקיד ברמת הפרויקט באמצעות דגלים:

    gcloud iam roles update myCompanyAdmin --project=my-project \
        --add-permissions="storage.buckets.get,storage.buckets.list"

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

    description: My custom role description.
    etag: BwVkBwDN0lg=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    - storage.buckets.get
    - storage.buckets.list
    name: projects/my-project/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin
  3. C++

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

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

    namespace iam = ::google::cloud::iam_admin_v1;
    [](std::string const& name, std::string const& title) {
      iam::IAMClient client(iam::MakeIAMConnection());
      google::iam::admin::v1::UpdateRoleRequest request;
      request.set_name(name);
      google::iam::admin::v1::Role role;
      role.set_title(title);
      google::protobuf::FieldMask update_mask;
      *update_mask.add_paths() = "title";
      *request.mutable_role() = role;
      *request.mutable_update_mask() = update_mask;
      auto response = client.UpdateRole(request);
      if (!response) throw std::move(response).status();
      std::cout << "Role successfully updated: " << response->DebugString()
                << "\n";
    }

    C#

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

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

    
    using System;
    using System.Collections.Generic;
    using Google.Apis.Auth.OAuth2;
    using Google.Apis.Iam.v1;
    using Google.Apis.Iam.v1.Data;
    
    public partial class CustomRoles
    {
        public static Role EditRole(string name, string projectId, string newTitle,
            string newDescription, IList<string> newPermissions, string newStage)
        {
            var credential = GoogleCredential.GetApplicationDefault()
                .CreateScoped(IamService.Scope.CloudPlatform);
            var service = new IamService(new IamService.Initializer
            {
                HttpClientInitializer = credential
            });
            // First, get a Role using List() or Get().
            string resource = $"projects/{projectId}/roles/{name}";
            var role = service.Projects.Roles.Get(resource).Execute();
            // Then you can update its fields.
            role.Title = newTitle;
            role.Description = newDescription;
            role.IncludedPermissions = newPermissions;
            role.Stage = newStage;
            role = service.Projects.Roles.Patch(role, resource).Execute();
            Console.WriteLine("Updated role: " + role.Name);
            return role;
        }
    }
    

    Go

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

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

    import (
    	"context"
    	"fmt"
    	"io"
    
    	iam "google.golang.org/api/iam/v1"
    )
    
    // editRole modifies a custom role.
    func editRole(w io.Writer, projectID, name, newTitle, newDescription, newStage string, newPermissions []string) (*iam.Role, error) {
    	ctx := context.Background()
    	service, err := iam.NewService(ctx)
    	if err != nil {
    		return nil, fmt.Errorf("iam.NewService: %w", err)
    	}
    
    	resource := "projects/" + projectID + "/roles/" + name
    	role, err := service.Projects.Roles.Get(resource).Do()
    	if err != nil {
    		return nil, fmt.Errorf("Projects.Roles.Get: %w", err)
    	}
    	role.Title = newTitle
    	role.Description = newDescription
    	role.IncludedPermissions = newPermissions
    	role.Stage = newStage
    	role, err = service.Projects.Roles.Patch(resource, role).Do()
    	if err != nil {
    		return nil, fmt.Errorf("Projects.Roles.Patch: %w", err)
    	}
    	fmt.Fprintf(w, "Updated role: %v", role.Name)
    	return role, nil
    }
    

    Java

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

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

    
    import com.google.cloud.iam.admin.v1.IAMClient;
    import com.google.iam.admin.v1.Role;
    import com.google.iam.admin.v1.Role.RoleLaunchStage;
    import com.google.iam.admin.v1.UpdateRoleRequest;
    import com.google.protobuf.FieldMask;
    import java.io.IOException;
    
    /** Edit role metadata. Specifically, update description and launch stage. */
    public class EditRole {
    
      public static void main(String[] args) throws IOException {
        // TODO(developer): Replace the variables before running the sample.
        // Role ID must point to an existing role.
        String projectId = "your-project-id";
        String roleId = "a unique identifier (e.g. testViewer)";
        String description = "a new description of the role";
    
        editRole(projectId, roleId, description);
      }
    
      public static void editRole(String projectId, String roleId, String description)
          throws IOException {
        String roleName = "projects/" + projectId + "/roles/" + roleId;
        Role.Builder roleBuilder =
            Role.newBuilder()
                .setName(roleName)
                .setDescription(description)
                // See launch stage enums at
                // https://cloud.google.com/iam/docs/reference/rpc/google.iam.admin.v1#rolelaunchstage
                .setStage(RoleLaunchStage.GA);
        FieldMask fieldMask = FieldMask.newBuilder().addPaths("description").addPaths("stage").build();
        UpdateRoleRequest updateRoleRequest =
            UpdateRoleRequest.newBuilder()
                .setName(roleName)
                .setRole(roleBuilder)
                .setUpdateMask(fieldMask)
                .build();
    
        // Initialize client for sending requests. This client only needs to be created
        // once, and can be reused for multiple requests.
        try (IAMClient iamClient = IAMClient.create()) {
          Role result = iamClient.updateRole(updateRoleRequest);
          System.out.println("Edited role:\n" + result);
        }
      }
    }

    Python

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

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

    from google.api_core.exceptions import NotFound
    from google.cloud.iam_admin_v1 import IAMClient, Role, UpdateRoleRequest
    
    from snippets.get_role import get_role
    
    
    def edit_role(role: Role) -> Role:
        """Edits an existing IAM role in a GCP project.
    
        Args:
            role: google.cloud.iam_admin_v1.Role object to be updated
    
        Returns: Updated google.cloud.iam_admin_v1.Role object
        """
        client = IAMClient()
        request = UpdateRoleRequest(name=role.name, role=role)
        try:
            role = client.update_role(request)
            print(f"Edited role: {role.name}: {role}")
            return role
        except NotFound:
            print(f"Role [{role.name}] not found, take some actions")

    REST

    השיטה roles.patch מעדכנת תפקיד בהתאמה אישית בפרויקט או בארגון.

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

    חובה:

    • RESOURCE_TYPE: סוג המשאב שאת התפקידים בהתאמה אישית שלו רוצים לנהל. אפשר להשתמש ב-projects או ב-organizations.
    • RESOURCE_ID: מזהה הפרויקט או הארגון שרוצים לנהל. מזהי פרויקטים מכילים אותיות וספרות, למשל my-project. מזהי ארגונים הם מספרים, למשל 123456789012.
    • ROLE_NAME: שם התפקיד המלא, כולל הקידומות organizations/,‏ projects/ או roles/. לדוגמה: organizations/123456789012/roles/myCompanyAdmin.

    מומלץ:

    • ETAG: מזהה לגרסה של התפקיד. אם רוצים למנוע התנגשות בין שינויים בתפקיד, צריך להשתמש בשדה הזה.

    רשות (אפשר להגדיר רק חלק מהערכים הבאים):

    • ROLE_TITLE: שם קריא לאנשים של התפקיד. למשל, My Company Admin.
    • ROLE_DESCRIPTION: תיאור התפקיד. למשל, "The company admin role allows company admins to access important resources".
    • PERMISSION_1 ו-PERMISSION_2: ההרשאות שיהיו בתפקיד בהתאמה אישית. למשל, storage.objects.update. בשמות ההרשאות אי אפשר להשתמש בתווים כלליים לחיפוש (*).
    • LAUNCH_STAGE: השלב הנוכחי בהשקה של התפקיד. השדה הזה יכול להכיל אחד מהערכים האלה: EAP,‏ ALPHA, ‏BETA, ‏GA, ‏DEPRECATED או DISABLED.

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

    PATCH https://iam.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID/roles

    תוכן בקשת JSON:

    {
      "roleId": "ROLE_NAME",
      "title": "ROLE_TITLE",
      "description": "ROLE_DESCRIPTION",
      "includedPermissions": [
        "PERMISSION_1",
        "PERMISSION_2"
      ],
      "stage": "LAUNCH-STAGE",
      "etag": "ETAG"
    }
    

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

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

    {
      "name": "projects/test-project-1000092/roles/myCompanyAdmin",
      "title": "My Updated Company Admin",
      "includedPermissions": [
        "storage.buckets.get",
        "storage.buckets.list"
      ],
      "stage": "BETA",
      "etag": "BwWoyDpAxBc="
    }
    

השבתת תפקיד בהתאמה אישית

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

המסוף

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

    לדף Roles

  2. לוחצים על הרשימה הנפתחת Select a project בחלק העליון של הדף.

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

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

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. תוכלו להשבית תפקידים בהתאמה אישית גם באמצעות הפקודה gcloud iam roles update, שמשנה את שלב ההשקה ל-DISABLED.

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

    • שליחת קובץ YAML שמכיל את הגדרת התפקיד המעודכנת

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

    כדי להשבית תפקיד קיים בהתאמה אישית, הכי קל להשתמש בדגל --stage ולהגדיר אותו ל-DISABLED. מריצים אחת מהפקודות הבאות:

    • כדי להשבית תפקיד ברמת הארגון, מריצים את הפקודה הבאה:

      gcloud iam roles update ROLE_ID--organization=ORGANIZATION_ID \
          --stage=DISABLED
    • כדי להשבית תפקיד ברמת הפרויקט, מריצים את הפקודה הבאה:

      gcloud iam roles update ROLE_ID --project=PROJECT_ID \
          --stage=DISABLED

    הסבר על הערכים הזמניים לשמירת מקום (placeholders):

    • ROLE_ID: השם של התפקיד, למשל myCompanyAdmin.

    • ORGANIZATION_ID: מספר הארגון, למשל 123456789012.

    • PROJECT_ID: שם הפרויקט, למשל my-project.

    דוגמאות

    תוכלו להיעזר בדוגמה הבאה כדי להשבית תפקיד ברמת הארגון:

    gcloud iam roles update myCompanyAdmin --organization=123456789012 \
        --stage=DISABLED

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

    description: My custom role description.
    etag: BwVkB5NLIQw=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: organizations/123456789012/roles/myCompanyAdmin
    stage: DISABLED
    title: My Company Admin

    תוכלו להיעזר בדוגמה הבאה כדי להשבית תפקיד ברמת הפרויקט:

    gcloud iam roles update myCompanyAdmin --project=my-project \
        --stage=DISABLED

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

    description: My custom role description.
    etag: BwVkB5NLIQw=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: projects/my-project/roles/myCompanyAdmin
    stage: DISABLED
    title: My Company Admin
  3. C++

    מעדכנים את השדה stage בתפקיד ל-DISABLED.

    C#

    מעדכנים את השדה stage בתפקיד ל-DISABLED.

    Go

    מעדכנים את השדה stage בתפקיד ל-DISABLED.

    Java

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

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

    
    import com.google.cloud.iam.admin.v1.IAMClient;
    import com.google.iam.admin.v1.Role;
    import com.google.iam.admin.v1.UpdateRoleRequest;
    import com.google.protobuf.FieldMask;
    import java.io.IOException;
    
    public class DisableRole {
    
      public static void main(String[] args) throws IOException {
        // TODO(developer): Replace the variables before running the sample.
        // Role ID must point to an existing role.
        String projectId = "your-project-id";
        String roleId = "testRole";
    
        Role role = disableRole(projectId, roleId);
        System.out.println("Role name: " + role.getName());
        System.out.println("Role stage: " + role.getStage());
      }
    
      public static Role disableRole(String projectId, String roleId)
              throws IOException {
        String roleName = "projects/" + projectId + "/roles/" + roleId;
        Role role = Role.newBuilder()
                        .setName(roleName)
                        .setStage(Role.RoleLaunchStage.DISABLED)
                        .build();
    
        FieldMask fieldMask = FieldMask.newBuilder().addPaths("stage").build();
        UpdateRoleRequest updateRoleRequest =
                  UpdateRoleRequest.newBuilder()
                          .setName(roleName)
                          .setRole(role)
                          .setUpdateMask(fieldMask)
                          .build();
    
        // Initialize client for sending requests. This client only needs to be created
        // once, and can be reused for multiple requests.
        try (IAMClient iamClient = IAMClient.create()) {
          return iamClient.updateRole(updateRoleRequest);
        }
      }
    }

    Python

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

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

    from google.api_core.exceptions import NotFound
    from google.cloud.iam_admin_v1 import GetRoleRequest, IAMClient, Role, UpdateRoleRequest
    
    
    def disable_role(project_id: str, role_id: str) -> Role:
        """Disables an IAM role in a GCP project.
    
        Args:
            project_id: GCP project ID
            role_id: ID of GCP IAM role
    
        Returns: Updated google.cloud.iam_admin_v1.Role object with disabled stage
        """
        client = IAMClient()
        name = f"projects/{project_id}/roles/{role_id}"
        get_request = GetRoleRequest(name=name)
        try:
            role = client.get_role(get_request)
            role.stage = Role.RoleLaunchStage.DISABLED
            update_request = UpdateRoleRequest(name=role.name, role=role)
            client.update_role(update_request)
            print(f"Disabled role: {role_id}: {role}")
            return role
        except NotFound as exc:
            raise NotFound(f'Role with id [{role_id}] not found, take some actions') from exc

    REST

    באמצעות roles.patch תוכלו לשנות את שלב ההשקה של תפקיד בהתאמה אישית ל-DISABLED כדי להשבית אותו.

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

    • RESOURCE_TYPE: סוג המשאב שאת התפקידים בהתאמה אישית שלו רוצים לנהל. אפשר להשתמש ב-projects או ב-organizations.
    • RESOURCE_ID: מזהה הפרויקט או הארגון שרוצים לנהל. מזהי פרויקטים מכילים אותיות וספרות, למשל my-project. מזהי ארגונים הם מספרים, למשל 123456789012.
    • ROLE_NAME: שם התפקיד המלא, כולל הקידומות organizations/,‏ projects/ או roles/. לדוגמה: organizations/123456789012/roles/myCompanyAdmin.
    • ETAG: מזהה לגרסה של התפקיד. אם רוצים למנוע התנגשות בין שינויים בתפקיד, צריך להשתמש בשדה הזה.

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

    PATCH https://iam.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID/roles

    תוכן בקשת JSON:

    {
      "roleId": "ROLE_NAME",
      "stage": DISABLED,
      "etag": "ETAG"
    }
    

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

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

    {
      "name": "projects/test-project-1000092/roles/myCompanyAdmin",
      "stage": "DISABLED",
      "etag": "BwWoyDpAxBc="
    }
    

הצגת רשימת התפקידים

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

המסוף

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

לדף Roles

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

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. תוכלו להשתמש גם בפקודה gcloud iam roles list כדי להציג את התפקידים בהתאמה אישית והתפקידים המוגדרים מראש בפרויקט או בארגון:

    • כדי להציג את התפקידים בהתאמה אישית ברמת הארגון, מריצים את הפקודה הבאה:

      gcloud iam roles list --organization=ORGANIZATION_ID
    • כדי להציג את התפקידים בהתאמה אישית ברמת הפרויקט, מריצים את הפקודה הבאה:

      gcloud iam roles list --project=PROJECT_ID

    הסבר על הערכים הזמניים לשמירת מקום (placeholders):

    • ORGANIZATION_ID: מספר הארגון, למשל 123456789012.

    • PROJECT_ID: שם הפרויקט, למשל my-project.

    אפשר גם לציין את הדגל --show-deleted כדי להציג גם את התפקידים שנמחקו.

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

    gcloud iam roles list
  3. C++

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

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

    namespace iam = ::google::cloud::iam_admin_v1;
    [](std::string const& project) {
      iam::IAMClient client(iam::MakeIAMConnection());
      int count = 0;
      google::iam::admin::v1::ListRolesRequest request;
      request.set_parent(project);
      for (auto& role : client.ListRoles(request)) {
        if (!role) throw std::move(role).status();
        std::cout << "Roles successfully retrieved: " << role->name() << "\n";
        ++count;
      }
      if (count == 0) {
        std::cout << "No roles found in project: " << project << "\n";
      }
    }

    C#

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

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

    
    using System;
    using System.Collections.Generic;
    using Google.Apis.Auth.OAuth2;
    using Google.Apis.Iam.v1;
    using Google.Apis.Iam.v1.Data;
    
    public partial class CustomRoles
    {
        public static IList<Role> ListRoles(string projectId)
        {
            var credential = GoogleCredential.GetApplicationDefault()
                .CreateScoped(IamService.Scope.CloudPlatform);
            var service = new IamService(new IamService.Initializer
            {
                HttpClientInitializer = credential
            });
    
            var response = service.Projects.Roles.List("projects/" + projectId)
                .Execute();
            foreach (var role in response.Roles)
            {
                Console.WriteLine(role.Name);
            }
            return response.Roles;
        }
    }
    

    Go

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

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

    import (
    	"context"
    	"fmt"
    	"io"
    
    	iam "google.golang.org/api/iam/v1"
    )
    
    // listRoles lists a project's roles.
    func listRoles(w io.Writer, projectID string) ([]*iam.Role, error) {
    	ctx := context.Background()
    	service, err := iam.NewService(ctx)
    	if err != nil {
    		return nil, fmt.Errorf("iam.NewService: %w", err)
    	}
    
    	response, err := service.Projects.Roles.List("projects/" + projectID).Do()
    	if err != nil {
    		return nil, fmt.Errorf("Projects.Roles.List: %w", err)
    	}
    	for _, role := range response.Roles {
    		fmt.Fprintf(w, "Listing role: %v\n", role.Name)
    	}
    	return response.Roles, nil
    }
    

    Java

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

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

    
    import com.google.cloud.iam.admin.v1.IAMClient;
    import com.google.cloud.iam.admin.v1.IAMClient.ListRolesPagedResponse;
    import com.google.iam.admin.v1.ListRolesRequest;
    import java.io.IOException;
    
    /** List roles in a project. */
    public class ListRoles {
    
      public static void main(String[] args) throws IOException {
        // TODO(developer): Replace the variable before running the sample.
        String projectId = "your-project-id";
    
        listRoles(projectId);
      }
    
      public static void listRoles(String projectId) throws IOException {
        ListRolesRequest listRolesRequest =
            ListRolesRequest.newBuilder().setParent("projects/" + projectId).build();
    
        // Initialize client for sending requests. This client only needs to be created
        // once, and can be reused for multiple requests.
        try (IAMClient iamClient = IAMClient.create()) {
          ListRolesPagedResponse listRolesResponse = iamClient.listRoles(listRolesRequest);
          listRolesResponse.iterateAll().forEach(role -> System.out.println(role));
        }
      }
    }

    Python

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

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

    from google.cloud.iam_admin_v1 import IAMClient, ListRolesRequest, RoleView
    from google.cloud.iam_admin_v1.services.iam.pagers import ListRolesPager
    
    
    def list_roles(
        project_id: str, show_deleted: bool = True, role_view: RoleView = RoleView.BASIC
    ) -> ListRolesPager:
        """Lists IAM roles in a GCP project.
    
        Args:
            project_id: GCP project ID
            show_deleted: Whether to include deleted roles in the results
            role_view: Level of detail for the returned roles (e.g., BASIC or FULL)
    
        Returns: A pager for traversing through the roles
        """
    
        client = IAMClient()
        parent = f"projects/{project_id}"
        request = ListRolesRequest(parent=parent, show_deleted=show_deleted, view=role_view)
        roles = client.list_roles(request)
        for page in roles.pages:
            for role in page.roles:
                print(role)
        print("Listed all iam roles")
        return roles

    REST

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

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

    • RESOURCE_TYPE: סוג המשאב שאת התפקידים בהתאמה אישית שלו רוצים לנהל. אפשר להשתמש ב-projects או ב-organizations.
    • RESOURCE_ID: מזהה הפרויקט או הארגון שרוצים לנהל. מזהי פרויקטים מכילים אותיות וספרות, למשל my-project. מזהי ארגונים הם מספרים, למשל 123456789012.
    • ROLE_VIEW: אופציונלי. הפרטים שיופיעו בתפקידים שברשימה. כדי להציג את ההרשאות של התפקידים, צריך להגדיר את השדה הזה ל-FULL. כדי לא להציג את ההרשאות של התפקידים, צריך להגדיר את השדה הזה ל-BASIC. ערך ברירת המחדל הוא BASIC.
    • PAGE_SIZE: אופציונלי. מספר התפקידים שאפשר לכלול בתשובה. ערך ברירת המחדל הוא 300. הערך המקסימלי הוא 1,000. אם מספר התפקידים לא נכנס בדף אחד, התשובה תכיל אסימון עימוד שמשמש לטעינת דף התוצאות הבא.
    • NEXT_PAGE_TOKEN: אופציונלי. אסימון העימוד שהוחזר באחת מהתשובות הקודמות באמצעות ה-method. אם יש אסימון כזה, רשימת התפקידים תתחיל מהמקום שבו הסתיימה הבקשה הקודמת.

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

    GET https://iam.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID/roles?view=ROLE_VIEW&pageSize=PAGE_SIZE&pageToken=NEXT_PAGE_TOKEN

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

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

    {
      "roles": [
        {
          "name": "projects/my-project/roles/customRole1",
          "title": "First Custom Role",
          "description": "Created on: 2020-06-01",
          "etag": "BwWiPg2fmDE="
        },
        {
          "name": "projects/my-project/roles/customRole2",
          "title": "Second Custom Role",
          "description": "Created on: 2020-06-07",
          "etag": "BwWiuX53Wi0="
        }
      ]
    }
    

מחיקה של תפקיד בהתאמה אישית

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

המסוף

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

    לדף Roles

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

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. תוכלו למחוק תפקידים חדשים בהתאמה אישית גם באמצעות הפקודה gcloud iam roles delete.

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

      gcloud iam roles delete ROLE_ID --organization=ORGANIZATION_ID
    • כדי למחוק תפקיד בהתאמה אישית ברמת הפרויקט, מריצים את הפקודה הבאה:

      gcloud iam roles delete ROLE_ID --project=PROJECT_ID

    הסבר על הערכים הזמניים לשמירת מקום (placeholders):

    • ROLE_ID: השם של התפקיד, למשל myCompanyAdmin.

    • ORGANIZATION_ID: מספר הארגון, למשל 123456789012.

    • PROJECT_ID: שם הפרויקט, למשל my-project.

    התפקיד לא יופיע ב-gcloud iam roles list, אלא אם תשתמשו בדגל --show-deleted. התפקידים שנמחקו יסומנו בבלוק של deleted: true בתשובה של list, למשל:

    ---
    deleted: true
    description: My custom role description.
    etag: BwVkB5NLIQw=
    name: projects/my-project/roles/myCompanyAdmin
    title: My Company Admin
    ---
    
  3. C++

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

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

    namespace iam = ::google::cloud::iam_admin_v1;
    [](std::string const& name) {
      iam::IAMClient client(iam::MakeIAMConnection());
      google::iam::admin::v1::DeleteRoleRequest request;
      request.set_name(name);
      auto response = client.DeleteRole(request);
      if (!response) throw std::move(response).status();
      std::cout << "Role successfully deleted: " << response->DebugString()
                << "\n";
    }

    C#

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

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

    
    using System;
    using Google.Apis.Auth.OAuth2;
    using Google.Apis.Iam.v1;
    using Google.Apis.Iam.v1.Data;
    
    public partial class CustomRoles
    {
        public static void DeleteRole(string name, string projectId)
        {
            var credential = GoogleCredential.GetApplicationDefault()
                .CreateScoped(IamService.Scope.CloudPlatform);
            var service = new IamService(new IamService.Initializer
            {
                HttpClientInitializer = credential
            });
    
            service.Projects.Roles.Delete(
                $"projects/{projectId}/roles/{name}").Execute();
            Console.WriteLine("Deleted role: " + name);
        }
    }
    

    Go

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

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

    import (
    	"context"
    	"fmt"
    	"io"
    
    	iam "google.golang.org/api/iam/v1"
    )
    
    // deleteRole deletes a custom role.
    func deleteRole(w io.Writer, projectID, name string) error {
    	ctx := context.Background()
    	service, err := iam.NewService(ctx)
    	if err != nil {
    		return fmt.Errorf("iam.NewService: %w", err)
    	}
    
    	_, err = service.Projects.Roles.Delete("projects/" + projectID + "/roles/" + name).Do()
    	if err != nil {
    		return fmt.Errorf("Projects.Roles.Delete: %w", err)
    	}
    	fmt.Fprintf(w, "Deleted role: %v", name)
    	return nil
    }
    

    Java

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

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

    
    import com.google.cloud.iam.admin.v1.IAMClient;
    import com.google.iam.admin.v1.DeleteRoleRequest;
    import java.io.IOException;
    
    /** Delete role. */
    public class DeleteRole {
    
      public static void main(String[] args) throws IOException {
        // TODO(developer): Replace the variables before running the sample.
        // Role ID must point to an existing role.
        String projectId = "your-project-id";
        String roleId = "a unique identifier (e.g. testViewer)";
    
        deleteRole(projectId, roleId);
      }
    
      public static void deleteRole(String projectId, String roleId) throws IOException {
        String roleName = "projects/" + projectId + "/roles/" + roleId;
        DeleteRoleRequest deleteRoleRequest = DeleteRoleRequest.newBuilder().setName(roleName).build();
    
        // Initialize client for sending requests. This client only needs to be created
        // once, and can be reused for multiple requests.
        try (IAMClient iamClient = IAMClient.create()) {
          iamClient.deleteRole(deleteRoleRequest);
          System.out.println("Role deleted.");
        }
      }
    }

    Python

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

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

    from google.api_core.exceptions import FailedPrecondition, NotFound
    from google.cloud.iam_admin_v1 import (
        DeleteRoleRequest,
        IAMClient,
        Role,
        UndeleteRoleRequest,
    )
    def delete_role(project_id: str, role_id: str) -> Role:
        """Deletes iam role in GCP project. Can be undeleted later.
        Args:
            project_id: GCP project id
            role_id: id of GCP iam role
    
        Returns: google.cloud.iam_admin_v1.Role object
        """
        client = IAMClient()
        name = f"projects/{project_id}/roles/{role_id}"
        request = DeleteRoleRequest(name=name)
        try:
            role = client.delete_role(request)
            print(f"Deleted role: {role_id}: {role}")
            return role
        except NotFound:
            print(f"Role with id [{role_id}] not found, take some actions")
        except FailedPrecondition as err:
            print(f"Role with id [{role_id}] already deleted, take some actions)", err)

    REST

    באמצעות roles.delete תוכלו למחוק תפקיד בהתאמה אישית בפרויקט או בארגון.

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

    • ROLE_NAME: שם התפקיד המלא, כולל הקידומות organizations/,‏ projects/ או roles/. לדוגמה: organizations/123456789012/roles/myCompanyAdmin.

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

    DELETE https://iam.googleapis.com/v1/ROLE_NAME

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

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

    {
      "name": "projects/my-project/roles/myCompanyAdmin",
      "title": "My Company Admin",
      "description": "My custom role description.",
      "includedPermissions": [
        "iam.roles.get",
        "iam.roles.list"
      ],
      "etag": "BwWiPg2fmDE=",
      "deleted": true
    }
    
    

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

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

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

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

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

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

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

המסוף

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

    לדף Roles

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

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. תוכלו לבטל את המחיקה של תפקיד בהתאמה אישית גם באמצעות הפקודה gcloud iam roles undelete:

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

      gcloud iam roles undelete ROLE_ID --organization=ORGANIZATION_ID
    • כדי לבטל את המחיקה של תפקיד בהתאמה אישית ברמת הפרויקט, מריצים את הפקודה הבאה:

      gcloud iam roles undelete ROLE_ID --project=PROJECT_ID

    הסבר על הערכים הזמניים לשמירת מקום (placeholders):

    • ROLE_ID: השם של התפקיד, למשל myCompanyAdmin.

    • ORGANIZATION_ID: מספר הארגון, למשל 123456789012.

    • PROJECT_ID: שם הפרויקט, למשל my-project.

    דוגמאות

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

    gcloud iam roles undelete myCompanyAdmin --organization=123456789012

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

    description: My custom role description.
    etag: BwVkCAx9W6w=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: organizations/123456789012/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

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

    gcloud iam roles undelete myCompanyAdmin --project=my-project

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

    description: My custom role description.
    etag: BwVkCAx9W6w=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: projects/my-project/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin
  3. C++

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

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

    namespace iam = ::google::cloud::iam_admin_v1;
    [](std::string const& name) {
      iam::IAMClient client(iam::MakeIAMConnection());
      google::iam::admin::v1::UndeleteRoleRequest request;
      request.set_name(name);
      auto response = client.UndeleteRole(request);
      if (!response) throw std::move(response).status();
      std::cout << "Role successfully undeleted: " << response->DebugString()
                << "\n";
    }

    C#

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

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

    
    using System;
    using Google.Apis.Auth.OAuth2;
    using Google.Apis.Iam.v1;
    using Google.Apis.Iam.v1.Data;
    
    public partial class CustomRoles
    {
        public static Role UndeleteRole(string name, string projectId)
        {
            var credential = GoogleCredential.GetApplicationDefault()
                .CreateScoped(IamService.Scope.CloudPlatform);
            var service = new IamService(new IamService.Initializer
            {
                HttpClientInitializer = credential
            });
    
            string resource = $"projects/{projectId}/roles/{name}";
            var role = service.Projects.Roles.Undelete(
                new UndeleteRoleRequest(), resource).Execute();
            Console.WriteLine("Undeleted role: " + role.Name);
            return role;
        }
    }
    

    Go

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

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

    import (
    	"context"
    	"fmt"
    	"io"
    
    	iam "google.golang.org/api/iam/v1"
    )
    
    // undeleteRole restores a deleted custom role.
    func undeleteRole(w io.Writer, projectID, name string) (*iam.Role, error) {
    	ctx := context.Background()
    	service, err := iam.NewService(ctx)
    	if err != nil {
    		return nil, fmt.Errorf("iam.NewService: %w", err)
    	}
    
    	resource := "projects/" + projectID + "/roles/" + name
    	request := &iam.UndeleteRoleRequest{}
    	role, err := service.Projects.Roles.Undelete(resource, request).Do()
    	if err != nil {
    		return nil, fmt.Errorf("Projects.Roles.Undelete: %w", err)
    	}
    	fmt.Fprintf(w, "Undeleted role: %v", role.Name)
    	return role, nil
    }
    

    Java

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

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

    
    import com.google.cloud.iam.admin.v1.IAMClient;
    import com.google.iam.admin.v1.Role;
    import com.google.iam.admin.v1.UndeleteRoleRequest;
    import java.io.IOException;
    
    /**
     * Undelete a role to return it to its previous state. Undeleting only works on roles that were
     * deleted in the past 7 days.
     */
    public class UndeleteRole {
    
      public static void main(String[] args) throws IOException {
        // TODO(developer): Replace the variables before running the sample.
        // Role ID must point to a role that was deleted in the past 7 days.
        String projectId = "your-project-id";
        String roleId = "a unique identifier (e.g. testViewer)";
    
        undeleteRole(projectId, roleId);
      }
    
      public static void undeleteRole(String projectId, String roleId) throws IOException {
        String roleName = "projects/" + projectId + "/roles/" + roleId;
        UndeleteRoleRequest undeleteRoleRequest =
            UndeleteRoleRequest.newBuilder().setName(roleName).build();
    
        // Initialize client for sending requests. This client only needs to be created
        // once, and can be reused for multiple requests.
        try (IAMClient iamClient = IAMClient.create()) {
          Role result = iamClient.undeleteRole(undeleteRoleRequest);
          System.out.println("Undeleted role:\n" + result);
        }
      }
    }

    Python

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

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

    from google.api_core.exceptions import FailedPrecondition, NotFound
    from google.cloud.iam_admin_v1 import (
        DeleteRoleRequest,
        IAMClient,
        Role,
        UndeleteRoleRequest,
    )
    def undelete_role(project_id: str, role_id: str) -> Role:
        """Undeleted deleted iam role in GCP project.
    
        Args:
            project_id: GCP project id
            role_id: id of GCP iam role
        """
        client = IAMClient()
        name = f"projects/{project_id}/roles/{role_id}"
        request = UndeleteRoleRequest(name=name)
        try:
            role = client.undelete_role(request)
            print(f"Undeleted role: {role_id}: {role}")
            return role
        except NotFound:
            print(f"Role with id [{role_id}] not found, take some actions")
        except FailedPrecondition as err:
            print(f"Role with id [{role_id}] is not deleted, take some actions)", err)

    REST

    באמצעות roles.undelete תוכלו לבטל את המחיקה של תפקיד בהתאמה אישית בפרויקט או בארגון.

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

    • ROLE_NAME: שם התפקיד המלא, כולל הקידומות organizations/,‏ projects/ או roles/. לדוגמה: organizations/123456789012/roles/myCompanyAdmin.
    • ETAG: מזהה לגרסה של התפקיד. אם רוצים למנוע התנגשות בין שינויים בתפקיד, צריך להשתמש בשדה הזה.

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

    POST https://iam.googleapis.com/v1/ROLE_NAME:undelete

    תוכן בקשת JSON:

    {
      "etag": "ETAG"
    }
    

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

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

    {
      "name": "projects/my-project/roles/myCompanyAdmin",
      "title": "My Company Admin",
      "description": "My custom role description.",
      "includedPermissions": [
        "iam.roles.get",
        "iam.roles.list"
      ],
      "etag": "BwWiPg2fmDE="
    }
    
    

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