Benutzerdefinierte Rollen erstellen und verwalten

Auf dieser Seite wird das Erstellen und Verwalten von benutzerdefinierten Rollen beschrieben.

Vorbereitung

Verfügbare Berechtigungen für eine Ressource abrufen

Bevor Sie eine benutzerdefinierte Rolle erstellen, möchten Sie möglicherweise wissen, welche Berechtigungen auf eine Ressource angewendet werden können. Mit dem gcloud-Tool, der Google Cloud Console oder der Identity and Access Management API können Sie alle Berechtigungen abrufen, die auf eine Ressource und die in der Hierarchie darunterliegenden Ressourcen angewendet werden können. Beispielsweise können Sie alle Berechtigungen abrufen, die Sie auf eine Organisation und auf Projekte in dieser Organisation anwenden können.

Console

  1. Rufen Sie in der Cloud Console die Seite Rollen auf.

    Zur Seite „Rollen“

  2. Wählen Sie das Projekt oben auf der Seite aus der Drop-down-Liste aus.

  3. Klicken Sie das Kästchen für die Administratorrolle einer Ressource an, um alle Berechtigungen aufzurufen, die Sie auf diese Ressource anwenden können. Wenn Sie beispielsweise die Rolle "Compute-Instanzadministrator" auswählen, werden in der rechten Seitenleiste alle Berechtigungen angezeigt, die auf eine Compute Engine-Instanz angewendet werden können.

gcloud

Verwenden Sie den Befehl gcloud iam list-testable-permissions, um eine Liste von Berechtigungen abzurufen, die auf eine Zielressource angewendet werden können. Bei den zurückgegebenen Berechtigungen handelt es sich um jene, mit denen eine benutzerdefinierte Rolle für diese Ressource und alle in der Hierarchie darunterliegenden Ressourcen erstellt werden können.

Das folgende Beispiel zeigt, wie testbare Berechtigungen für eine Projektressource aufgelistet werden:

gcloud iam list-testable-permissions project-id

project-id ist die ID des Projekts in Form eines vollständigen Ressourcennamens: //cloudresourcemanager.googleapis.com/projects/project-id, z. B. //cloudresourcemanager.googleapis.com/projects/my-project-id.

Der Befehl list-testable-permissions gibt möglicherweise Hunderte von Ergebnissen zurück. Sie können auch einen Filterausdruck angeben, um die Zahl der Ergebnisse zu begrenzen. Die Ergebnisse könnten z. B. so aussehen:

---
name: appengine.applications.create
stage: GA
---
customRolesSupportLevel: TESTING
name: appengine.applications.disable
stage: GA
---
name: appengine.applications.get
stage: GA
---
customRolesSupportLevel: NOT_SUPPORTED
name: appengine.applications.list
onlyInPredefinedRoles: true
stage: GA
---
name: appengine.applications.update
stage: GA
---
name: appengine.instances.delete
stage: GA
---
name: appengine.instances.get
stage: GA
---

Beachten Sie, dass für jede Berechtigung angegeben ist, ob sie in einer benutzerdefinierten Rolle unterstützt wird. Eine vollständige Liste unterstützter und nicht unterstützter Berechtigungen finden Sie unter Unterstützungsstufen für Berechtigungen in benutzerdefinierten Rollen.

REST

Mit der Methode permissions.queryTestablePermissions werden alle Berechtigungen aufgelistet, die Sie für eine Ressource testen können.

Ersetzen Sie diese Werte in den folgenden Anweisungen:

  • full-resource-name: URI, der aus dem Dienstnamen und dem Pfad zur Ressource besteht. Beispiele finden Sie unter Vollständige Ressourcennamen.
  • page-size: Optional. Die Anzahl der Berechtigungen, die in der Antwort enthalten sein sollen. Der Standardwert ist 100 und der Höchstwert 1.000. Wenn die Anzahl der Berechtigungen größer als die Seitengröße ist, enthält die Antwort ein Paginierungstoken, mit dem Sie die nächste Ergebnisseite abrufen können.
  • next-page-token: Optional. Das Paginierungstoken, das in einer früheren Antwort von dieser Methode zurückgegeben wurde. Wenn dieser Wert angegeben wird, beginnt die Liste der testbaren Berechtigungen dort, wo die vorherige Antwort endet.

HTTP-Methode und URL:

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

JSON-Text anfordern:

{
  "fullResourceName": "full-resource-name"
  "pageSize": page-size,
  "pageToken": "next-page-token"
}

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

Sie sollten ungefähr so eine JSON-Antwort erhalten:

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

C#

Richten Sie für dieses Beispiel C# wie in der IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur 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<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

Richten Sie für dieses Beispiel Go wie in der Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM Go API.

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

	request := &iam.QueryTestablePermissionsRequest{
		FullResourceName: fullResourceName,
	}
	response, err := service.Permissions.QueryTestablePermissions(request).Do()
	if err != nil {
		return nil, fmt.Errorf("Permissions.QueryTestablePermissions: %v", err)
	}
	for _, p := range response.Permissions {
		fmt.Fprintf(w, "Found permissions: %v", p.Name)
	}
	return response.Permissions, nil
}

Python

Richten Sie für dieses Beispiel Python wie in der IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM Python API.

def query_testable_permissions(resource):
    """Lists valid permissions for a resource."""

    # pylint: disable=no-member
    permissions = service.permissions().queryTestablePermissions(body={
        'fullResourceName': resource
    }).execute()['permissions']
    for p in permissions:
        print(p['name'])

Metadaten der Rollen abrufen

Bevor Sie eine benutzerdefinierte Rolle erstellen, können Sie die Metadaten für sowohl vordefinierte als auch benutzerdefinierte Rollen abrufen. Die Rollenmetadaten umfassen die Rollen-ID und die in der Rolle enthaltenen Berechtigungen. Sie können die Metadaten über die Cloud Console oder die IAM API anzeigen lassen.

Verwenden Sie eine der folgenden Methoden, um die Rollenmetadaten aufzurufen:

Console

  1. Rufen Sie in der Cloud Console die Seite Rollen auf.

    Zur Seite „Rollen“

  2. Wählen Sie oben auf der Seite aus der Drop-down-Liste Ihre Organisation oder Ihr Projekt aus.

  3. Klicken Sie das Kästchen für eine oder mehrere Rollen an, um die Rollenberechtigungen aufzurufen. In der rechten Seitenleiste werden die Berechtigungen aufgeführt, die gegebenenfalls in den Rollen enthalten sind.

