Autorizzazione delle richieste a Compute Engine

Se utilizzi l'API Compute Engine per gestire le risorse Compute Engine, puoi autenticare le applicazioni nell'API ottenendo le credenziali da un account di servizio Compute Engine. Gli account di servizio consentono all'applicazione di eseguire l'autenticazione nell'API senza incorporare chiavi secret nel codice dell'applicazione.

Consigliamo gli account di servizio per la maggior parte delle situazioni in cui la tua applicazione deve autorizzare le richieste all'API. Tuttavia, se stai creando strumenti di sviluppo o amministrazione in cui gli utenti ti consentono di accedere alle loro risorse Google Cloud, utilizza un flusso di autorizzazione utente.

Per ottenere le credenziali da un account di servizio, utilizza una libreria client di Compute Engine e le credenziali predefinite dell'applicazione. Questi pacchetti consentono all'applicazione di ottenere le credenziali da una delle varie origini disponibili a seconda di dove viene eseguita l'applicazione.

Applicazioni eseguite su istanze Compute Engine

Se esegui le applicazioni sulle tue istanze Compute Engine, le credenziali predefinite dell'applicazione possono ottenere credenziali tramite gli account di servizio integrati. Per informazioni su come configurare le istanze con questi account di servizio integrati ed eseguire l'applicazione su un'istanza di Compute Engine, consulta l'articolo su come autenticare le applicazioni direttamente con i token di accesso.

Applicazioni che vengono eseguite al di fuori di Google Cloud

Se esegui applicazioni su sistemi esterni a Google Cloud, le tue applicazioni possono utilizzare le credenziali predefinite delle applicazioni per ottenere le credenziali dalle variabili di ambiente su questi sistemi. Per informazioni su come configurare le variabili di ambiente con le credenziali necessarie, consulta Autenticazione come account di servizio.

Applicazioni in fase di sviluppo

Durante lo sviluppo delle tue applicazioni in locale, puoi utilizzare il comando gcloud auth application-default login per ottenere temporaneamente le credenziali utente per l'applicazione. Questo comando consente di fornire le credenziali utente durante lo sviluppo del codice che normalmente userebbe un account di servizio, ma è necessario eseguire il codice in un ambiente di sviluppo locale. Le credenziali verranno applicate a tutte le chiamate API che utilizzano la libreria client delle credenziali predefinite dell'applicazione.

  1. Installa l'interfaccia a riga di comando gcloud sui tuoi sistemi di sviluppo.

  2. Fornisci le tue credenziali allo strumento utilizzando il comando gcloud auth application-default login.

L'applicazione ottiene le credenziali dallo strumento. Successivamente, puoi eseguire il deployment della tua applicazione in istanze Compute Engine in cui l'applicazione ottiene automaticamente le credenziali dagli account di servizio integrati o in altri sistemi con credenziali specificate nelle variabili di ambiente.

Esempio: autenticazione mediante credenziali predefinite dell'applicazione

In questo esempio viene utilizzata la libreria client di Python per eseguire l'autenticazione ed effettuare una richiesta all'API Cloud Storage per elencare i bucket in un progetto. L'esempio utilizza la procedura seguente:

  1. Ottieni le credenziali di autenticazione necessarie per l'API Cloud Storage e inizializza il servizio Cloud Storage con il metodo build() e le credenziali.
  2. Elenca i bucket in Cloud Storage.

Puoi eseguire questo esempio su un'istanza che ha accesso per gestire i bucket in Cloud Storage, sulla tua macchina locale dopo aver eseguito il comando gcloud beta auth application-default login o dopo aver impostato una variabile di ambiente per utilizzare le credenziali predefinite dell'applicazione.


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)

Ottenere l'accesso alle risorse Google Cloud di proprietà degli utenti della tua applicazione

Se stai creando strumenti di sviluppo o amministrazione per cui gli utenti ti consentono di accedere alle loro risorse Google Cloud, ottieni l'autorizzazione attraverso una procedura OAuth 2.0 di base. Questo processo richiede agli utenti di concedere l'accesso alle proprie informazioni tramite un flusso di autorizzazione dell'utente. Una volta che l'applicazione ha accesso, può visualizzare o modificare le risorse Compute Engine nel progetto di ogni utente.

Nella richiesta specifica un ambito di accesso che limiti l'accesso solo ai metodi e alle informazioni utente richiesti dall'applicazione. Ad esempio, specifica l'ambito compute.readonly quando l'applicazione visualizza le risorse Compute Engine esistenti, ma non crea o modifica risorse per gli utenti.

Compute Engine fornisce i seguenti ambiti:

Ambito Significato
https://www.googleapis.com/auth/compute Accesso in lettura/scrittura ai metodi di Compute Engine.
https://www.googleapis.com/auth/compute.readonly Accesso in sola lettura ai metodi di Compute Engine.
https://www.googleapis.com/auth/cloud-platform Visualizzare e gestire i dati nella maggior parte dei servizi Google Cloud nel progetto Google Cloud specificato.

Per un elenco completo dei servizi e degli ambiti richiesti su Google Cloud, vedi Ambiti OAuth 2.0 per le API Google.