איך בודקים אילו תפקידים אפשר לתת במשאבים

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

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

  • מפעילים את IAM API.

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, נדרשת ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק 'שימוש בשירות'' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    להפעלת ה-API

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

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

    המסוף

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

    gcloud

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

    הפעלת Cloud Shell

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

    C#‎

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

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

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

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

      gcloud auth application-default login

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

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

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

    C++‎

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

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

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

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

      gcloud auth application-default login

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

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

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

    המשך

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

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

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

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

      gcloud auth application-default login

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

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

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

    Java

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

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

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

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

      gcloud auth application-default login

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

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

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

    Python

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

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

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

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

      gcloud auth application-default login

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

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

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

    REST

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

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

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

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

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

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

התפקיד הזה מכיל את ההרשאות getIamPolicy לכל סוגי המשאבים. כדי לראות את רשימת התפקידים שאפשר לתת, צריך את ההרשאה getIamPolicy למשאב שבשבילו רוצים לראות את הרשימה. לדוגמה, בשביל פרויקטים, צריך את ההרשאה resourcemanager.projects.getIamPolicy.

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

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

אפשר לתת תפקיד במשאב או ברמה שמעל למשאב אם הוא מכיל הרשאות לסוג המשאב הזה. לדוגמה, התפקיד storage.admin נותן הרשאות לממשקי ה-API ‏storage.buckets.get ו-storage.objects.get, ולכן אפשר לתת אותו במשאבים מסוג קטגוריות ב-Storage ואובייקטים ב-Storage.

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

ההרשאות שהתפקיד נותן ניתנות רק למשאבים באותה הרמה או ברמות שמתחתיה בהיררכיה, ולא למשאבים שנמצאים ברמה מעל או מקבילה בהיררכיה. בנוסף, כשנותנים תפקיד במשאב, רק ההרשאות הרלוונטיות לאותו משאב ניתנות, ללא קשר לשם התפקיד, לתיאור שלו או להרשאות אחרות שהוא מכיל. לדוגמה, כשנותנים למשתמש את התפקיד resourcemanager.organizationAdmin (כלומר, את ההרשאה resourcemanager.projects.list) ברמת הפרויקט, הוא מקבל הרשאות רק לפרויקט הספציפי הזה. מי שיש לו את התפקיד הזה לא יכול לראות רשימות או לנהל אותן בכל הפרויקטים בארגון. באותו האופן, התפקיד compute.admin במכונה ספציפית של Compute Engine נותן הרשאות רק למכונה הזו, ולא לאחרות בפרויקט.

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

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

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

המסוף

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

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

    לדף IAM

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

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

  4. לוחצים על Grant access.

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

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

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

    לדוגמה, כדי לנהל את הגישה למכונה של Compute Engine, נכנסים לדף VM instances.

    כניסה לדף VM instances

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

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

  4. לוחצים על Add principal.

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

gcloud

אפשר להשתמש בפקודה gcloud iam list-grantable-roles כדי להחזיר רשימה של כל התפקידים שאפשר לתת במשאב מסוים.

gcloud iam list-grantable-roles full-resource-name

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

הפלט אמור להיראות ככה:

description: Full control of all Compute Engine resources.
name: roles/compute.admin
title: Compute Admin
---
description: Full control of Compute Engine instance resources.
name: roles/compute.instanceAdmin
title: Compute Instance Admin

# Additional results here...

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());
  int count = 0;
  for (auto& role : client.QueryGrantableRoles(resource)) {
    if (!role) throw std::move(role).status();
    std::cout << "Role successfully retrieved: " << role->name() << "\n";
    ++count;
  }
  if (count == 0) {
    std::cout << "No grantable roles 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<Role> ViewGrantableRoles(string fullResourceName)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        var request = new QueryGrantableRolesRequest
        {
            FullResourceName = fullResourceName
        };
        var response = service.Roles.QueryGrantableRoles(request).Execute();
        foreach (var role in response.Roles)
        {
            Console.WriteLine("Title: " + role.Title);
            Console.WriteLine("Name: " + role.Name);
            Console.WriteLine("Description: " + role.Description);
            Console.WriteLine();
        }
        return response.Roles;
    }
}

Go

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

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

import (
	"context"
	"fmt"
	"io"

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

// viewGrantableRoles lists roles grantable on a resource.
func viewGrantableRoles(w io.Writer, fullResourceName 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.QueryGrantableRolesRequest{
		FullResourceName: fullResourceName,
	}
	response, err := service.Roles.QueryGrantableRoles(request).Do()
	if err != nil {
		return nil, fmt.Errorf("Roles.QueryGrantableRoles: %w", err)
	}
	for _, role := range response.Roles {
		fmt.Fprintf(w, "Found grantable role: %v\n", role.Name)
	}
	return response.Roles, err
}

Java

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

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

QueryGrantableRolesRequest request = new QueryGrantableRolesRequest();
request.setFullResourceName(fullResourceName);

QueryGrantableRolesResponse response = service.roles().queryGrantableRoles(request).execute();

for (Role role : response.getRoles()) {
  System.out.println("Title: " + role.getTitle());
  System.out.println("Name: " + role.getName());
  System.out.println("Description: " + role.getDescription());
  System.out.println();
}

Python

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

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

def view_grantable_roles(full_resource_name: str) -> None:
    roles = (
        service.roles()
        .queryGrantableRoles(body={"fullResourceName": full_resource_name})
        .execute()
    )

    for role in roles["roles"]:
        if "title" in role:
            print("Title: " + role["title"])
        print("Name: " + role["name"])
        if "description" in role:
            print("Description: " + role["description"])
        print(" ")

REST

ה-method‏ roles.queryGrantableRoles מחזיר רשימה של כל התפקידים שאפשר לתת במשאב.

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

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

POST https://iam.googleapis.com/v1/roles:queryGrantableRoles

תוכן בקשת JSON:

{
  "fullResourceName": "FULL_RESOURCE_NAME"
}

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

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

{
  "roles": [
    {
      "name": "roles/compute.admin",
      "title": "Compute Admin",
      "description": "Full control of all Compute Engine resources."
    },
    {
      "name": "roles/compute.instanceAdmin",
      "title": "Compute Instance Admin (beta)",
      "description": "Full control of Compute Engine instance resources."
    }
  ]
}

בדוגמאות שלמעלה, full resource name הוא URI ללא scheme שכולל שם של שירות API תואם-DNS ונתיב של משאב.

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

//cloudresourcemanager.googleapis.com/projects/project-id

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

//compute.googleapis.com/projects/project-id/zones/zone-name/instances/instance-id

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