Die Symbole in der Spalte Typ geben an, ob es sich um eine benutzerdefinierte Rolle oder um eine vordefinierte Rolle handelt.

Wenn Sie alle Rollen mit einer bestimmten Berechtigung auflisten möchten, geben Sie den Namen der Berechtigung in das Feld Filter oben in der Liste "Rollen" ein.

gcloud

Verwenden Sie den Befehl gcloud iam roles describe, um Metadaten für vordefinierte Rollen und benutzerdefinierte Rollen aufzurufen.

Führen Sie den folgenden -Befehl aus, um die Metadaten für eine vordefinierte Rolle aufzurufen:

gcloud iam roles describe role-id

role-id ist die ID der Rolle. Vordefinierte Rollen enthalten in ihren IDs das Präfix role, z. B. roles/iam.roleViewer.

Das folgende Beispiel zeigt die Ausgabe des Befehls describe, wenn er für die vordefinierte Rolle roles/iam.roleViewer ausgeführt wird:

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

Führen Sie einen der folgenden -Befehle aus, um die Metadaten für eine benutzerdefinierte Rolle aufzurufen:

  • Führen Sie den folgenden Befehl aus, um die Metadaten für eine benutzerdefinierte Rolle aufzurufen, die auf Organisationsebene erstellt wurde:

    gcloud iam roles describe --organization=organization-id role-id
    
  • Führen Sie den folgenden Befehl aus, um die Metadaten für eine benutzerdefinierte Rolle aufzurufen, die auf Projektebene erstellt wurde:

    gcloud iam roles describe --project=project-id role-id
    

Die Platzhalterwerte sind im Folgenden beschrieben:

  • organization-id ist die numerische ID der Organisation, z. B. 123456789012.
  • project-id ist der Name des Projekts, z. B. my-project-id.
  • role-id ist die ID der Rolle ohne Präfixe, z. B. projects/, organizations/ oder roles/. Beispiel: myCompanyAdmin.

Weitere Informationen finden Sie in der Referenzdokumentation zu gcloud iam roles describe.

REST

Mit der Methode roles.get wird die Definition einer Rolle abgerufen.

Ersetzen Sie diese Werte in den folgenden Anweisungen:

  • full-role-id: Die vollständige Rollen-ID, einschließlich der Präfixe organizations/, projects/ oder roles/. Beispiel: organizations/123456789012/roles/myCompanyAdmin.

HTTP-Methode und URL:

GET https://iam.googleapis.com/v1/full-role-id

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

Die Antwort enthält die Rollendefinition.

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

C#

Richten Sie für dieses Beispiel C# wie in der IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM C# API.


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

