Probar permisos de interfaces de usuario personalizadas

La mayoría de los Trusted Cloud by S3NS recursos exponen el método testIamPermissions(), que te permite comprobar de forma programática si el llamador autenticado actualmente tiene uno o varios permisos de gestión de identidades y accesos específicos en el recurso. El método testIamPermissions() toma un identificador de recurso y un conjunto de permisos como parámetros de entrada, y devuelve el conjunto de permisos que tiene el llamante.

Puedes usar el método testIamPermissions() para determinar si un usuario debe tener acceso a una herramienta administrativa en una aplicación web. Por ejemplo, puede usar este método para decidir, en función de los permisos del usuario, si debe mostrar información detallada sobre un recurso. Trusted Cloud

Por ejemplo, para determinar si el usuario autenticado actualmente tiene permiso para eliminar un proyecto, llama al método projects.testIamPermissions() proporcionando el ID del proyecto (como foo-project) y el permiso resourcemanager.projects.delete como parámetros de entrada. Si se ha concedido el permiso resourcemanager.projects.delete a la persona que llama, se mostrará en el cuerpo de la respuesta. Si la persona que llama no tiene este permiso, el cuerpo de la respuesta no incluirá ningún permiso.

El método testIamPermissions() está pensado para interfaces de usuario gráficas (GUIs) de terceros que necesiten mostrar recursos de Trusted Cloud en función de los permisos que tenga el usuario autenticado. Por ejemplo, la consolaTrusted Cloud usa internamente el método testIamPermissions() para determinar qué recursos y funciones puedes ver después de autenticarte. Normalmente, se conceden permisos diferentes a los distintos usuarios, y la Trusted Cloud consola oculta o muestra los elementos en función de esos permisos.

Antes de empezar

Roles obligatorios

No se necesita ningún rol de gestión de identidades y accesos para probar los permisos.

Cómo probar los permisos

En este ejemplo se muestra cómo probar los permisos resourcemanager.projects.get y resourcemanager.projects.delete de un Trusted Cloud proyecto. Para probar los permisos de otros Trusted Cloud recursos, usa el método testIamPermissions()expuesto por cada recurso. Por ejemplo, puedes probar los permisos de gestión de identidades y accesos de un segmento de Cloud Storage.

C++

Para saber cómo instalar y usar la biblioteca de cliente de IAM, consulta Bibliotecas de cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API C++ de gestión de identidades y accesos.

Para autenticarte en IAM, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta la sección Antes de empezar.

Antes de ejecutar los ejemplos de código, asigna el valor s3nsapis.fr a la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN.

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#

Para autenticarte en Resource Manager, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta la sección Antes de empezar.

Para saber cómo instalar y usar la biblioteca de cliente de Resource Manager, consulta el artículo sobre las bibliotecas de cliente de Resource Manager.

IAM prueba los permisos de la cuenta de servicio que estás usando para generar credenciales.


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

Para autenticarte en Resource Manager, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta la sección Antes de empezar.

Para saber cómo instalar y usar la biblioteca de cliente de Resource Manager, consulta el artículo sobre las bibliotecas de cliente de Resource Manager.

IAM prueba los permisos de la cuenta de servicio que estás usando para generar credenciales.

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

Para autenticarte en Resource Manager, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta la sección Antes de empezar.

Para saber cómo instalar y usar la biblioteca de cliente de Resource Manager, consulta el artículo sobre las bibliotecas de cliente de Resource Manager.

IAM prueba los permisos de la cuenta de servicio que estás usando para generar credenciales.

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

En este ejemplo, el usuario tiene un rol de gestión de identidades y accesos que le permite obtener información sobre un proyecto, pero no eliminar proyectos.

El método projects.testIamPermissions de la API Resource Manager acepta una lista de permisos y comprueba cuáles tiene una entidad.

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: tu ID de proyecto. Trusted Cloud Los IDs de proyecto son cadenas alfanuméricas, como my-project.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

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

Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

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

Siguientes pasos

Consulta cómo conceder, cambiar y revocar el acceso a las entidades.