Testare le autorizzazioni per le interfacce utente personalizzate

La maggior parte delle risorse Google Cloud espongono il metodo testIamPermissions(), che ti consente di controllare in modo programmatico se il chiamante attualmente autenticato sono state concesse una o più autorizzazioni IAM specifiche risorsa. Il metodo testIamPermissions() accetta un identificatore di risorsa e un di autorizzazioni come parametri di input e restituisce l'insieme di autorizzazioni l'utente può chiamarli.

Puoi utilizzare il metodo testIamPermissions() per determinare se un utente deve avere accesso a uno strumento amministrativo in un'applicazione web. Ad esempio, puoi usa questo metodo per decidere, in base alle autorizzazioni dell'utente, se visualizzare informazioni dettagliate su una risorsa Google Cloud.

Ad esempio, per determinare se l'utente attualmente autenticato dispone dell'autorizzazione per eliminare un progetto, richiama projects.testIamPermissions() fornendo l'ID progetto (ad esempio foo-project) e il metodo Autorizzazione resourcemanager.projects.delete come parametri di input. Se il chiamante ha ricevuto l'autorizzazione resourcemanager.projects.delete, verrà elencato nel corpo della risposta. Se il chiamante non dispone di questa autorizzazione, il corpo della risposta non elencherà nessuna autorizzazione.

Il metodo testIamPermissions() è destinato a grafica di terze parti interfacce utente (GUI) che devono visualizzare le risorse Google Cloud basate ai dati che l'utente autenticato è autorizzato a visualizzare. Ad esempio, la console Google Cloud utilizza internamente il metodo testIamPermissions() per determinare quali risorse e funzionalità sono visibili dopo l'autenticazione. In genere, a utenti diversi vengono concesse autorizzazioni diverse e la console Google Cloud nasconde o mostra gli elementi di conseguenza.

Prima di iniziare

  • Enable the Resource Manager API.

    Enable the API

  • Configurare l'autenticazione.

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

    C#

    Per utilizzare gli .NET esempi in questa pagina in un ambiente di sviluppo locale, installa e inizializza l'interfaccia alla gcloud CLI, quindi configura le Credenziali predefinite dell'applicazione con le tue credenziali utente.

    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.

    Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale nella documentazione sull'autenticazione di Google Cloud.

    C++

    Per utilizzare gli C++ esempi in questa pagina in un ambiente di sviluppo locale, installa e inizializza l'interfaccia alla gcloud CLI, quindi configura le Credenziali predefinite dell'applicazione con le tue credenziali utente.

    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.

    Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale nella documentazione sull'autenticazione di Google Cloud.

    Java

    Per utilizzare gli Java esempi in questa pagina in un ambiente di sviluppo locale, installa e inizializza l'interfaccia alla gcloud CLI, quindi configura le Credenziali predefinite dell'applicazione con le tue credenziali utente.

    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.

    Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale nella documentazione sull'autenticazione di Google Cloud.

    Python

    Per utilizzare gli Python esempi in questa pagina in un ambiente di sviluppo locale, installa e inizializza l'interfaccia alla gcloud CLI, quindi configura le Credenziali predefinite dell'applicazione con le tue credenziali utente.

    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.

    Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale nella documentazione sull'autenticazione di Google Cloud.

    REST

    Per utilizzare gli esempi dell'API REST in questa pagina in un ambiente di sviluppo locale, utilizza le credenziali fornite a gcloud CLI.

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

      gcloud init

    Per saperne di più, consulta Eseguire l'autenticazione per l'utilizzo di REST nella documentazione sull'autenticazione di Google Cloud.

Ruoli obbligatori

Non è necessario alcun ruolo IAM per testare le autorizzazioni.

Come testare le autorizzazioni

Questo esempio mostra come testare resourcemanager.projects.get e Autorizzazioni resourcemanager.projects.delete per progetto Google Cloud. A le autorizzazioni di test per altre risorse Google Cloud, utilizza Metodo testIamPermissions() esposto da ogni risorsa. Ad esempio, puoi testare le autorizzazioni IAM per Bucket Cloud Storage.

C++

Per scoprire come installare e utilizzare la libreria client per IAM, consulta Librerie client IAM. Per ulteriori informazioni, consulta API IAM C++ documentazione di riferimento.

Per autenticarti in IAM, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Prima di iniziare.

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#

Per eseguire l'autenticazione su Resource Manager, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Prima di iniziare.

Per scoprire come installare e utilizzare la libreria client per Resource Manager, vedi Client Resource Manager librerie.

IAM verifica le autorizzazioni dell'account di servizio che utilizzate per generare le credenziali.


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

Per eseguire l'autenticazione su Resource Manager, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Prima di iniziare.

Per scoprire come installare e utilizzare la libreria client per Resource Manager, vedi Client Resource Manager librerie.

IAM verifica le autorizzazioni dell'account di servizio che utilizzate per generare le credenziali.

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

Per eseguire l'autenticazione su Resource Manager, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Prima di iniziare.

Per scoprire come installare e utilizzare la libreria client per Resource Manager, vedi Client Resource Manager librerie.

IAM verifica le autorizzazioni dell'account di servizio che utilizzate per generare le credenziali.

def test_permissions(project_id: str) -> List[str]:
    """Tests IAM permissions of currently authenticated user to a project."""

    projects_client = resourcemanager_v3.ProjectsClient()
    if not project_id.startswith("projects/"):
        project_id = "projects/" + project_id

    owned_permissions = projects_client.test_iam_permissions(
        resource=project_id,
        permissions=["resourcemanager.projects.get", "resourcemanager.projects.delete"],
    ).permissions

    print("Currently authenticated user has following permissions:", owned_permissions)
    return owned_permissions

REST

In questo esempio, l'utente ha un ruolo IAM che gli consente di per ottenere informazioni su un progetto, ma non per eliminarlo.

L'API Resource Manager projects.testIamPermissions accetta un elenco di autorizzazioni e verifica di quali autorizzazioni dispone un'entità.

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT_ID: il tuo progetto Google Cloud ID. Gli ID progetto sono stringhe alfanumeriche, ad esempio my-project.

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

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

Per inviare la richiesta, espandi una delle seguenti opzioni:

Dovresti ricevere una risposta JSON simile alla seguente:

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

Passaggi successivi

Scopri come concedere, modificare e revocare l'accesso alle entità.