Richten Sie für dieses Beispiel Go wie in der Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM Go API.

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

	role, err := service.Roles.Get(name).Do()
	if err != nil {
		return nil, fmt.Errorf("Roles.Get: %v", 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
}

Python

Richten Sie für dieses Beispiel Python wie in der IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM Python API.

def get_role(name):
    """Gets a role."""

    # pylint: disable=no-member
    role = service.roles().get(name=name).execute()
    print(role['name'])
    for permission in role['includedPermissions']:
        print(permission)

Benutzerdefinierte Rolle erstellen

Sie können eine benutzerdefinierte Rolle auf Projekt- oder Organisationsebene erstellen.

Zum Erstellen einer benutzerdefinierten Rolle muss ein Aufrufer die Berechtigung iam.roles.create haben. Der Inhaber eines Projekts oder einer Organisation verfügt standardmäßig über diese Berechtigung und kann benutzerdefinierte Rollen erstellen und verwalten.

Nutzern, die keine Inhaber sind, wie z. B. Organisationsadministratoren, muss entweder die Rolle "Administrator für Organisationsrollen" oder die Rolle "Administrator für IAM-Rollen" zugewiesen werden.

Die Gesamtgröße des Titels, der Beschreibung und des Berechtigungsnamens für eine benutzerdefinierte Rolle ist auf 64 KB begrenzt. Wenn Sie eine umfangreichere benutzerdefinierte Rolle erstellen müssen, können Sie die Berechtigungen auf mehrere benutzerdefinierte Rollen aufteilen. Wählen Sie Rollentitel aus, die die Beziehung zwischen den benutzerdefinierten Rollen verdeutlichen, z. B. Custom Admin (1 of 2) und Custom Admin (2 of 2).

Jede benutzerdefinierte Rolle kann eine Einführungsphase haben. Die Einführungsphasen sind informativ und helfen Ihnen dabei zu erfassen, ob jede Rolle für den Einsatz bereit ist. Weitere Informationen zu den Markteinführungsphasen finden Sie unter Tests und Bereitstellung.

Console

Einige vordefinierte Rollen enthalten verworfene Berechtigungen oder Berechtigungen, die aus anderen Gründen nicht in benutzerdefinierten Rollen zugelassen sind. Wenn Sie versuchen, eine benutzerdefinierte Rolle zu erstellen, die auf einer dieser vordefinierten Rollen basiert, werden die verworfenen und eingeschränkten Berechtigungen weggelassen.

So erstellen Sie eine neue benutzerdefinierte Rolle:

  1. Rufen Sie in der Cloud Console die Seite Rollen auf.

    Zur Seite „Rollen“

  2. Wählen Sie oben auf der Seite in der Drop-down-Liste die Organisation oder das Projekt aus, in dem Sie eine Rolle erstellen möchten.

  3. Klicken Sie auf Rolle erstellen.

  4. Geben Sie einen Namen, einen Titel, eine Beschreibung und eine Rolleneinführungsphase für die Rolle ein. Der Rollenname kann nach dem Erstellen der Rolle nicht mehr geändert werden.

  5. Klicken Sie auf Berechtigungen hinzufügen.

  6. Wählen Sie die Berechtigungen aus, die Sie der Rolle hinzufügen möchten, und klicken Sie auf Berechtigungen hinzufügen. Verwenden Sie die Drop-down-Listen Alle Dienste und Alle Typen, um Berechtigungen nach Diensten und Typen zu filtern und auszuwählen.

So erstellen Sie eine benutzerdefinierte Rolle auf der Grundlage einer vorhandenen vordefinierten Rolle:

  1. Rufen Sie in der Cloud Console die Seite Rollen auf.

    Zur Seite „Rollen“

  2. Wählen Sie die Organisation oder das Projekt aus, in dem Sie eine Rolle erstellen möchten.
  3. Wählen Sie die Rollen aus, auf denen die neue benutzerdefinierte Rolle basieren soll.
  4. Klicken Sie auf Rolle aus Auswahl erstellen.
  5. Geben Sie einen Namen, einen Titel, eine Beschreibung und eine Rolleneinführungsphase für die Rolle ein. Der Rollenname kann nach dem Erstellen der Rolle nicht mehr geändert werden.
  6. Entfernen Sie die Häkchen aus den Kästchen neben den Berechtigungen, die von der Rolle ausgeschlossen werden sollen.
  7. Klicken Sie auf Berechtigungen hinzufügen, um Berechtigungen hinzuzufügen.
  8. Klicken Sie auf Erstellen.

gcloud

Verwenden Sie den Befehl gcloud iam roles create, um neue benutzerdefinierte Rollen zu erstellen. Dafür gibt es zwei Möglichkeiten:

  • Durch Bereitstellen einer YAML-Datei mit der Rollendefinition
  • Durch Verwenden von Flags zum Angeben der Rollendefinition

Beim Erstellen einer benutzerdefinierten Rolle müssen Sie mithilfe der Flags --organization=organization-id oder --project=project-id angeben, ob sie auf Organisationsebene oder Projektebene angewendet werden soll. Bei jedem der unten aufgeführten Beispiele wird eine benutzerdefinierte Rolle auf Projektebene erstellt.

Eine benutzerdefinierte Rolle kann nur Berechtigungen enthalten, die in benutzerdefinierten Rollen unterstützt werden. Wenn die benutzerdefinierte Rolle andere Berechtigungen enthält, schlägt der Befehl fehl.

So erstellen Sie eine benutzerdefinierte Rolle mithilfe einer YAML-Datei:

Erstellen Sie eine YAML-Datei, die die Definition für Ihre benutzerdefinierte Rolle enthält. Die Datei muss so strukturiert sein:

title: role-title
description: role-description
stage: launch-stage
includedPermissions:
- permission-1
- permission-2

Die Platzhalterwerte sind im Folgenden beschrieben:

  • role-title ist der angezeigte Titel der Rolle, z. B. "My Company Admin".
  • role-description ist eine kurze Beschreibung der Rolle, z. B. "My custom role description".
  • launch-stage gibt die Phase einer Rolle im Einführungszyklus an, z. B. ALPHA, BETA oder GA.
  • permission-1 und permission-2 sind Berechtigungen, die in die benutzerdefinierte Rolle aufgenommen werden sollen, z. B. iam.roles.get.

Speichern Sie die YAML-Datei und führen Sie dann einen der folgenden Befehle aus:

  • Führen Sie den folgenden Befehl aus, um eine benutzerdefinierte Rolle auf Organisationsebene zu erstellen:

    gcloud iam roles create role-id --organization=organization-id \
      --file=yaml-file-path
    
  • Führen Sie den folgenden Befehl aus, um eine benutzerdefinierte Rolle auf Projektebene zu erstellen:

    gcloud iam roles create role-id --project=project-id \
      --file=yaml-file-path
    

Die Platzhalterwerte sind im Folgenden beschrieben:

  • role-id ist der Name der Rolle, z. B. myCompanyAdmin.
  • organization-id ist die numerische ID der Organisation, z. B. 123456789012.
  • project-id ist der Name des Projekts, z. B. my-project-id.
  • yaml-file-path ist der Pfad zum Speicherort der YAML-Datei, die die Definition der benutzerdefinierten Rolle enthält.

Beispiele

Im folgenden Beispiel einer YAML-Datei ist zu sehen, wie eine Rollendefinition erstellt wird:

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

Das folgende Beispiel zeigt, wie Sie mithilfe der YAML-Datei eine Rolle auf Organisationsebene erstellen:

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

Wenn die Rolle erstellt wurde, sieht die Ausgabe des Befehls in etwa so aus:

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

Das folgende Beispiel zeigt, wie Sie mithilfe der YAML-Datei eine Rolle auf Projektebene erstellen:

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

Wenn die Rolle erstellt wurde, sieht die Ausgabe des Befehls in etwa so aus:

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

So erstellen Sie eine benutzerdefinierte Rolle mithilfe von Flags:

Führen Sie einen der folgenden Befehle aus:

  • Führen Sie den folgenden Befehl aus, um eine benutzerdefinierte Rolle auf Organisationsebene zu erstellen:

    gcloud iam roles create role-id --organization=organization-id \
      --title=role-title --description=role-description \
      --permissions=permissions-list --stage=launch-stage
    
  • Führen Sie den folgenden Befehl aus, um eine benutzerdefinierte Rolle auf Projektebene zu erstellen:

    gcloud iam roles create role-id --project=project-id \
      --title=role-title --description=role-description \
      --permissions=permissions-list --stage=launch-stage
    

Die Platzhalterwerte sind im Folgenden beschrieben:

  • role-id ist der Name der Rolle, z. B. myCompanyAdmin.
  • organization-id ist die numerische ID der Organisation, z. B. 123456789012.
  • project-id ist der Name des Projekts, z. B. my-project-id.
  • role-title ist der angezeigte Titel der Rolle, z. B. "My Company Admin".
  • role-description ist eine kurze Beschreibung der Rolle, z. B. "My custom role description.".
  • permissions-list enthält eine durch Kommas getrennte Liste von Berechtigungen, die Sie in die benutzerdefinierte Rolle aufnehmen möchten. Beispiel: iam.roles.get,iam.roles.list.
  • launch-stage gibt die Phase einer Rolle im Einführungszyklus an, z. B. ALPHA, BETA oder GA.

Beispiele

Das folgende Beispiel zeigt, wie Sie mithilfe von Flags eine Rolle auf Organisationsebene erstellen:

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

Wenn die Rolle erstellt wurde, sieht die Ausgabe des Befehls in etwa so aus:

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

Das folgende Beispiel zeigt, wie Sie mithilfe von Flags eine Rolle auf Projektebene erstellen:

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

Wenn die Rolle erstellt wurde, sieht die Ausgabe des Befehls in etwa so aus:

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

REST

Mit der Methode roles.create wird eine benutzerdefinierte Rolle in einem Projekt oder einer Organisation erstellt.

Ersetzen Sie diese Werte in den folgenden Anweisungen:

  • resource-type: Der Ressourcentyp, dessen benutzerdefinierte Rollen Sie verwalten möchten. Verwenden Sie den Wert projects oder organizations.
  • resource-id: Die Projekt-ID oder Organisations-ID, deren benutzerdefinierte Rollen Sie verwalten möchten. Projekt-IDs sind alphanumerische Strings, wie my-project. Organisations-IDs sind numerisch, z. B. 123456789012.
  • role-id: Der Name der Rolle, z. B. myCompanyAdmin.
  • role-title: Der für Nutzer lesbare Titel der Rolle. Beispiel: My Company Admin
  • role-description: Eine Beschreibung der Rolle. Beispiel: "The company admin role allows company admins to access important resources"
  • permission-1 und permission-2: Die Berechtigungen, die Sie der Rolle zuweisen möchten. Beispiel: storage.objects.update.

    Eine benutzerdefinierte Rolle kann nur Berechtigungen enthalten, die in benutzerdefinierten Rollen unterstützt werden. Wenn die benutzerdefinierte Rolle weitere Berechtigungen enthält, schlägt die Anfrage fehl.

  • launch-stage: Die aktuelle Startphase der Rolle. Dieses Feld kann einen der folgenden Werte enthalten: EAP, ALPHA, BETA, GA, DEPRECATED oder DISABLED.

HTTP-Methode und URL:

POST https://iam.googleapis.com/v1/resource-type/resource-id/roles

JSON-Text anfordern:

{
  "roleId": "role-id",
  "role": {
    "title": "role-title",
    "description": "role-description",
    "includedPermissions": [
      "permission-1",
      "permission-2"
    ],
    "stage": "launch-stage"
  }
}

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

Die Antwort enthält die von Ihnen erstellte Rolle.

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

C#

Richten Sie für dieses Beispiel C# wie in der IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur 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 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

Richten Sie für dieses Beispiel Go wie in der Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM Go API.

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: %v", 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: %v", err)
	}
	fmt.Fprintf(w, "Created role: %v", role.Name)
	return role, nil
}

