Zuweisbare Rollen für Ressourcen aufrufen

Bevor Sie einem Nutzer eine IAM-Rolle für eine Ressource zuweisen, möchten Sie vielleicht wissen, welche Rollen der jeweiligen Ressource zugewiesen werden können.

Informationen zu erteilbaren Rollen

Eine Rolle kann für oder oberhalb einer Ressource gewährt werden, wenn sie Berechtigungen für den entsprechenden Ressourcentyp enthält. Beispiel: Die Rolle storage.admin gewährt Berechtigungen für die APIs storage.buckets.get und storage.objects.get. Somit kann sie den Ressourcentypen Storage-Buckets und Speicherobjekte zugewiesen werden.

Rollen können auch "oberhalb" der Ressourcentypen gewährt werden, für die die Berechtigungen definiert wurden. Mit anderen Worten, Rollen für untergeordnete Ressourcen können für eine Ressource gewährt werden, die in der Google Cloud-Ressourcenhierarchie übergeordnet ist. Beispielsweise kann die Rolle storage.admin nicht nur Storage-Buckets , sondern zusätzlich auch auf Projekt- oder Organisationsebene zugewiesen werden.

Von einer Rolle gewährte Berechtigungen wirken sich nur auf der angegebenen Ebene oder darunter auf Ressourcen aus und nicht auf Ressourcen auf höherer Ebene oder auf Peer-Ressourcen. Wenn eine Rolle für eine Ressource gewährt wird, werden außerdem nur Berechtigungen gewährt, die für die angegebene Ressource gelten, und das unabhängig vom Namen, der Beschreibung oder anderen enthaltenen Berechtigungen der Rolle. So werden beispielsweise durch Zuweisen der Rolle resourcemanager.organizationAdmin (die die Berechtigung resourcemanager.projects.list enthält) an einen Nutzer auf Projektebene diesem nur Berechtigungen für das spezifische Projekt gewährt. Er kann nicht alle Projekte in der Organisation auflisten oder verwalten. Entsprechend werden durch das Zuweisen der Rolle compute.admin auf einer bestimmten Compute Engine-Instanz nur Berechtigungen für diese spezifische Instanz und keine anderen im Projekt gewährt.

Erteilbare Rollen auflisten

Prüfen Sie, ob der Dienst im Projekt aktiviert wurde, bevor Sie die erteilbaren Rollen auflisten. Wenn ein Dienst nicht aktiviert wurde, werden seine Rollen nicht zurückgegeben.

Console

  1. Öffnen Sie in der Cloud Console die Seite "IAM".

    Zur Seite "IAM"

  2. Klicken Sie am Anfang der Seite auf die Drop-down-Liste "Projekt auswählen".
  3. Wählen Sie das Projekt oder die Organisation aus, für die Sie die Rollen anzeigen möchten.
  4. Klicken Sie auf Hinzufügen.
  5. Geben Sie im Feld Mitglieder die E-Mail-Adresse oder Domain des Mitglieds an.

Die Drop-down-Liste Rolle auswählen enthält alle Rollen (einschließlich benutzerdefinierte Rollen), die einem Mitglied für diese Ressource zugewiesen werden können.

gcloud-Befehl

Verwenden Sie den Befehl gcloud iam list-grantable-roles, um eine Liste aller Rollen zurückgeben zu lassen, die auf eine bestimmte Ressource angewendet werden können.

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

Abhängig von der gewünschten Ressource können sehr viele Rollen zurückgegeben werden. Sie können einen Filterausdruck angeben, um die Zahl der Ergebnisse zu begrenzen.

Die Ausgabe sieht etwa so aus:

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...

REST API

Die Methode roles.queryGrantableRoles gibt eine Liste aller Rollen zurück, die für eine Ressource gewährt werden können.

Geben Sie für die Parameter folgende Werte an:

HTTP-Methode und URL:

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

JSON-Text anfordern:

{
  "fullResourceName": "full-resource-name"
}

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie sollten in etwa folgende JSON-Antwort erhalten:

{
  "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."
    }
  ]
}

C#

Für dieses Beispiel müssen Sie C# wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM C# API.


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

Für dieses Beispiel müssen Sie Go wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Go API.

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: %v", err)
	}

	request := &iam.QueryGrantableRolesRequest{
		FullResourceName: fullResourceName,
	}
	response, err := service.Roles.QueryGrantableRoles(request).Do()
	if err != nil {
		return nil, fmt.Errorf("Roles.QueryGrantableRoles: %v", err)
	}
	for _, role := range response.Roles {
		fmt.Fprintf(w, "Found grantable role: %v\n", role.Name)
	}
	return response.Roles, err
}

Java

Für dieses Beispiel müssen Sie Java wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Java API.

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

Für dieses Beispiel müssen Sie Python wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Python API.

def view_grantable_roles(full_resource_name):
    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'])
        print('Description: ' + role['description'])
        print(' ')

In den Beispielen oben ist der vollständige Ressourcenname ein schemaloser URI bestehend aus einem DNS-kompatiblen API-Dienstnamen und einem Ressourcenpfad.

Sie verwenden etwa Folgendes, um alle erteilbaren Rollen für ein Projekt zurückzugeben:

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

Ressourcen auf einer niedrigeren Ebene haben einen detaillierteren vollständig qualifizierten Namen. Sie verwenden etwa Folgendes, um alle erteilbaren Rollen für eine Compute Engine-Instanz zurückzugeben:

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

Weitere Informationen