Como configurar o controle de acesso

O Controle de acesso determina quem tem permissão para acessar serviços e recursos em um projeto do Google Cloud. No App Engine, há alguns casos de uso distintos para configurar o controle de acesso:

  • Conceder aos membros da equipe acesso ao projeto do Cloud para que possam configurar serviços e implantar aplicativos.

  • Como conceder acesso para um aplicativo aos serviços do Google Cloud, como o Cloud Storage. Todos os serviços do Cloud exigem autenticação e autorização para todas as chamadas de API, incluindo chamadas provenientes do aplicativo do App Engine.

  • Conceder aos seus usuários acesso aos recursos em um projeto do Cloud. Esse caso de uso não é comum, mas podem ocorrer situações em que o aplicativo precisa solicitar acesso a um recurso do Cloud em nome de um usuário. Por exemplo, se o aplicativo precisar acessar dados que pertençam aos usuários.

Nesta página, você encontrará uma visão geral da configuração do controle de acesso em cada caso de uso.

Saiba como o Google Cloud Platform gerencia o controle de acesso na visão geral do gerenciamento de identidade e acesso (IAM).

Como conceder acesso a membros da equipe

Para conceder a um desenvolvedor acesso ao projeto do Cloud, crie um ou ambos os itens a seguir:

  • Uma conta de usuário associada a uma Conta do Google e que servirá para representar uma pessoa específica no seu projeto.

    É possível utilizar a conta de usuário para fazer autenticação usando as seguintes ferramentas:

    • Console do Google Cloud
    • Ferramentas do SDK do Cloud, como a ferramenta de linha de comando gcloud
    • Ambientes de desenvolvimento integrados (IDEs, na sigla em inglês) e ferramentas de criação que usam as ferramentas do SDK do Cloud para testar e implantar aplicativos do App Engine
  • Uma conta de serviço que servirá para representar um aplicativo ou um processo, em vez de uma pessoa. Use contas de serviço nos processos automatizados de criação, teste e implantação, principalmente se esses processos podem ser executados por vários desenvolvedores.

    É possível utilizar a conta de serviço para fazer autenticação usando as seguintes ferramentas:

    • Ferramentas do SDK do Cloud, como a ferramenta de linha de comando gcloud
    • Ambientes de desenvolvimento integrados (IDEs, na sigla em inglês) e ferramentas de criação que usam as ferramentas do SDK do Cloud para testar e implantar aplicativos do App Engine

Como criar uma conta de usuário

  1. Abra a página do IAM no Console do Cloud.

    Abrir a página do IAM

  2. Clique em Selecionar um projeto e em Abrir.

  3. Clique em Adicionar.

  4. Insira um endereço de e-mail.

  5. Selecione os papéis que concedem acesso aos recursos do Google App Engine.

    Se o usuário também precisar de acesso a outros serviços do Cloud, selecione os papéis que concedem acesso a esses serviços.

  6. Clique em Save.

Agora o usuário pode fazer login no Console do Google Cloud e autorizar as ferramentas do SDK do Cloud.

Também é possível criar contas de usuário com a gcloud, API REST ou bibliotecas de cliente.

Criar uma conta de serviço

  1. Abra a página Contas de serviço no Console do Cloud.

    Abrir a página "Contas de serviço"

  2. Selecione o projeto e clique em Abrir.

  3. Clique em Criar conta de serviço.

  4. Insira um nome para conta de serviço (um nome de exibição fácil).

  5. Clique em Criar

  6. Selecione os papéis que concedem acesso aos recursos do Google App Engine.

    Se a conta de serviço também precisar de acesso a outros serviços do Cloud, selecione os papéis que concedem acesso a esses serviços.

  7. Clique em Continuar.

  8. Se você preferir, especifique as contas de usuário que podem gerenciar a conta de serviço. Além disso, é possível especificar as contas de usuário que podem usar a conta de serviço para acessar indiretamente todos os recursos a que ela tem acesso.

  9. Clique em +Criar chave e siga as instruções para fazer o download de uma chave JSON. Armazene o arquivo em segurança porque não será possível recuperar a chave caso ela seja perdida.

  10. Clique em Concluído.

A seguir

  • Se você estiver usando a conta de serviço nos processos automatizados de criação e implantação, utilize-a para autorizar o SDK do Cloud.
  • Se você estiver usando a conta de serviço com um IDE, siga as instruções fornecidas pelo IDE.

Como conceder acesso para um aplicativo aos serviços do Cloud

É necessário que todas as chamadas para um serviço do Cloud sejam autenticadas e autorizadas, incluindo aquelas provenientes de um aplicativo do App Engine para outros serviços do Cloud, como o Cloud Storage.

Por padrão, as chamadas de um aplicativo do App Engine para serviços no mesmo projeto são autorizadas. Veja como o fluxo padrão funciona:

  1. Para iniciar chamadas para um serviço do Cloud, o aplicativo cria um objeto cliente, que contém as credenciais e outros dados de que o aplicativo precisa para interagir com o serviço. Se você não especificar as credenciais no construtor do cliente, o cliente procurará por elas no ambiente do aplicativo.

    Veja um exemplo de como criar um cliente para o Cloud Storage:

    Go

    
    // implicit uses Application Default Credentials to authenticate.
    func implicit() {
    	ctx := context.Background()
    
    	// For API packages whose import path is starting with "cloud.google.com/go",
    	// such as cloud.google.com/go/storage in this case, if there are no credentials
    	// provided, the client library will look for credentials in the environment.
    	storageClient, err := storage.NewClient(ctx)
    	if err != nil {
    		log.Fatal(err)
    	}
    
    	it := storageClient.Buckets(ctx, "project-id")
    	for {
    		bucketAttrs, err := it.Next()
    		if err == iterator.Done {
    			break
    		}
    		if err != nil {
    			log.Fatal(err)
    		}
    		fmt.Println(bucketAttrs.Name)
    	}
    
    	// For packages whose import path is starting with "google.golang.org/api",
    	// such as google.golang.org/api/cloudkms/v1, use NewService to create the client.
    	kmsService, err := cloudkms.NewService(ctx)
    	if err != nil {
    		log.Fatal(err)
    	}
    
    	_ = kmsService
    }
    

    Java

    Ver no GitHub (em inglês) Feedback
    static void authImplicit() {
      // If you don't specify credentials when constructing the client, the client library will
      // look for credentials via the environment variable GOOGLE_APPLICATION_CREDENTIALS.
      Storage storage = StorageOptions.getDefaultInstance().getService();
    
      System.out.println("Buckets:");
      Page<Bucket> buckets = storage.list();
      for (Bucket bucket : buckets.iterateAll()) {
        System.out.println(bucket.toString());
      }
    }

    Node.js

    Ver no GitHub (em inglês) Feedback
    // Imports the Google Cloud client library.
    const {Storage} = require('@google-cloud/storage');
    
    // Instantiates a client. If you don't specify credentials when constructing
    // the client, the client library will look for credentials in the
    // environment.
    const storage = new Storage();
    // Makes an authenticated API request.
    async function listBuckets() {
      try {
        const results = await storage.getBuckets();
    
        const [buckets] = results;
    
        console.log('Buckets:');
        buckets.forEach((bucket) => {
          console.log(bucket.name);
        });
      } catch (err) {
        console.error('ERROR:', err);
      }
    }
    listBuckets();

    PHP

    // Imports the Cloud Storage client library.
    use Google\Cloud\Storage\StorageClient;
    
    function auth_cloud_implicit($projectId)
    {
        $config = [
            'projectId' => $projectId,
        ];
    
        # If you don't specify credentials when constructing the client, the
        # client library will look for credentials in the environment.
        $storage = new StorageClient($config);
    
        # Make an authenticated API request (listing storage buckets)
        foreach ($storage->buckets() as $bucket) {
            printf('Bucket: %s' . PHP_EOL, $bucket->name());
        }
    }

    Python

    Ver no GitHub (em inglês) Feedback
    def implicit():
        from google.cloud import storage
    
        # If you don't specify credentials when constructing the client, the
        # client library will look for credentials in the environment.
        storage_client = storage.Client()
    
        # Make an authenticated API request
        buckets = list(storage_client.list_buckets())
        print(buckets)

    Ruby

    Ver no GitHub (em inglês) Feedback
    # project_id = "Your Google Cloud project ID"
    
    require "google/cloud/storage"
    
    # If you don't specify credentials when constructing the client, the client
    # library will look for credentials in the environment.
    storage = Google::Cloud::Storage.new project: project_id
    
    # Make an authenticated API request
    storage.buckets.each do |bucket|
      puts bucket.name
    end
  2. Por padrão, o ambiente do aplicativo contém as credenciais da conta de serviço padrão do App Engine (link em inglês).

    Essa conta de serviço é criada pelo Google quando você cria um aplicativo do App Engine e recebe permissões totais para gerenciar e usar todos os serviços do Cloud em um projeto do GCP.

Para modificar esse fluxo padrão, realize qualquer um dos seguintes procedimentos:

  • Defina a variável de ambiente GOOGLE_APPLICATION_CREDENTIALS. Se essa variável for definida, os serviços do Cloud usarão as credenciais especificadas por ela, em vez daquelas da conta de serviço padrão.

  • Especifique as credenciais ao criar uma instância do objeto Client para um serviço do Cloud. Por exemplo, se o aplicativo realiza chamadas para um serviço do Google Cloud em um projeto diferente, talvez seja necessário transmitir as credenciais manualmente.

Se você definir a variável de ambiente GOOGLE_APPLICATION_CREDENTIALS ou transmitir credenciais no código, recomendamos armazenar as credenciais de uma das seguintes maneiras:

  • Armazene as credenciais em um local seguro, como o Datastore, e recupere-as no ambiente de execução.
  • Mantenha as credenciais no código, mas criptografe-as com um keystore, como o Cloud KMS.

Saiba mais sobre as vantagens de cada abordagem em Como escolher uma solução de gerenciamento de secrets.

Como conceder para usuários acesso aos recursos do Cloud

Se você quiser que seu aplicativo leia dados de usuários provenientes outro serviço do Google, será necessário configurar o OAuth 2.0 for Web Server Applications (em inglês). Por exemplo, se você quiser extrair os dados de um usuário do Google Drive e trazê-los para seu aplicativo, use o OAuth 2.0 for Web Server Applications para compartilhar dados específicos sem violar a privacidade de outras informações, como nomes de usuário e senhas.

Delegação de autoridade em todo o domínio do Google Workspace

Se você tiver um domínio do Google Workspace (antigo G Suite), um administrador de domínio poderá autorizar um aplicativo a acessar dados de usuários no nome deles no domínio. Por exemplo, um aplicativo que usa a API Google Calendar para adicionar eventos às agendas de todos os usuários de um domínio do Google Workspace usa uma conta de serviço para acessar essa API em nome dos usuários.

Autorizar uma conta de serviço a acessar dados em nome de usuários em um domínio é, às vezes, denominado "delegar autoridade em todo o domínio" a uma conta de serviço. Esse procedimento também usa o OAuth 2.0 e exige que um administrador do domínio do Google Workspace autorize a autoridade em todo o domínio para a conta de serviço.