Python

Richten Sie für dieses Beispiel Python wie in der IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM Python API.

def create_role(name, project, title, description, permissions, stage):
    """Creates a role."""

    # pylint: disable=no-member
    role = service.projects().roles().create(
        parent='projects/' + project,
        body={
            'roleId': name,
            'role': {
                'title': title,
                'description': description,
                'includedPermissions': permissions,
                'stage': stage
            }
        }).execute()

    print('Created role: ' + role['name'])
    return role

Vorhandene benutzerdefinierte Rolle bearbeiten

Read-Modify-Write (Lesen-Ändern-Schreiben)

Die Metadaten einer Ressource, beispielsweise einer Rolle, werden häufig nach dem folgenden Muster aktualisiert: Der aktuelle Status wird gelesen, die Daten werden lokal aktualisiert und die geänderten Daten werden anschließend zum Schreiben gesendet. Dabei kann es jedoch zu Konflikten kommen, wenn zwei oder mehr voneinander unabhängige Prozesse gleichzeitig nach diesem Muster verfahren. Wenn beispielsweise zwei Inhaber eines Projekts gleichzeitig versuchen, gegensätzliche Änderungen an der Rolle vorzunehmen, könnte es passieren, dass einige Änderungen nicht übernommen werden. IAM löst dieses Problem mithilfe eines etag-Attributs in benutzerdefinierten Rollen. Mit diesem Attribut wird überprüft, ob sich die benutzerdefinierte Rolle seit der letzten Anfrage geändert hat. Wenn Sie eine Anfrage mit einem ETag-Wert an IAM senden, vergleicht IAM den ETag-Wert in der Anfrage mit dem vorhandenen ETag-Wert, der der benutzerdefinierten Rolle zugeordnet ist. Die Änderung wird nur geschrieben, wenn die ETag-Werte übereinstimmen.

Wenn Sie eine Rolle aktualisieren, rufen Sie zuerst die Rolle mit roles.get() auf, aktualisieren Sie die Rolle und schreiben dann mit roles.patch() die aktualisierte Rolle. Verwenden Sie beim Festlegen der Rolle den Etag-Wert nur, wenn die entsprechende Rolle in roles.get() einen Etag-Wert enthält.

Console

  1. Rufen Sie in der Cloud Console die Seite Rollen auf.

    Zur Seite „Rollen“

  2. Wählen Sie oben auf der Seite in der Drop-down-Liste das Projekt oder die Organisation aus, die die Rolle enthält, die Sie bearbeiten möchten.

  3. Klicken Sie auf eine benutzerdefinierte Rolle.

  4. Klicken Sie auf Rolle bearbeiten.

  5. Bearbeiten Sie den Titel, die Beschreibung oder die Phase der Rolleneinführung, um die Metadaten der Rolle zu aktualisieren.

  6. So aktualisieren Sie die Berechtigungen der Rolle:

    1. Klicken Sie auf Berechtigungen hinzufügen, um der Rolle neue Berechtigungen hinzuzufügen.
    2. Entfernen Sie die Häkchen aus den Kästchen neben den Berechtigungen, die von der Rolle ausgeschlossen werden sollen.
  7. Klicken Sie auf Aktualisieren, um die bearbeitete Rolle zu speichern.

gcloud

Verwenden Sie den Befehl gcloud iam roles update, um benutzerdefinierte Rollen zu aktualisieren. Dafür gibt es zwei Möglichkeiten:

  • Durch Bereitstellen einer YAML-Datei, die die Definition der aktualisierten Rolle enthält
  • Durch Verwenden von Flags zum Angeben der Definition der aktualisierten Rolle

Beim Aktualisieren einer benutzerdefinierten Rolle müssen Sie mit den Flags --organization=organization-id oder --project=project-id angeben, ob sie auf Organisationsebene oder Projektebene angewendet werden soll. Bei jedem der unten aufgeführten Beispiele wird eine benutzerdefinierte Rolle auf Projektebene erstellt.

So aktualisieren Sie eine benutzerdefinierte Rolle mithilfe einer YAML-Datei:

Rufen Sie die aktuelle Definition für die Rolle ab, indem Sie einen der folgenden Befehle ausführen:

  • Führen Sie den folgenden Befehl aus, um die Rollendefinition einer benutzerdefinierten Rolle auf Organisationsebene abzurufen:

    gcloud iam roles describe role-id --organization=organization-id
    
  • Führen Sie den folgenden Befehl aus, um die Rollendefinition einer benutzerdefinierten Rolle auf Projektebene abzurufen:

    gcloud iam roles describe role-id --project=project-id
    

