Berechtigungen für benutzerdefinierte Benutzeroberflächen testen

Die meisten Google Cloud-Ressourcen bieten die Methode testIamPermissions(), mit der Sie programmatisch prüfen können, ob dem aktuell authentifizierten Aufrufer eine oder mehrere spezifische IAM-Berechtigungen für die Ressource erteilt wurden. Die Methode testIamPermissions() gibt mit einer Ressourcen-URL und einer Gruppe von Berechtigungen als Eingabeparameter die Gruppe der Berechtigungen für den Aufrufer zurück.

Mit der Methode testIamPermissions() können Sie bestimmen, ob ein Nutzer Zugriff auf ein Verwaltungstool in einer Webanwendung haben soll. Mit dieser Methode können Sie beispielsweise anhand der Berechtigungen des Nutzers entscheiden, ob detaillierte Informationen zu einer Google Cloud-Ressource angezeigt werden sollen.

Es soll beispielsweise festgestellt werden, ob der aktuell authentifizierte Nutzer zum Löschen eines Projekts berechtigt ist. Rufen Sie dazu die Methode projects.testIamPermissions()auf und geben Sie dabei die Projekt-ID (z. B. foo-project) und die Berechtigung resourcemanager.projects.deleteals Eingabeparameter an. Wenn dem Aufrufer die Berechtigung resourcemanager.projects.delete gewährt wurde, ist dies im Antworttext aufgeführt. Wenn der Aufrufer diese Berechtigung nicht hat, listet der Antworttext keine Berechtigungen auf.

Die Methode testIamPermissions() ist für grafische Benutzeroberflächen (GUIs) von Drittanbietern vorgesehen, die Google Cloud-Ressourcen auf der Grundlage der Berechtigungen des authentifizierten Nutzers anzeigen sollen. Beispielsweise verwendet die Cloud Console intern die Methode testIamPermissions(), um zu bestimmen, welche Ressourcen und Funktionen nach der Authentifizierung angezeigt werden. Unterschiedlichen Nutzern werden in der Regel unterschiedliche Berechtigungen gewährt. Die Cloud Console blendet Elemente entsprechend aus oder stellt sie zur Verfügung.

Hinweise

  • Enable the Resource Manager API.

    Enable the API

  • Richten Sie die Authentifizierung ein.

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

    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.

    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.

    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.

Erforderliche Rollen

Zum Testen von Berechtigungen ist keine IAM-Rolle erforderlich.

Berechtigungen testen

In diesem Beispiel wird gezeigt, wie die Berechtigungen resourcemanager.projects.get und resourcemanager.projects.delete für ein Google Cloud-Projekt getestet werden. Verwenden Sie zum Testen von Berechtigungen für andere Google Cloud-Ressourcen die Methode testIamPermissions(), die von den einzelnen Ressourcen bereitgestellt wird. Sie können beispielsweise die IAM-Berechtigungen für einen Cloud Storage-Bucket testen.

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::vector<std::string> const& permissions) {
  iam::IAMClient client(iam::MakeIAMConnection());
  auto response = client.TestIamPermissions(name, permissions);
  if (!response) throw std::move(response).status();
  std::cout << "Permissions successfully tested: " << response->DebugString()
            << "\n";
}

C#

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich beim Resource Manager zu authentifizieren. Weitere Informationen finden Sie unter Vorbereitung.

Informationen zum Installieren und Verwenden der Clientbibliothek für Resource Manager finden Sie unter Resource Manager-Clientbibliotheken.

IAM testet die Berechtigungen des Dienstkontos, mit dem Sie Anmeldedaten generieren.


using System;
using System.Collections.Generic;
using Google.Apis.Auth.OAuth2;
using Google.Apis.CloudResourceManager.v1;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static IList<String> TestIamPermissions(string projectId)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(CloudResourceManagerService.Scope.CloudPlatform);
        var service = new CloudResourceManagerService(
            new CloudResourceManagerService.Initializer
            {
                HttpClientInitializer = credential
            });

        TestIamPermissionsRequest requestBody = new TestIamPermissionsRequest();
        var permissions = new List<string>() { "resourcemanager.projects.get", "resourcemanager.projects.delete" };
        requestBody.Permissions = new List<string>(permissions);
        var returnedPermissions = service.Projects.TestIamPermissions(requestBody, projectId).Execute().Permissions;

        return returnedPermissions;
    }
}

