Benutzerdefinierte Rollen erstellen und verwalten

Auf dieser Seite wird beschrieben, wie Sie benutzerdefinierte IAM-Rollen (Identity and Access Management) erstellen und verwalten. Das Verwalten von Rollen umfasst das Ändern, Deaktivieren, Auflisten, Löschen und Wiederherstellen von Rollen.

Hinweise

  • Enable the IAM API.

    Enable the API

  • Richten Sie die Authentifizierung ein.

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

    Console

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

    gcloud

    In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

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

    C++

    Wenn Sie die C++ Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, installieren und initialisieren Sie die gcloud CLI und richten dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

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

      gcloud auth application-default login

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

    Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten in der Dokumentation zur Google Cloud-Authentifizierung.

    C#

    Wenn Sie die .NET Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, installieren und initialisieren Sie die gcloud CLI und richten dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

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

      gcloud auth application-default login

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

    Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten in der Dokumentation zur Google Cloud-Authentifizierung.

    Go

    Wenn Sie die Go Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, installieren und initialisieren Sie die gcloud CLI und richten dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

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

      gcloud auth application-default login

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

    Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten in der Dokumentation zur Google Cloud-Authentifizierung.

    Java

    Wenn Sie die Java Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, installieren und initialisieren Sie die gcloud CLI und richten dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

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

      gcloud auth application-default login

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

    Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten in der Dokumentation zur Google Cloud-Authentifizierung.

    Python

    Wenn Sie die Python Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, installieren und initialisieren Sie die gcloud CLI und richten dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

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

      gcloud auth application-default login

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

    Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten in der Dokumentation zur Google Cloud-Authentifizierung.

    REST

    Verwenden Sie die von der gcloud CLI bereitgestellten Anmeldedaten, um die REST API-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung zu verwenden.

      Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init

    Weitere Informationen finden Sie unter Für die Verwendung von REST authentifizieren in der Dokumentation zur Google Cloud-Authentifizierung.

  • Machen Sie sich mit der Google Cloud-Ressourcenhierarchie vertraut.

  • Informationen zu benutzerdefinierten IAM-Rollen.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen und Verwalten von benutzerdefinierten Rollen benötigen:

  • So verwalten Sie Rollen für ein Projekt: Rollenadministrator (roles/iam.roleAdmin) für das Projekt, für das Sie Rollen verwalten möchten
  • So verwalten Sie Rollen für eine Organisation: Organisationsrollenadministrator (roles/iam.organizationRoleAdmin) der Organisation, für die Sie Rollen verwalten möchten

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Verfügbare Berechtigungen für Projekte, Ordner und Organisationen aufrufen

Sie können benutzerdefinierte Rollen für eine gesamte Organisation oder für ein bestimmtes Projekt in dieser Organisation erstellen. Welche Berechtigungen für benutzerdefinierte Rollen verfügbar sind, hängt davon ab, wo Sie die Rolle erstellen. Wenn eine Berechtigung beispielsweise nur auf Organisationsebene verwendet werden kann, können Sie sie nicht in eine benutzerdefinierte Rolle auf Projektebene aufnehmen.

Zum Prüfen, welche Berechtigungen für benutzerdefinierte Rollen auf Organisations- und Projektebene verfügbar sind, können Sie gcloud CLI oder die Identity and Access Management API verwenden, um die Berechtigungen aufzulisten, die in einer bestimmten Organisation oder einem bestimmten Projekt verfügbar sind. Beispielsweise können Sie alle Berechtigungen abrufen, die für benutzerdefinierte Rollen verfügbar sind, die in Ihrem Projekt erstellt werden.

Einige Berechtigungen sind für Sie möglicherweise nicht sichtbar oder in einer benutzerdefinierten Rolle nicht verwendbar, auch wenn sie in benutzerdefinierten Rollen unterstützt werden. Beispielsweise ist eine Berechtigung möglicherweise nicht für die Verwendung in benutzerdefinierten Rollen verfügbar, wenn Sie die API für den Dienst nicht aktiviert haben.