Die Platzhalterwerte sind im Folgenden beschrieben:

  • role-id ist der Name der Rolle, die aktualisiert werden soll, z. B. myCompanyAdmin.
  • organization-id ist die numerische ID der Organisation, z. B. 123456789012.
  • project-id ist der Name des Projekts, z. B. my-project-id.

Der describe-Befehl gibt die Definition der Rolle zurück und enthält einen etag-Wert, der die aktuelle Version der Rolle eindeutig identifiziert. Der etag-Wert sollte in der aktualisierten Rollendefinition angegeben werden, um sicherzustellen, dass gleichzeitig ausgeführte Rollenänderungen nicht überschrieben werden.

Der Befehl describe gibt Folgendes zurück:

description: role-description
etag: etag-value
includedPermissions:
- permission-1
- permission-2
name: full-role-id
stage: launch-stage
title: role-title

Die Platzhalterwerte sind im Folgenden beschrieben:

  • role-description ist eine kurze Beschreibung der Rolle, z. B. "My custom role description".
  • etag-value ist die eindeutige Kennung für die aktuelle Version der Rolle, z. B. BwVkBkbfr70=.
  • permission-1 und permission-2 sind Berechtigungen, die in die benutzerdefinierte Rolle aufgenommen werden sollen, z. B. iam.roles.get.
  • full-role-id ist die vollständige Rollen-ID, einschließlich sämtlicher Präfixe organizations/, projects/ und roles/. Beispiel: organizations/123456789012/roles/myCompanyAdmin.
  • launch-stage gibt die Phase einer Rolle im Einführungszyklus an, z. B. ALPHA, BETA oder GA.
  • role-title ist der angezeigte Titel der Rolle, z. B. "My Company Admin".

Nehmen Sie entweder die ausgegebene Rollendefinition in eine YAML-Datei auf oder aktualisieren Sie die ursprüngliche YAML-Datei mit dem ausgegebenen etag-Wert, um die Rolle zu aktualisieren.

Betrachten Sie die folgende YAML-Beispieldatei, die die Ausgabe des Befehls describe für eine Rolle auf Projektebene enthält und mit der zwei Cloud Storage-Berechtigungen hinzugefügt werden:

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

Speichern Sie die YAML-Datei und führen Sie dann einen der folgenden Befehle aus:

  • Führen Sie den folgenden Befehl aus, um eine Rolle auf Organisationsebene zu aktualisieren:

    gcloud iam roles update role-id --organization=organization-id \
      --file=yaml-file-path
    
  • Führen Sie den folgenden Befehl aus, um eine Rolle auf Projektebene zu aktualisieren:

    gcloud iam roles update role-id --project=project-id \
      --file=yaml-file-path
    

Die Platzhalterwerte sind im Folgenden beschrieben:

  • role-id ist der Name der Rolle, die aktualisiert werden soll, z. B. myCompanyAdmin.
  • organization-id ist die numerische ID der Organisation, z. B. 123456789012.
  • project-id ist der Name des Projekts, z. B. my-project-id.
  • yaml-file-path ist der Pfad zum Speicherort der YAML-Datei, die die Definition der aktualisierten benutzerdefinierten Rolle enthält.

Beispiele

Das folgende Beispiel zeigt, wie Sie mithilfe einer YAML-Datei eine Rolle auf Organisationsebene aktualisieren:

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

Wenn die Rolle aktualisiert wurde, sieht die Ausgabe des Befehls in etwa so aus:

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

Das folgende Beispiel zeigt, wie Sie mithilfe einer YAML-Datei eine Rolle auf Projektebene aktualisieren:

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

Wenn die Rolle aktualisiert wurde, sieht die Ausgabe des Befehls in etwa so aus:

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

So aktualisieren Sie eine benutzerdefinierte Rolle mithilfe von Flags:

Jeder Teil einer Rollendefinition kann mithilfe eines entsprechenden Flags aktualisiert werden. Eine Liste aller möglichen Flags finden Sie im Thema gcloud iam roles update.

Sie können die folgenden Flags verwenden, um Berechtigungen hinzuzufügen oder zu entfernen:

  • --add-permissions=permissions: fügt der Rolle eine oder mehrere durch Kommas getrennte Berechtigungen hinzu
  • --remove-permissions=permissions: entfernt eine oder mehrere durch Kommas getrennte Berechtigungen aus der Rolle

Alternativ können Sie die neuen Berechtigungen einfach mit dem Flag --permissions=permissions angeben und eine durch Kommas getrennte Liste von Berechtigungen bereitstellen, um die vorhandene Berechtigungsliste zu ersetzen.

Führen Sie einen der folgenden Befehle aus, um andere Teile der Rollendefinition zu aktualisieren:

  • Führen Sie den folgenden Befehl aus, um eine Rolle auf Organisationsebene zu aktualisieren:

    gcloud iam roles update role-id --organization=organization-id \
      --title=role-title --description=role-description \
      --stage=launch-stage
    
  • Führen Sie den folgenden Befehl aus, um eine Rolle auf Projektebene zu aktualisieren:

    gcloud iam roles update role-id --project=project-id \
      --title=role-title --description=role-description \
      --stage=launch-stage
    

Die Platzhalterwerte sind im Folgenden beschrieben:

  • role-id ist der Name der Rolle, z. B. myCompanyAdmin.
  • organization-id ist die numerische ID der Organisation, z. B. 123456789012.
  • project-id ist der Name des Projekts, z. B. my-project-id.
  • role-title ist der angezeigte Titel der Rolle, z. B. "My Company Admin".
  • role-description ist eine kurze Beschreibung der Rolle, z. B. "My custom role description.".
  • launch-stage gibt die Phase einer Rolle im Einführungszyklus an, z. B. ALPHA, BETA oder GA.

Beispiele

Das folgende Beispiel zeigt, wie Sie einer Rolle auf Organisationsebene mithilfe von Flags Berechtigungen hinzufügen:

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

Wenn die Rolle aktualisiert wurde, sieht die Ausgabe des Befehls in etwa so aus:

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

Das folgende Beispiel zeigt, wie Sie einer Rolle auf Projektebene mithilfe von Flags Berechtigungen hinzufügen:

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

Wenn die Rolle aktualisiert wurde, sieht die Ausgabe des Befehls in etwa so aus:

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

REST

Mit der Methode roles.patch wird eine benutzerdefinierte Rolle in einem Projekt oder einer Organisation aktualisiert.

