Teste as autorizações para interfaces do utilizador personalizadas

A maioria dos Trusted Cloud by S3NS recursos expõe o método testIamPermissions(), que lhe permite verificar programaticamente se o autor da chamada autenticado atualmente recebeu uma ou mais autorizações de IAM específicas no recurso. O método testIamPermissions() usa um identificador de recurso e um conjunto de autorizações como parâmetros de entrada e devolve o conjunto de autorizações que o autor da chamada tem permissão para usar.

Pode usar o método testIamPermissions() para determinar se um utilizador deve ter acesso a uma ferramenta administrativa numa aplicação Web. Por exemplo, pode usar este método para decidir, com base nas autorizações do utilizador, se deve apresentar informações detalhadas sobre um Trusted Cloud recurso.

Por exemplo, para determinar se o utilizador autenticado atualmente tem autorização para eliminar um projeto, chame o método projects.testIamPermissions() fornecendo o ID do projeto (como foo-project) e a autorização resourcemanager.projects.delete como parâmetros de entrada. Se o autor da chamada tiver recebido a autorização resourcemanager.projects.delete, esta é apresentada no corpo da resposta. Se o autor da chamada não tiver esta autorização, o corpo da resposta não apresenta autorizações.

O método testIamPermissions() destina-se a interfaces gráficas do utilizador (GUIs) de terceiros que precisam de apresentar recursos Trusted Cloud com base no que o utilizador autenticado tem autorização para ver. Por exemplo, a Trusted Cloud consola usa internamente o método testIamPermissions() para determinar que recursos e funcionalidades estão visíveis para si após a autenticação. Normalmente, são concedidas autorizações diferentes a utilizadores diferentes, e a Trusted Cloud consola oculta ou expõe itens em conformidade.

Antes de começar

Funções necessárias

Não é necessária nenhuma função do IAM para testar autorizações.

Como testar as autorizações

Este exemplo mostra como testar as autorizações resourcemanager.projects.get e resourcemanager.projects.delete para um Trusted Cloud projeto. Para testar as autorizações de outros Trusted Cloud recursos, use o métodotestIamPermissions()exposto por cada recurso. Por exemplo, pode testar as autorizações de IAM para um contentor do Cloud Storage.

C++

Para saber como instalar e usar a biblioteca cliente para a IAM, consulte o artigo Bibliotecas cliente da IAM. Para mais informações, consulte a documentação de referência da API C++ IAM.

Para se autenticar no IAM, configure as Credenciais padrão da aplicação. Para mais informações, consulte a secção Antes de começar.

Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN environment 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 se autenticar no Resource Manager, configure as Credenciais padrão da aplicação. Para mais informações, consulte a secção Antes de começar.

Para saber como instalar e usar a biblioteca de cliente do Resource Manager, consulte as bibliotecas de cliente do Resource Manager.

O IAM testa as autorizações da conta de serviço que está a usar para gerar credenciais.


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 se autenticar no Resource Manager, configure as Credenciais padrão da aplicação. Para mais informações, consulte a secção Antes de começar.

Para saber como instalar e usar a biblioteca de cliente do Resource Manager, consulte as bibliotecas de cliente do Resource Manager.

O IAM testa as autorizações da conta de serviço que está a usar para gerar credenciais.

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 se autenticar no Resource Manager, configure as Credenciais padrão da aplicação. Para mais informações, consulte a secção Antes de começar.

Para saber como instalar e usar a biblioteca de cliente do Resource Manager, consulte as bibliotecas de cliente do Resource Manager.

O IAM testa as autorizações da conta de serviço que está a usar para gerar credenciais.

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

Neste exemplo, o utilizador tem uma função de IAM que lhe permite obter informações sobre um projeto, mas não eliminar projetos.

O método projects.testIamPermissions da API Resource Manager aceita uma lista de autorizações e testa quais as autorizações que um principal tem.

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • PROJECT_ID: O ID do seu Trusted Cloud projeto. Os IDs dos projetos são strings alfanuméricas, como my-project.

Método HTTP e URL:

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

Corpo JSON do pedido:

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

Para enviar o seu pedido, expanda uma destas opções:

Deve receber uma resposta JSON semelhante à seguinte:

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

O que se segue?

Saiba como conceder, alterar e revogar o acesso a responsáveis.