Weitere Informationen zu den Berechtigungen, die Sie benutzerdefinierten Rollen hinzufügen können, finden Sie unter Unterstützte Berechtigungen.

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. Verwenden Sie den Befehl gcloud iam list-testable-permissions, um eine Liste von Berechtigungen abzurufen, die für benutzerdefinierte Rollen in einem bestimmten Projekt oder einer bestimmten Organisation verfügbar sind. In der Antwort sind die Berechtigungen aufgeführt, die Sie in benutzerdefinierten Rollen für dieses Projekt oder diese Organisation verwenden können.

    Führen Sie den folgenden Befehl aus, um die Berechtigungen aufzulisten, die in benutzerdefinierten Rollen für ein Projekt oder eine Organisation verfügbar sind:

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

    Ersetzen Sie FULL_RESOURCE_NAME durch einen der folgenden Werte:

    • Projekt: //cloudresourcemanager.googleapis.com/projects/PROJECT_ID (z. B. //cloudresourcemanager.googleapis.com/projects/my-project)

    • Organisation: //cloudresourcemanager.googleapis.com/organizations/NUMERIC_ID (z. B. //cloudresourcemanager.googleapis.com/organizations/123456789012)

    In den Ergebnissen wird angezeigt, ob die jeweiligen Berechtigungen in benutzerdefinierten Rollen unterstützt werden. Berechtigungen ohne das Feld customRolesSupportLevel werden vollständig unterstützt.

    Der Befehl list-testable-permissions gibt möglicherweise Hunderte von Ergebnissen zurück. Dieses unvollständige Beispiel zeigt das Format der einzelnen Ergebnisse:

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

C++

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur C++ API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.

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#

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur C# API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.


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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur Go API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.

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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur Java API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.


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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur Python API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.

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

    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

Mit der Methode permissions.queryTestablePermissions werden die in einer Organisation oder einem Projekt verfügbaren Berechtigungen aufgelistet.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • 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:

Die Antwort enthält die Liste der Berechtigungen.

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

Metadaten für die Rolle 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 Google Cloud Console oder die IAM API anzeigen lassen.

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

Console

  1. Öffnen Sie in der Google Cloud Console die Seite Rollen.

    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

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

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

C++

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur C++ API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.

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#

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur C# API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.


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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur Go API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.

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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur Java API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.


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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur Python API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.

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:
        raise f"Role with id [{role_id}] not found, take some actions"

REST

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

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • ROLE_NAME: Der vollständige Rollenname, einschließlich der Präfixe organizations/, projects/ und roles/. Beispiel: organizations/123456789012/roles/myCompanyAdmin.

HTTP-Methode und URL:

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

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

Benutzerdefinierte Rolle erstellen

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

Eine benutzerdefinierte Rolle auf Organisationsebene kann alle IAM-Berechtigungen enthalten, die in benutzerdefinierten Rollen unterstützt werden. Eine benutzerdefinierte Rolle auf Projektebene kann alle unterstützten Berechtigungen enthalten, außer Berechtigungen, die nur auf Organisations- oder Ordnerebene verwendet werden können, z. B. resourcemanager.organizations.get. Wenn Sie versuchen, diese Berechtigungen einer benutzerdefinierten Rolle auf Projektebene hinzuzufügen, wird eine Fehlermeldung angezeigt:

Console

Console: Die folgende Warnmeldung wird angezeigt: „Nicht anwendbar für benutzerdefinierte Rollen auf Projektebene“. Die Berechtigung wird automatisch aus der Liste der enthaltenen Berechtigungen entfernt und Sie können mit dem Erstellen der Rolle fortfahren.

gcloud

Die folgende Fehlermeldung wird zurückgegeben: INVALID_ARGUMENT: Permission PERMISSION is not valid. Die benutzerdefinierte Rolle wird erst erstellt, wenn Sie die Berechtigung aus der Rollendefinition entfernen und den Vorgang wiederholen.

REST API

Die folgende Fehlermeldung wird zurückgegeben: Permission PERMISSION is not valid, zusammen mit einem HTTP 400-Fehlercode und dem Status INVALID_ARGUMENT. Die benutzerdefinierte Rolle wird erst erstellt, wenn Sie die Berechtigung aus der Rollendefinition entfernen und den Vorgang wiederholen.