Ersetzen Sie diese Werte in den folgenden Anweisungen:

Erforderlich:

  • resource-type: Der Ressourcentyp, dessen benutzerdefinierte Rollen Sie verwalten möchten. Verwenden Sie den Wert projects oder organizations.
  • resource-id: Die Projekt-ID oder Organisations-ID, deren benutzerdefinierte Rollen Sie verwalten möchten. Projekt-IDs sind alphanumerische Strings, wie my-project. Organisations-IDs sind numerisch, z. B. 123456789012.
  • full-role-id: Die vollständige Rollen-ID, einschließlich der Präfixe organizations/, projects/ oder roles/. Beispiel: organizations/123456789012/roles/myCompanyAdmin.

Empfohlen:

  • etag: Eine Kennzeichnung für eine Version der Rolle. Fügen Sie dieses Feld ein, um Überschreiben von Änderungen an der Rolle zu verhindern.

Optional (definieren Sie einen oder mehrere der folgenden Werte):

  • role-title: Der für Nutzer lesbare Titel der Rolle. Beispiel: My Company Admin
  • role-description: Eine Beschreibung der Rolle. Beispiel: "The company admin role allows company admins to access important resources"
  • permission-1 und permission-2: Die Berechtigungen, die Sie der Rolle zuweisen möchten. Beispiel: storage.objects.update.
  • launch-stage: Die aktuelle Startphase der Rolle. Dieses Feld kann einen der folgenden Werte enthalten: EAP, ALPHA, BETA, GA, DEPRECATED oder DISABLED.

HTTP-Methode und URL:

PATCH https://iam.googleapis.com/v1/resource-type/resource-id/roles

JSON-Text anfordern:

{
  "roleId": "full-role-id",
  "title": "role-title",
  "description": "role-description",
  "includedPermissions": [
    "permission-1",
    "permission-2"
  ],
  "stage": "launch-stage",
  "etag": "etag"
}

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

Die Antwort enthält eine abgekürzte Rollendefinition, die den Namen der Rolle, die aktualisierten Felder und ein ETag beinhaltet, das die aktuelle Version der Rolle angibt.

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

C#

Richten Sie für dieses Beispiel C# wie in der IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur 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 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

Richten Sie für dieses Beispiel Go wie in der Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM Go API.

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

	resource := "projects/" + projectID + "/roles/" + name
	role, err := service.Projects.Roles.Get(resource).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.Roles.Get: %v", 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: %v", err)
	}
	fmt.Fprintf(w, "Updated role: %v", role.Name)
	return role, nil
}

Python

Richten Sie für dieses Beispiel Python wie in der IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM Python API.

def edit_role(name, project, title, description, permissions, stage):
    """Creates a role."""

    # pylint: disable=no-member
    role = service.projects().roles().patch(
        name='projects/' + project + '/roles/' + name,
        body={
            'title': title,
            'description': description,
            'includedPermissions': permissions,
            'stage': stage
        }).execute()

    print('Updated role: ' + role['name'])
    return role

Benutzerdefinierte Rolle deaktivieren

Sie haben die Möglichkeit, benutzerdefinierte Rollen zu deaktivieren. Beim Deaktivieren einer Rolle werden alle Richtlinienbindungen, die mit der Rolle in Zusammenhang stehen, deaktiviert. Dies bedeutet, dass die Zuweisung der Rolle an einen Nutzer keine Auswirkungen hat.

Console

  1. Rufen Sie in der Cloud Console die Seite Rollen auf.

    Zur Seite „Rollen“

  2. Klicken Sie am Anfang der Seite auf die Drop-down-Liste "Projekt auswählen".

  3. Wählen Sie Ihre Organisation oder das Projekt aus.

  4. Wählen Sie eine benutzerdefinierte Rolle aus und klicken Sie auf Deaktivieren.

gcloud

Verwenden Sie den Befehl gcloud iam roles update, um eine benutzerdefinierte Rolle durch Festlegen der Einführungsphase auf DISABLED zu deaktivieren. Wie auf dem Tab gcloud im Abschnitt Vorhandene benutzerdefinierte Rolle bearbeiten beschrieben, können Sie eine vorhandene benutzerdefinierte Rolle auf zwei Arten aktualisieren:

  • Durch Bereitstellen einer YAML-Datei, die die Definition der aktualisierten Rolle enthält
  • Durch Verwenden von Flags zum Angeben der Definition der aktualisierten Rolle

Am einfachsten können Sie eine vorhandene benutzerdefinierte Rolle deaktivieren, indem Sie das Flag --stage verwenden und auf DISABLED festlegen. Führen Sie einen der folgenden Befehle aus:

  • Führen Sie den folgenden Befehl aus, um eine Rolle auf Organisationsebene zu deaktivieren:

    gcloud iam roles update role-id --organization=organization-id \
      --stage=DISABLED
    
  • Führen Sie den folgenden Befehl aus, um eine Rolle auf Projektebene zu deaktivieren:

    gcloud iam roles update role-id --project=project-id \
      --stage=DISABLED
    

Die Platzhalterwerte sind im Folgenden beschrieben:

  • role-id ist der Name der Rolle, z. B. myCompanyAdmin.
  • organization-id ist die numerische ID der Organisation, z. B. 123456789012.
  • project-id ist der Name des Projekts, z. B. my-project-id.

Beispiele

Das folgende Beispiel zeigt, wie Sie eine Rolle auf Organisationsebene deaktivieren:

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

Wenn die Rolle aktualisiert wurde, sieht die Ausgabe des Befehls in etwa so aus:

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

Das folgende Beispiel zeigt, wie Sie eine Rolle auf Projektebene deaktivieren:

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

Wenn die Rolle aktualisiert wurde, sieht die Ausgabe des Befehls in etwa so aus:

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

REST

Mit der Methode roles.patch können Sie die Startphase einer benutzerdefinierten Rolle in DISABLED ändern, wodurch die Rolle deaktiviert wird.

Ersetzen Sie diese Werte in den folgenden Anweisungen:

  • resource-type: Der Ressourcentyp, dessen benutzerdefinierte Rollen Sie verwalten möchten. Verwenden Sie den Wert projects oder organizations.
  • resource-id: Die Projekt-ID oder Organisations-ID, deren benutzerdefinierte Rollen Sie verwalten möchten. Projekt-IDs sind alphanumerische Strings, wie my-project. Organisations-IDs sind numerisch, z. B. 123456789012.
  • full-role-id: Die vollständige Rollen-ID, einschließlich der Präfixe organizations/, projects/ oder roles/. Beispiel: organizations/123456789012/roles/myCompanyAdmin.

  • etag: Eine Kennzeichnung für eine Version der Rolle. Fügen Sie dieses Feld ein, um Überschreiben von Änderungen an der Rolle zu verhindern.

