Configurar o controlo de acesso

O controlo de acesso determina quem tem autorização para aceder a serviços e recursos num Google Cloud projeto. No App Engine, existem alguns exemplos de utilização separados para configurar o controlo de acesso:

  • Conceder aos membros da equipa acesso ao seu projeto do Google Cloud para que possam configurar serviços e implementar apps.

  • Conceder à sua app acesso aos serviços Google Cloud, como o Cloud Storage. Todos os serviços na nuvem requerem autenticação e autorização para cada chamada de API, incluindo chamadas da sua app do App Engine.

  • Conceder aos seus utilizadores acesso a recursos num Google Cloud projeto. Embora este exemplo de utilização não seja comum, podem existir casos em que a sua app precisa de pedir acesso a um recurso da nuvem em nome de um utilizador. Por exemplo, a sua app pode ter de aceder a dados que pertencem aos seus utilizadores.

Esta página oferece uma vista geral da configuração do controlo de acesso em cada exemplo de utilização.

Para informações gerais sobre como a Google Cloud Platform processa o controlo de acesso, consulte a vista geral da gestão de identidade e de acesso (IAM).

Conceder acesso a membros da equipa

Para dar a um programador acesso ao seu Google Cloud projeto, crie um ou ambos os seguintes elementos:

  • Uma conta de utilizador, que está associada a uma Conta Google e se destina a representar um indivíduo específico no seu projeto.

    Uma conta de utilizador pode ser usada para autenticar a partir das seguintes ferramentas:

    • Google Cloud consola
    • CLI do Google Cloud
    • IDEs e ferramentas de compilação que usam a CLI gcloud para testar e implementar apps do App Engine
  • Uma conta de serviço, que se destina a representar uma aplicação ou um processo em vez de uma pessoa. Use contas de serviço nos seus processos de criação, teste e implementação automatizados, especialmente se vários programadores puderem executar estes processos.

    Pode usar uma conta de serviço para fazer a autenticação a partir das seguintes ferramentas:

    • CLI gcloud
    • IDEs e ferramentas de compilação que usam ferramentas da CLI gcloud para testar e implementar apps do App Engine

Criar uma conta de utilizador

  1. Abra a página IAM na Google Cloud consola.

    Abra a página do IAM

  2. Clique em Selecionar um projeto, escolha um projeto e clique em Abrir.

  3. Clique em Adicionar.

  4. Introduza um endereço de email.

  5. Selecione funções que concedam acesso às funcionalidades do App Engine.

    Se o utilizador também precisar de acesso a outros serviços na nuvem, selecione funções que concedam acesso a outros serviços na nuvem.

  6. Clique em Guardar.

O utilizador já pode iniciar sessão na Google Cloud consola, bem como autorizar a CLI gcloud.

Também pode criar contas de utilizador a partir do gcloud, da API REST ou das bibliotecas de cliente.

Criar uma conta de serviço

  1. Abra a página Contas de serviço na Google Cloud consola.

    Abra a página Contas de serviço

  2. Selecione o projeto e clique em Abrir.

  3. Clique em Criar conta de serviço.

  4. Introduza um nome da conta de serviço. Este deve ser um nome intuitivo para apresentação.

  5. Clique em Criar.

  6. Selecione funções que concedam acesso às funcionalidades do App Engine.

    Se a conta de serviço também precisar de acesso a outros serviços Google Cloud, selecione funções que concedam acesso a outros serviços Google Cloud.

  7. Clique em Continuar.

  8. Opcionalmente, especifique as contas de utilizador que podem gerir a conta de serviço. Também pode especificar as contas de utilizador que podem usar a conta de serviço para aceder indiretamente a todos os recursos aos quais a conta de serviço tem acesso.

  9. Clique em Guardar.

    É apresentada uma lista das contas de serviço existentes.

  10. Opcionalmente, se precisar de usar a sua conta de serviço fora do Google Cloud, siga as instruções para criar uma chave de conta de serviço.