Jede benutzerdefinierte Rolle kann bis zu 3.000 Berechtigungen enthalten. Außerdem beträgt die maximale Gesamtgröße von Titel, Beschreibung und Berechtigungsnamen für eine benutzerdefinierte Rolle 64 KB. 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 meisten Einführungsphasen sind informativ und helfen Ihnen dabei zu erfassen, ob jede Rolle für den Einsatz bereit ist. Außerdem können Sie in der Einführungsphase DISABLED eine benutzerdefinierte Rolle deaktivieren. Weitere Informationen zu den Einfü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 auf der Grundlage einer dieser vordefinierten Rollen zu erstellen, werden die verworfenen und eingeschränkten Berechtigungen in der benutzerdefinierten Rolle weggelassen.

So erstellen Sie eine neue benutzerdefinierte Rolle:

  1. Öffnen Sie in der Google Cloud Console die Seite Rollen.

    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 Titel, eine Beschreibung, eine ID und eine Phase der Rollenerstellung für die Rolle ein. Die Rollen-ID 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. Öffnen Sie in der Google Cloud Console die Seite Rollen.

    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 Titel, eine Beschreibung, eine ID und eine Phase der Rollenerstellung für die Rolle ein. Die Rollen-ID 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

  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. 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 folgendermaßen 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. In Berechtigungsnamen können Sie keine Platzhalterzeichen (*) verwenden.

    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.

    • 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 \
        --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/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.

    • 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. In Berechtigungsnamen können Sie keine Platzhalterzeichen (*) verwenden.

    • 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 \
        --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/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

C++

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur C++ API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.

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#

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur C# API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.


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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur Go API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.

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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur Java API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.


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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur Python API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.

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

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

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • 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. In Berechtigungsnamen können Sie keine Platzhalterzeichen (*) verwenden.

    Eine benutzerdefinierte Rolle kann nur Berechtigungen enthalten, die in benutzerdefinierten Rollen unterstützt werden. Wenn die benutzerdefinierte Rolle andere 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="
}

Vorhandene benutzerdefinierte Rolle bearbeiten

Die Metadaten einer Ressource, beispielsweise einer benutzerdefinierten Rolle, werden häufig nach dem Muster read-modify-write aktualisiert. Bei diesem Muster lesen Sie den aktuellen Status der Rolle, aktualisieren die Daten lokal und senden dann die geänderten Daten zum Schreiben.

Das Read-Modify-Write-Muster kann einen Konflikt verursachen, 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. Öffnen Sie in der Google Cloud Console die Seite Rollen.

    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

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

    Um die aktuelle Definition für die Rolle abzurufen, führen Sie einen der folgenden Befehle aus:

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

    Der describe-Befehl gibt die Definition der Rolle zurück und enthält einen etag-Wert, der die aktuelle Version der Rolle 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
    includedPermissions:
    - PERMISSION_1
    - PERMISSION_2
    name: ROLE_NAME
    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 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. In Berechtigungsnamen können Sie keine Platzhalterzeichen (*) verwenden.

    • ROLE_NAME ist der vollständige Rollenname, einschließlich der 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/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 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.

    • 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 \
        --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/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 In Berechtigungsnamen können Sie keine Platzhalterzeichen (*) verwenden.

    • --remove-permissions=PERMISSIONS: entfernt eine oder mehrere durch Kommas getrennte Berechtigungen aus der Rolle In Berechtigungsnamen können Sie keine Platzhalterzeichen (*) verwenden.

    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.

    • 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 \
        --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/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

C++

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur C++ API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.

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#

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur C# API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.


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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur Go API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.

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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur Java API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.


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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur Python API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.

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

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

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

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.
  • ROLE_NAME: Der vollständige Rollenname, einschließlich der Präfixe organizations/, projects/ und 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. In Berechtigungsnamen können Sie keine Platzhalterzeichen (*) verwenden.
  • 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": "ROLE_NAME",
  "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="
}

Benutzerdefinierte Rolle deaktivieren