HTTP-Methode und URL:

PATCH https://iam.googleapis.com/v1/resource/resource-id/roles

JSON-Text anfordern:

{
  "roleId": "full-role-id",
  "stage": DISABLED,
  "etag": "etag"
}

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

Sie sollten ungefähr so eine JSON-Antwort erhalten:

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

C#

Aktualisieren Sie das Feld stage der Rolle auf DISABLED.

Go

Aktualisieren Sie das Feld stage der Rolle auf DISABLED.

Python

Aktualisieren Sie das Feld stage der Rolle auf DISABLED.

Rollen auflisten

Sie können alle benutzerdefinierten Rollen auflisten, die in Ihrem Projekt oder in Ihrer Organisation erstellt wurden.

Console

Rufen Sie in der Cloud Console die Seite Rollen auf.

Zur Seite „Rollen“

Alle benutzerdefinierten Rollen für die ausgewählte Organisation oder das ausgewählte Projekt werden auf der Seite aufgeführt.

gcloud

Verwenden Sie den Befehl gcloud iam roles list, um benutzerdefinierte Rollen und vordefinierte Rollen für ein Projekt oder eine Organisation aufzulisten.

Führen Sie einen der folgenden Befehle aus, um benutzerdefinierte Rollen aufzulisten:

  • Führen Sie den folgenden Befehl aus, um benutzerdefinierte Rollen auf Organisationsebene aufzulisten:

    gcloud iam roles list --organization=organization-id
    
  • Führen Sie den folgenden Befehl aus, um benutzerdefinierte Rollen auf Projektebene aufzulisten:

    gcloud iam roles list --project=project-id
    

Die Platzhalterwerte sind im Folgenden beschrieben:

  • organization-id ist die numerische ID der Organisation, z. B. 123456789012.
  • project-id ist der Name des Projekts, z. B. my-project-id.

Zum Auflisten gelöschter Rollen können Sie auch das Flag --show-deleted angeben.

Führen Sie den folgenden -Befehl aus, um vordefinierte Rollen aufzulisten:

gcloud iam roles list

REST

Mit der Methode roles.list werden alle benutzerdefinierten Rollen in einem Projekt oder einer Organisation aufgelistet.

Ersetzen Sie diese Werte in den folgenden Anweisungen:

  • resource-type: Der Ressourcentyp, dessen benutzerdefinierte Rollen Sie verwalten möchten. Verwenden Sie den Wert projects oder organizations.
  • resource-id: Die Projekt-ID oder Organisations-ID, deren benutzerdefinierte Rollen Sie verwalten möchten. Projekt-IDs sind alphanumerische Strings, wie my-project. Organisations-IDs sind numerisch, z. B. 123456789012.
  • role-view: Optional. Die Informationen, die in den zurückgegebenen Rollen enthalten sein sollen. Setzen Sie den Wert dieses Feldes auf FULL, um die Berechtigungen der Rollen einzuschließen. Wenn Sie die Berechtigungen der Rollen ausschließen möchten, legen Sie für dieses Feld BASIC fest. Der Standardwert ist BASIC.
  • page-size: Optional. Die Anzahl der Rollen, die in der Antwort enthalten sein sollen. Der Standardwert ist 300 und der Höchstwert ist 1.000. Wenn die Anzahl der Rollen größer als die Seitengröße ist, enthält die Antwort ein Paginierungstoken, mit dem Sie die nächste Ergebnisseite abrufen können.
  • next-page-token: Optional. Das Paginierungstoken, das in einer früheren Antwort von dieser Methode zurückgegeben wurde. Wenn dieser Wert angegeben wird, beginnt die Liste der Rollen dort, wo die vorherige Anfrage endet.

HTTP-Methode und URL:

GET https://iam.googleapis.com/v1/resource-type/resource-id/roles?view=role-view&pageSize=page-size&pageToken=next-page-token

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

Sie sollten in etwa folgende JSON-Antwort erhalten:

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

C#

Richten Sie für dieses Beispiel C# wie in der IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur 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> 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

Richten Sie für dieses Beispiel Go wie in der Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM Go API.

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

	response, err := service.Projects.Roles.List("projects/" + projectID).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.Roles.List: %v", err)
	}
	for _, role := range response.Roles {
		fmt.Fprintf(w, "Listing role: %v\n", role.Name)
	}
	return response.Roles, nil
}

Python

Richten Sie für dieses Beispiel Python wie in der IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM Python API.

def list_roles(project_id):
    """Lists roles."""

    # pylint: disable=no-member
    roles = service.roles().list(
        parent='projects/' + project_id).execute()['roles']
    for role in roles:
        print(role['name'])

Benutzerdefinierte Rolle löschen

Sie können jede benutzerdefinierte Rolle in Ihrem Projekt oder in Ihrer Organisation löschen.

Console

  1. Rufen Sie in der Cloud Console die Seite Rollen auf.

    Zur Seite „Rollen“

  2. Wählen Sie die Rolle aus, die Sie löschen möchten, und klicken Sie oben auf der Seite auf  Löschen.

gcloud

Verwenden Sie den Befehl gcloud iam roles delete, um eine benutzerdefinierte Rolle zu löschen. Diese Rolle wird gesperrt und kann nicht verwendet werden, um neue IAM-Richtlinienbindungen zu erstellen.

Führen Sie einen der folgenden Befehle aus, um eine benutzerdefinierte Rolle zu löschen:

  • Führen Sie den folgenden Befehl aus, um eine benutzerdefinierte Rolle auf Organisationsebene zu löschen:

    gcloud iam roles delete role-id --organization=organization-id
    
  • Führen Sie den folgenden Befehl aus, um eine benutzerdefinierte Rolle auf Projektebene zu löschen:

    gcloud iam roles delete role-id --project=project-id
    

Die Platzhalterwerte sind im Folgenden beschrieben:

  • role-id ist der Name der Rolle, z. B. myCompanyAdmin.
  • organization-id ist die numerische ID der Organisation, z. B. 123456789012.
  • project-id ist der Name des Projekts, z. B. my-project-id.