Java

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich beim Resource Manager zu authentifizieren. Weitere Informationen finden Sie unter Vorbereitung.

Informationen zum Installieren und Verwenden der Clientbibliothek für Resource Manager finden Sie unter Resource Manager-Clientbibliotheken.

IAM testet die Berechtigungen des Dienstkontos, mit dem Sie Anmeldedaten generieren.

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.cloudresourcemanager.v3.CloudResourceManager;
import com.google.api.services.cloudresourcemanager.v3.model.TestIamPermissionsRequest;
import com.google.api.services.cloudresourcemanager.v3.model.TestIamPermissionsResponse;
import com.google.api.services.iam.v1.IamScopes;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class TestPermissions {

  // Tests if the caller has the listed permissions.
  public static void testPermissions(String projectId) {
    // projectId = "my-project-id"

    CloudResourceManager service = null;
    try {
      service = createCloudResourceManagerService();
    } catch (IOException | GeneralSecurityException e) {
      System.out.println("Unable to initialize service: \n" + e.toString());
      return;
    }

    List<String> permissionsList =
        Arrays.asList("resourcemanager.projects.get", "resourcemanager.projects.delete");

    TestIamPermissionsRequest requestBody =
        new TestIamPermissionsRequest().setPermissions(permissionsList);
    try {
      TestIamPermissionsResponse testIamPermissionsResponse =
          service.projects().testIamPermissions(projectId, requestBody).execute();

      System.out.println(
          "Of the permissions listed in the request, the caller has the following: "
              + testIamPermissionsResponse.getPermissions().toString());
    } catch (IOException e) {
      System.out.println("Unable to test permissions: \n" + e.toString());
    }
  }

  public static CloudResourceManager createCloudResourceManagerService()
      throws IOException, GeneralSecurityException {
    // Use the Application Default Credentials strategy for authentication. For more info, see:
    // https://cloud.google.com/docs/authentication/production#finding_credentials_automatically
    GoogleCredentials credential =
        GoogleCredentials.getApplicationDefault()
            .createScoped(Collections.singleton(IamScopes.CLOUD_PLATFORM));

    CloudResourceManager service =
        new CloudResourceManager.Builder(
                GoogleNetHttpTransport.newTrustedTransport(),
                GsonFactory.getDefaultInstance(),
                new HttpCredentialsAdapter(credential))
            .setApplicationName("service-accounts")
            .build();
    return service;
  }
}

Python

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich beim Resource Manager zu authentifizieren. Weitere Informationen finden Sie unter Vorbereitung.

Informationen zum Installieren und Verwenden der Clientbibliothek für Resource Manager finden Sie unter Resource Manager-Clientbibliotheken.

IAM testet die Berechtigungen des Dienstkontos, mit dem Sie Anmeldedaten generieren.

def test_permissions(project_id: str) -> dict:
    """Tests IAM permissions of the caller"""

    credentials = service_account.Credentials.from_service_account_file(
        filename=os.environ["GOOGLE_APPLICATION_CREDENTIALS"],
        scopes=["https://www.googleapis.com/auth/cloud-platform"],
    )
    service = googleapiclient.discovery.build(
        "cloudresourcemanager", "v1", credentials=credentials
    )

    permissions = {
        "permissions": [
            "resourcemanager.projects.get",
            "resourcemanager.projects.delete",
        ]
    }

    request = service.projects().testIamPermissions(
        resource=project_id, body=permissions
    )
    returnedPermissions = request.execute()
    print(returnedPermissions)
    return returnedPermissions

REST

In diesem Beispiel hat der Nutzer eine IAM-Rolle, mit der er Informationen zu einem Projekt abrufen, aber keine Projekte löschen kann.

Die Methode projects.testIamPermissions der Resource Manager API akzeptiert eine Liste von Berechtigungen und testet, welche Berechtigungen ein Hauptkonto hat.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: Ihre Google Cloud-Projekt-ID. Projekt-IDs sind alphanumerische Strings, wie my-project.

HTTP-Methode und URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:testIamPermissions

JSON-Text anfordern:

{
  "permissions":  [
    "resourcemanager.projects.get",
    "resourcemanager.projects.delete"
  ]
}

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

Sie sollten in etwa folgende JSON-Antwort erhalten:

{
  "permissions": [
    "resourcemanager.projects.get"
  ]
}

Nächste Schritte

Zugriffsrechte für Hauptkonten gewähren, ändern und widerrufen