Panoramica dell'autenticazione

Questa pagina fornisce una panoramica dell'autenticazione nella piattaforma Google Cloud per gli sviluppatori di applicazioni. Descrive entità, credenziali delle applicazioni e vari modi per autenticare le chiamate alle API Google Cloud.

Introduzione

Il controllo degli accessi per le API Google Cloud comprende autenticazione, autorizzazione e controllo. L'autenticazione determina chi sei, l'autorizzazione determina cosa puoi fare e l'audit log registra ciò che hai fatto.

Questa pagina è incentrata sull'autenticazione. Per l'autorizzazione, consulta la pagina relativa a Identity and Access Management (IAM). Per il controllo, consulta Audit log di Cloud.

Provalo

Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $ di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.

Inizia gratuitamente

Entità

Un'entità è un'entità, nota anche come identità, a cui può essere concesso l'accesso a una risorsa. Le API Google Cloud supportano due tipi di entità: account utente e account di servizio:

  • Gli account utente sono gestiti come Account Google e rappresentano uno sviluppatore, un amministratore o qualsiasi altra persona che interagisce con Google Cloud. Sono destinati a scenari in cui la tua applicazione deve accedere alle risorse per conto di un utente umano. Per ulteriori informazioni, consulta Autenticazione come utente finale.

  • Gli account di servizio sono gestiti da IAM e rappresentano utenti non umani. Sono destinati a scenari in cui l'applicazione deve accedere alle risorse o eseguire azioni in modo indipendente, ad esempio eseguire app di App Engine o interagire con le istanze di Compute Engine. Per ulteriori informazioni, consulta Autenticazione come account di servizio.

Per ulteriori informazioni su ciascun tipo di account, consulta la panoramica IAM.

Applicazioni

Le API Google Cloud accettano solo richieste da applicazioni registrate, ovvero applicazioni identificabili in modo univoco che presentano credenziali al momento della richiesta. Le richieste provenienti da applicazioni anonime vengono rifiutate.

Le credenziali dell'applicazione forniscono le informazioni richieste riguardo al chiamante che effettua una richiesta a un'API Google Cloud. I tipi di credenziali validi includono chiavi API, credenziali client OAuth 2.0 o chiavi di account di servizio. Gli account di servizio sono univoci poiché possono essere utilizzati sia come credenziale dell'applicazione che come entità principale. Per ulteriori informazioni, consulta Informazioni sugli account di servizio.

La presentazione di credenziali delle applicazioni nelle richieste alle API Google Cloud identifica il chiamante solo come applicazione registrata; se è richiesta l'autenticazione, il client deve anche identificare l'entità che esegue l'applicazione, ad esempio un account utente o un account di servizio. Questo processo è descritto nella sezione riportata di seguito.

Strategie di autenticazione

Le API Google Cloud utilizzano il protocollo OAuth 2.0 per l'autenticazione sia degli account utente sia degli account di servizio. Il processo di autenticazione OAuth 2.0 determina sia l'entità che l'applicazione.

La maggior parte delle API Google Cloud supporta anche l'accesso anonimo ai dati pubblici utilizzando chiavi API. Tuttavia, le chiavi API identificano solo l'applicazione, non l'entità. Quando utilizzi chiavi API, l'entità deve essere autenticata con altri mezzi.

Le API Google Cloud supportano più flussi di autenticazione per diversi ambienti di runtime. Per un'esperienza ottimale con gli sviluppatori, consigliamo di utilizzare le librerie client di Google Cloud con le API di Google Cloud. Utilizzano le librerie di autenticazione fornite da Google che supportano diversi flussi di autenticazione e ambienti di runtime.

Per creare un'applicazione utilizzando le API di Google Cloud, segui questi passaggi generali:

  • Scegliere e utilizzare le librerie client di Google Cloud fornite
  • Determina il flusso di autenticazione corretto per l'applicazione
  • Trova o crea le credenziali per l'applicazione necessarie
  • Passa le credenziali dell'applicazione alle librerie client all'avvio dell'applicazione, possibilmente tramite Credenziali predefinite dell'applicazione (ADC)

Dovresti scegliere le credenziali dell'applicazione in base alle esigenze e all'ambiente di esecuzione. La tabella seguente offre alcuni consigli generali per i requisiti comuni:

Requisito Suggerimento Commento
Accesso ai dati pubblici in modo anonimo Chiave API Una chiave API identifica l'applicazione solo e non richiede l'autenticazione utente. È sufficiente per accedere ai dati pubblici.
Accesso ai dati privati per conto di un utente finale Client OAuth 2.0 Un client OAuth 2.0 identifica l'applicazione e consente agli utenti finali di autenticarla con Google. Consente alla tua applicazione di accedere alle API Google Cloud per conto dell'utente finale.
Accesso ai dati privati per conto di un account di servizio all'interno di ambienti Google Cloud Account di servizio fornito dall'ambiente Se la tua applicazione viene eseguita in un ambiente Google Cloud, come Compute Engine, App Engine, GKE, Cloud Run o Cloud Functions, l'applicazione dovrebbe utilizzare l'account di servizio fornito dall'ambiente.