Die Rolle wird nur dann in gcloud iam roles list aufgenommen, wenn das Flag --show-deleted angegeben ist. Gelöschte Rollen sind durch den Block deleted: true in einer list-Antwort gekennzeichnet. Beispiel:

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

REST

Mit der Methode roles.delete wird eine benutzerdefinierte Rolle in einem Projekt oder einer Organisation gelöscht.

Ersetzen Sie diese Werte in den folgenden Anweisungen:

  • full-role-id: Die vollständige Rollen-ID, einschließlich der Präfixe organizations/, projects/ oder roles/. Beispiel: organizations/123456789012/roles/myCompanyAdmin.

HTTP-Methode und URL:

DELETE https://iam.googleapis.com/v1/full-role-id

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

Die Antwort enthält die Definition der gelöschten Rolle.

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

C#

Richten Sie für dieses Beispiel C# wie in der IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM C# API.


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

Richten Sie für dieses Beispiel Go wie in der Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM Go API.

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

	_, err = service.Projects.Roles.Delete("projects/" + projectID + "/roles/" + name).Do()
	if err != nil {
		return fmt.Errorf("Projects.Roles.Delete: %v", err)
	}
	fmt.Fprintf(w, "Deleted role: %v", name)
	return nil
}

Python

Richten Sie für dieses Beispiel Python wie in der IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM Python API.

def delete_role(name, project):
    """Deletes a role."""

    # pylint: disable=no-member
    role = service.projects().roles().delete(
        name='projects/' + project + '/roles/' + name).execute()

    print('Deleted role: ' + name)
    return role

Wenn eine Rolle gelöscht wird, bleiben ihre Bindungen bestehen, sind aber inaktiv. Sie können eine Rolle innerhalb von 7 Tagen wiederherstellen. Während dieses 7-Tage-Zeitraums wird die Rolle in der Cloud Console als gelöscht angezeigt und beim Ausführen von programmatischen list-Befehlen nur aufgeführt, wenn in der Anfrage showDeleted festgelegt ist.

Nach 7 Tagen wird die Rolle dauerhaft gelöscht. Zu diesem Zeitpunkt wird die Rolle nicht mehr auf das Limit von 300 benutzerdefinierten Rollen pro Organisation bzw. 300 benutzerdefinierten Rollen pro Projekt angerechnet.

Das endgültige Löschen dauert 30 Tage. Während dieses Zeitfensters werden die Rolle und alle zugehörigen Bindungen dauerhaft entfernt. Sie können keine neue Rolle mit derselben Rollen-ID erstellen.

Nachdem die Rolle dauerhaft gelöscht wurde, also 37 Tage nach der ursprünglichen Löschanfrage, können Sie eine neue Rolle mit derselben Rollen-ID erstellen.

Benutzerdefinierte Rolle wiederherstellen

Wenn Sie eine Rolle wiederherstellen, wird sie in den vorherigen Zustand zurückversetzt.

Rollen können nur innerhalb von sieben Tagen wiederhergestellt werden. Danach wird die Rolle endgültig gelöscht und alle mit der Rolle verknüpften Bindungen werden entfernt.

Console

  1. Rufen Sie in der Cloud Console die Seite Rollen auf.

    Zur Seite „Rollen“

  2. Suchen Sie die Rolle, die Sie wiederherstellen möchten. Klicken Sie dann zuerst auf das Dreipunkt-Menü am Ende der Zeile und anschließend auf Wiederherstellen.

gcloud

Verwenden Sie den Befehl gcloud iam roles undelete, um eine benutzerdefinierte Rolle wiederherzustellen.

Führen Sie einen der folgenden Befehle aus, um eine benutzerdefinierte Rolle wiederherzustellen:

  • Führen Sie den folgenden Befehl aus, um eine benutzerdefinierte Rolle auf Organisationsebene wiederherzustellen:

    gcloud iam roles undelete role-id --organization=organization-id
    
  • Führen Sie den folgenden Befehl aus, um eine benutzerdefinierte Rolle auf Projektebene wiederherzustellen:

    gcloud iam roles undelete role-id --project=project-id
    

Die Platzhalterwerte sind im Folgenden beschrieben:

  • role-id ist der Name der Rolle, z. B. myCompanyAdmin.
  • organization-id ist die numerische ID der Organisation, z. B. 123456789012.
  • project-id ist der Name des Projekts, z. B. my-project-id.

Beispiele

Das folgende Beispiel zeigt, wie Sie eine benutzerdefinierte Rolle auf Organisationsebene wiederherstellen:

gcloud iam roles undelete myCompanyAdmin --organization=123456789012

Wenn die Rolle wiederhergestellt wurde, sieht die Ausgabe des Befehls in etwa so aus:

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

Das folgende Beispiel zeigt, wie Sie eine benutzerdefinierte Rolle auf Projektebene wiederherstellen:

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

Wenn die Rolle wiederhergestellt wurde, sieht die Ausgabe des Befehls in etwa so aus:

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

REST

Mit der Methode roles.undelete wird eine benutzerdefinierte Rolle in einem Projekt oder einer Organisation wiederhergestellt.

Ersetzen Sie diese Werte in den folgenden Anweisungen:

  • full-role-id: Die vollständige Rollen-ID, einschließlich der Präfixe organizations/, projects/ oder roles/. Beispiel: organizations/123456789012/roles/myCompanyAdmin.

  • etag: Eine Kennzeichnung für eine Version der Rolle. Fügen Sie dieses Feld ein, um Überschreiben von Änderungen an der Rolle zu verhindern.

HTTP-Methode und URL:

POST https://iam.googleapis.com/v1/full-role-id:undelete

JSON-Text anfordern:

{
  "etag": "etag"
}

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

Die Antwort enthält die Definition der wiederhergestellten Rolle.

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

C#

Richten Sie für dieses Beispiel C# wie in der IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM C# API.


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

Richten Sie für dieses Beispiel Go wie in der Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM Go API.

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: %v", 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: %v", err)
	}
	fmt.Fprintf(w, "Undeleted role: %v", role.Name)
	return role, nil
}

Python

Richten Sie für dieses Beispiel Python wie in der IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM Python API.

def undelete_role(name, project):
    """Undeletes a role."""

    # pylint: disable=no-member
    role = service.projects().roles().patch(
        name='projects/' + project + '/roles/' + name,
        body={
            'stage': 'DISABLED'
        }).execute()

    print('Disabled role: ' + role['name'])
    return role

Weitere Informationen