Prueba permisos para interfaces de usuario personalizadas

La mayoría de los recursos Trusted Cloud by S3NS exponen el método testIamPermissions(), que te permite comprobar de manera programática si el emisor autenticado actual tiene uno o más permisos de IAM específicos en el recurso. El método testIamPermissions() toma un identificador de recursos y un conjunto de permisos como parámetros de entrada y muestra el conjunto de permisos habilitados para el emisor.

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, puedes usar este método para decidir, en función de los permisos del usuario, si deseas mostrar información detallada sobre un recurso de Trusted Cloud .

Por ejemplo, si quieres determinar si el usuario autenticado actual tiene permiso para borrar un proyecto, llama al método projects.testIamPermissions() mediante el ID del proyecto (por ejemplo, foo-project) y el permiso resourcemanager.projects.delete como parámetros de entrada. Si se le otorgó el permiso resourcemanager.projects.delete al emisor, se lo incluirá en el cuerpo de la respuesta. Si el emisor no tiene este permiso, el cuerpo de la respuesta no mostrará ningún permiso.

El método testIamPermissions() está orientado a interfaces gráficas de usuario (GUI) de terceros que necesitan mostrar recursos de Trusted Cloud según lo que el usuario autenticado tenga permiso para ver. Por ejemplo, la consola deTrusted Cloud usa internamente el método testIamPermissions() para determinar qué recursos y funciones son visibles para ti después de la autenticación. En general, los diferentes usuarios tienen distintos permisos, y la Trusted Cloud consola los oculta o expone según corresponda.

Antes de comenzar

Roles requeridos

No se requiere ningún rol de IAM para probar los permisos.

Cómo probar permisos

En este ejemplo, se muestra cómo probar los permisos resourcemanager.projects.get y resourcemanager.projects.delete para un proyectoTrusted Cloud . Para probar los permisos de otros recursos de Trusted Cloud , usa el métodotestIamPermissions()que expone cada recurso. Por ejemplo, puedes probar los permisos de IAM para un bucket de Cloud Storage.

C++

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

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

Antes de ejecutar muestras de código, configura la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN como s3nsapis.fr.

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 Antes de comenzar.

Si deseas obtener información para instalar y usar la biblioteca cliente de Resource Manager, consulta las bibliotecas cliente de Resource Manager.

IAM prueba los permisos de la cuenta de servicio que usas 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 Antes de comenzar.

Si deseas obtener información para instalar y usar la biblioteca cliente de Resource Manager, consulta las bibliotecas cliente de Resource Manager.

IAM prueba los permisos de la cuenta de servicio que usas 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 Antes de comenzar.

Si deseas obtener información para instalar y usar la biblioteca cliente de Resource Manager, consulta las bibliotecas cliente de Resource Manager.

IAM prueba los permisos de la cuenta de servicio que usas 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 una función de IAM que le permite obtener información sobre un proyecto, pero no borrarlo.

El método projects.testIamPermissions de la API de Resource Manager acepta una lista de permisos y prueba qué permisos tiene un miembro.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: El ID de tu proyecto de 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, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

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

¿Qué sigue?

Obtén más información para otorgar, cambiar y revocar el acceso a las principales.