Le librerie client di Google Cloud troveranno e utilizzeranno automaticamente le credenziali dell'account di servizio.
Accesso ai dati privati per conto di un account di servizio al di fuori degli ambienti Google Cloud Chiave account di servizio Devi creare un account di servizio e scaricare la relativa chiave privata come file JSON. Devi passare il file alle librerie client di Google Cloud in modo che possano generare le credenziali dell'account di servizio in fase di esecuzione.

Le librerie client di Google Cloud troveranno e utilizzeranno automaticamente le credenziali dell'account di servizio utilizzando la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS.

Esempi

I seguenti esempi di codice mostrano come utilizzare strategie di autenticazione diverse utilizzando la versione del linguaggio Go della libreria client Pub/Sub. L'esperienza di sviluppo per altri linguaggi è quasi identica.

Chiavi dell'account di servizio

import (
	"context"
	"fmt"

	"cloud.google.com/go/pubsub"
)

// serviceAccount shows how to use a service account to authenticate.
func serviceAccount() error {
	// Download service account key per https://cloud.google.com/docs/authentication/production.
	// Set environment variable GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account-key.json
	// This environment variable will be automatically picked up by the client.
	client, err := pubsub.NewClient(context.Background(), "your-project-id")
	if err != nil {
		return fmt.Errorf("pubsub.NewClient: %v", err)
	}
	defer client.Close()
	// Use the authenticated client.
	_ = client

	return nil
}
Per ulteriori informazioni, consulta la pagina Autenticazione come account di servizio.

Account di servizio dell'ambiente

import (
	"context"
	"fmt"

	"cloud.google.com/go/pubsub"
)

// envServiceAccount shows how to use an environment-provided service account to authenticate.
func envServiceAccount() error {
	// If your application runs in a GCP environment, such as Compute Engine,
	// you don't need to provide any application credentials. The client
	// library will find the credentials by itself.
	client, err := pubsub.NewClient(context.Background(), "your-project-id")
	if err != nil {
		return fmt.Errorf("pubsub.NewClient: %v", err)
	}
	defer client.Close()
	// Use the authenticated client.
	_ = client

	return nil
}
Per ulteriori informazioni, consulta la pagina Autenticazione come account di servizio.

Client OAuth 2.0

import (
	"context"
	"fmt"
	"os"

	"cloud.google.com/go/pubsub"
	"golang.org/x/oauth2"
	"golang.org/x/oauth2/google"
	"google.golang.org/api/option"
)

// oauthClient shows how to use an OAuth client ID to authenticate as an end-user.
func oauthClient() error {
	ctx := context.Background()

	// Please make sure the redirect URL is the same as the one you specified when you
	// created the client ID.
	redirectURL := os.Getenv("OAUTH2_CALLBACK")
	if redirectURL == "" {
		redirectURL = "your redirect url"
	}
	config := &oauth2.Config{
		ClientID:     "your-client-id",
		ClientSecret: "your-client-secret",
		RedirectURL:  redirectURL,
		Scopes:       []string{"email", "profile"},
		Endpoint:     google.Endpoint,
	}

	// Dummy authorization flow to read auth code from stdin.
	authURL := config.AuthCodeURL("your state")
	fmt.Printf("Follow the link in your browser to obtain auth code: %s", authURL)

	// Read the authentication code from the command line
	var code string
	fmt.Scanln(&code)

	// Exchange auth code for OAuth token.
	token, err := config.Exchange(ctx, code)
	if err != nil {
		return fmt.Errorf("config.Exchange: %v", err)
	}
	client, err := pubsub.NewClient(ctx, "your-project-id", option.WithTokenSource(config.TokenSource(ctx, token)))
	if err != nil {
		return fmt.Errorf("pubsub.NewClient: %v", err)
	}
	defer client.Close()

	// Use the authenticated client.
	_ = client

	return nil
}
Per ulteriori informazioni, consulta la pagina Autenticazione come utente finale.

Chiavi API

import (
	"context"
	"fmt"

	"cloud.google.com/go/pubsub"
	"google.golang.org/api/option"
)

// apiKey shows how to use an API key to authenticate.
func apiKey() error {
	client, err := pubsub.NewClient(context.Background(), "your-project-id", option.WithAPIKey("api-key-string"))
	if err != nil {
		return fmt.Errorf("pubsub.NewClient: %v", err)
	}
	defer client.Close()
	// Use the authenticated client.
	_ = client

	return nil
}
Per ulteriori informazioni, consulta l'articolo sull'utilizzo delle chiavi API.

Passaggi successivi