Sie können eine benutzerdefinierte Rolle deaktivieren, indem Sie ihre Startphase zu DISABLED ändern. Beim Deaktivieren einer Rolle werden alle Bindungen, die mit der Rolle in Zusammenhang stehen, deaktiviert. Dies bedeutet, dass die Zuweisung der Rolle an einen Nutzer keine Auswirkungen hat.

Console

  1. Öffnen Sie in der Google Cloud Console die Seite Rollen.

    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

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

    Die einfachste Art, eine vorhandene benutzerdefinierte Rolle zu ist es, das Flag --stage zu verwenden und auf DISABLED festzulegen. 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.

    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 \
        --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/roles/myCompanyAdmin
    stage: DISABLED
    title: My Company Admin

C++

Aktualisieren Sie das Feld stage der Rolle auf DISABLED.

C#

Aktualisieren Sie das Feld stage der Rolle auf DISABLED.

Go

Aktualisieren Sie das Feld stage der Rolle auf DISABLED.

Java

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur Java API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.


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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur Python API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.

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:
        raise f"Role with id [{role_id}] not found, take some actions"

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 Anfragedaten:

  • 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_NAME: Der vollständige Rollenname, einschließlich der Präfixe organizations/, projects/ und 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_TYPE/RESOURCE_ID/roles

JSON-Text anfordern:

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

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

Sie sollten in etwa folgende JSON-Antwort erhalten:

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

Rollen auflisten

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

Console

Öffnen Sie in der Google Cloud Console die Seite Rollen.

Zur Seite „Rollen“

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

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

    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

C++

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur C++ API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.

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#

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur C# API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.


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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur Go API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.

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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur Java API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.


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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur Python API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.

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

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

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

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

Benutzerdefinierte Rollen löschen

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

Console

  1. Öffnen Sie in der Google Cloud Console die Seite Rollen.

    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

  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. Verwenden Sie den Befehl gcloud iam roles delete, 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.

    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/roles/myCompanyAdmin
    title: My Company Admin
    ---
    

C++

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur C++ API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.

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#

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur C# API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.


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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur Go API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.

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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur Java API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.


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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur Python API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.

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

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

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • ROLE_NAME: Der vollständige Rollenname, einschließlich der Präfixe organizations/, projects/ und roles/. Beispiel: organizations/123456789012/roles/myCompanyAdmin.

HTTP-Methode und URL:

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

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
}

Wenn eine Rolle gelöscht wird, verbleiben alle Rollenbindungen, die sich auf die Rolle beziehen, in Ihren Richtlinien, haben aber keine Auswirkungen. Sie können eine Rolle innerhalb von 7 Tagen wiederherstellen. Während dieses Zeitraums zeigt die Google Cloud Console, dass die Rolle gelöscht wurde. Sie können gelöschte Rollen auch programmatisch auflisten. Diese werden jedoch standardmäßig weggelassen.

Nach 7 bis 14 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 endgültig gelöscht wurde, können Sie bis zu 44 Tage nach der ursprünglichen Löschanfrage eine neue Rolle mit derselben Rollen-ID erstellen.

Wiederherstellen einer gelöschten benutzerdefinierten Rolle

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

Rollen können nur innerhalb von sieben Tagen wiederhergestellt werden. Nach 7 Tagen kann die Rolle jederzeit endgültig gelöscht werden und alle Rollenbindungen, die sich auf die Rolle beziehen, werden entfernt.

Console

  1. Öffnen Sie in der Google Cloud Console die Seite Rollen.

    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

  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. Verwenden Sie den Befehl gcloud iam roles undelete, 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.

    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

    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/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

C++

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur C++ API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.

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#

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur C# API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.


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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur Go API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.

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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur Java API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.


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

Informationen zum Installieren und Verwenden der Clientbibliothek für IAM finden Sie unter IAM-Clientbibliotheken. Weitere Informationen finden Sie in der IAM-Referenzdokumentation zur Python API.

Richten Sie zur Authentifizierung bei IAM die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Vorbereitung.

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

    Returns: google.cloud.iam_admin_v1.Role object
    """
    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

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

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • ROLE_NAME: Der vollständige Rollenname, einschließlich der Präfixe organizations/, projects/ und 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/ROLE_NAME: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="
}

Nächste Schritte