Como autorizar solicitações para o Compute Engine

Ao utilizar a API Compute Engine para gerenciar recursos do Compute Engine, é possível autenticar os aplicativos na API. Para fazer isso, basta receber credenciais de uma conta de serviço do Compute Engine. Esse tipo de conta permite que o aplicativo seja autenticado na API sem incorporar chaves secretas ao código do aplicativo.

Recomendamos contas de serviço para a maioria das situações em que o aplicativo precisa autorizar solicitações à API. Mas caso você esteja criando ferramentas de desenvolvimento ou administração em que os usuários concedam acesso aos recursos do Google Cloud, use um fluxo de autorização do usuário.

Para receber credenciais de uma conta de serviço, use uma biblioteca de cliente do Compute Engine e credenciais padrão do aplicativo. Esses pacotes permitem ao aplicativo receber credenciais de uma das diversas origens disponíveis, dependendo do local em que ele é executado.

Aplicativos executados em instâncias do Compute Engine

Ao executar aplicativos nas instâncias do Compute Engine, as credenciais padrão do aplicativo recebem credenciais por contas de serviço integradas. Para informações sobre como configurar as instâncias com essas contas de serviço integradas e executar o aplicativo em uma instância do Compute Engine, consulte Como autenticar aplicativos diretamente com tokens de acesso.

Aplicativos executados fora do Google Cloud

Para executar aplicativos em sistemas fora do Google Cloud Platform, os aplicativos podem usar o credenciais padrão do aplicativo para receber as credenciais das variáveis de ambiente nesses sistemas. Para informações sobre como configurar as variáveis de ambiente com as credenciais necessárias, consulte Como autenticar como uma conta de serviço.

Aplicativos em desenvolvimento

Ao desenvolver aplicativos localmente, é possível usar o comando gcloud auth application-default login para receber temporariamente as credenciais de usuário do aplicativo. Esse comando ajuda a fornecer credenciais de usuário quando você está desenvolvendo um código que normalmente usaria uma conta de serviço, mas você precisa executar o código em um ambiente de desenvolvimento local. As credenciais serão aplicadas a todas as chamadas de API que usem a biblioteca de clientes do Application Default Credentials.

  1. Instale a CLI gcloud nos seus sistemas de desenvolvimento.

  2. Forneça suas credenciais à ferramenta usando o comando gcloud auth application-default login.

As credenciais são enviadas da ferramenta para o aplicativo. Em seguida, ele pode ser implantado nas instâncias do Compute Engine em que as o aplicativo consegue automaticamente as credenciais aplicativo com as contas de serviço integradas ou em outros sistemas com credenciais especificadas nas respectivas variáveis de ambiente.

Exemplo: como autenticar usando Application Default Credentials

Este exemplo usa a biblioteca de cliente Python para autenticar e faz uma solicitação à API Cloud Storage para listar os buckets em um projeto. Este é o procedimento seguido:

  1. Consiga as credenciais de autenticação necessárias para a API do Cloud Storage e inicie o serviço do produto com o método build() e as credenciais.
  2. Liste os buckets no Cloud Storage.

Execute esta amostra em uma instância que tenha acesso para gerenciar buckets no Cloud Storage, na sua máquina local após executar o comando gcloud beta auth application-default login ou após a configurar uma variável de ambiente que use as credenciais padrão do aplicativo.


import argparse

import googleapiclient.discovery

def create_service():
    # Construct the service object for interacting with the Cloud Storage API -
    # the 'storage' service, at version 'v1'.
    # Authentication is provided by application default credentials.
    # When running locally, these are available after running
    # `gcloud auth application-default login`. When running on Compute
    # Engine, these are available from the environment.
    return googleapiclient.discovery.build('storage', 'v1')

def list_buckets(service, project_id):
    buckets = service.buckets().list(project=project_id).execute()
    return buckets

def main(project_id):
    service = create_service()
    buckets = list_buckets(service, project_id)
    print(buckets)

if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description=__doc__,
        formatter_class=argparse.RawDescriptionHelpFormatter)
    parser.add_argument('project_id', help='Your Google Cloud Project ID.')

    args = parser.parse_args()

    main(args.project_id)

Acessar recursos do Google Cloud de usuários do seu aplicativo

Se você está promovendo o desenvolvimento ou o uso de ferramentas de administração em que usuários concedem acesso aos respectivos recursos do Google Cloud, receba a autorização por um processo básico do OAuth 2.0. Esse processo requer que seus usuários concedam acesso a você às informações deles por meio de um fluxo de autorização de usuários. Quando o aplicativo recebe acesso, os recursos do Compute Engine no projeto do usuário são visualizados ou modificados nesse projeto.

Na solicitação, especifique um escopo que limite o acesso apenas a métodos e informações do usuário exigidos pelo aplicativo. Por exemplo, especifique o escopo compute.readonly quando o aplicativo visualizar os recursos do Compute Engine, mas não crie ou modifique nenhum recurso para os usuários.

O Compute Engine fornece os seguintes escopos:

Scope Significado
https://www.googleapis.com/auth/compute Acesso de leitura/gravação aos métodos do Google Compute Engine.
https://www.googleapis.com/auth/compute.readonly Acesso somente leitura aos métodos do Compute Engine.
https://www.googleapis.com/auth/cloud-platform Visualização e gerenciamento dos dados na maioria dos serviços do Google Cloud no projeto especificado.

Para ver uma lista completa de serviços e escopos necessários no Google Cloud, consulte Escopos do OAuth 2.0 para APIs do Google.