Passos seguintes

  • Se estiver a usar a conta de serviço nos processos de compilação e implementação automatizados, autorize a CLI gcloud com uma conta de serviço.
  • Se estiver a usar a conta de serviço com um IDE, siga as instruções fornecidas pelo IDE.
  • Se precisar de usar uma identidade exclusiva para uma versão da sua app do App Engine quando acede a outros Google Cloud serviços ou executa tarefas, pode especificar uma conta de serviço gerida pelo utilizador no App Engine.

Conceder à sua app acesso aos serviços na nuvem

Todas as chamadas a um serviço na nuvem têm de ser autenticadas e autorizadas, incluindo as chamadas de uma app do App Engine para outros serviços na nuvem, como o Cloud Storage.

Por predefinição, as chamadas da sua app do App Engine para serviços no mesmo projeto são autorizadas. Veja como funciona o fluxo predefinido:

  1. Para iniciar chamadas para um serviço na nuvem, a sua app cria um objeto de cliente, que contém as credenciais e outros dados de que a app precisa para interagir com o serviço. Se não especificar credenciais no construtor do cliente, o cliente procura credenciais no ambiente da app.

    Segue-se um exemplo de criação de 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)
    	}
    	defer storageClient.Close()
    
    	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

    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

    // 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;
    
    /**
     * Authenticate to a cloud client library using a service account implicitly.
     *
     * @param string $projectId The Google project ID.
     */
    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

    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

    # 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 predefinição, o ambiente da app contém credenciais da conta de serviço do App Engine predefinida.

    Esta conta de serviço é criada pela Google quando cria uma app do App Engine e recebe autorizações completas para gerir e usar todos os serviços na nuvem num projeto. Google Cloud

Pode substituir este fluxo predefinido através de qualquer uma das seguintes ações:

  • Defina a variável de ambiente GOOGLE_APPLICATION_CREDENTIALS. Se esta variável estiver definida, os serviços na nuvem usam as credenciais especificadas pela variável em vez da conta de serviço predefinida.

  • Especifique as credenciais quando instanciar o objeto Client para um serviço na nuvem. Por exemplo, se a sua app estiver a chamar um serviço na nuvem num projeto diferente, pode ter de transmitir credenciais manualmente.

Se definir a variável de ambiente GOOGLE_APPLICATION_CREDENTIALS ou transmitir credenciais no seu código, recomendamos que armazene as credenciais de uma das seguintes formas:

  • Armazene as suas credenciais num local seguro, como o Firestore no modo Datastore (Datastore), e obtenha-as no tempo de execução.
  • Mantenha as credenciais no seu código, mas encriptadas com um arquivo de chaves, como o Cloud KMS.

Para saber mais sobre as vantagens de cada abordagem, consulte o artigo Escolher uma solução de gestão de segredos.

Conceder aos utilizadores acesso aos recursos da nuvem

Se quiser que a sua app leia dados do utilizador de outro serviço Google, tem de configurar o OAuth 2.0 para aplicações de servidor Web. Por exemplo, se quiser extrair os dados de um utilizador do Google Drive e incorporá-los na sua app, use o OAuth 2.0 para aplicações de servidor Web para partilhar dados específicos, mantendo outros dados, como nomes de utilizador e palavras-passe, privados.

Delegação de autoridade ao nível do domínio do Google Workspace

Se tiver um domínio do Google Workspace (anteriormente G Suite), um administrador do domínio pode autorizar uma aplicação a aceder aos dados do utilizador em nome dos utilizadores no domínio do Google Workspace. Por exemplo, uma aplicação que usa a API Google Calendar para adicionar eventos aos calendários de todos os utilizadores num domínio do Google Workspace usaria uma conta de serviço para aceder à API Google Calendar em nome dos utilizadores.

A autorização de uma conta de serviço para aceder a dados em nome dos utilizadores num domínio é, por vezes, denominada "delegação de autoridade ao nível do domínio" numa conta de serviço. Esta opção continua a usar o OAuth 2.0 e requer que um administrador do domínio do Google Workspace autorize a autoridade ao nível do domínio para a conta de serviço.

Especificar uma conta de serviço

O App Engine permite-lhe usar dois tipos de contas de serviço: