Configurazione del controllo dell'accesso

Il controllo dell'accesso determina chi è autorizzato ad accedere a servizi e risorse in un progetto Google Cloud. In App Engine esistono alcuni casi d'uso distinti per configurare il controllo dell'accesso:

  • Concedere ai membri del team l'accesso al tuo progetto Google Cloud affinché possono configurare servizi ed eseguire il deployment di app.

  • Concedere all'app l'accesso ai servizi Google Cloud, ad esempio Cloud spazio di archiviazione. Tutti i servizi Cloud richiedono autenticazione e autorizzazione chiamata API, incluse le chiamate dall'app App Engine.

  • Concedere agli utenti l'accesso alle risorse in un progetto Google Cloud. Sebbene questo caso d'uso non sia comune, potrebbero verificarsi casi in cui la tua app necessita di per richiedere l'accesso a una risorsa Cloud per conto di un utente. Ad esempio, L'app potrebbe dover accedere a dati appartenenti ai tuoi utenti.

Questa pagina fornisce una panoramica della configurazione del controllo dell'accesso in ciascun caso d'uso.

Per informazioni di base su come Google Cloud Platform gestisce il controllo dell'accesso, consulta la panoramica di Identity and Access Management (IAM).

Concessione dell'accesso ai membri del team

Per concedere a uno sviluppatore l'accesso al tuo progetto Google Cloud, creane uno o entrambe le seguenti opzioni:

  • Un account utente, associato a un Account Google e ha lo scopo di rappresentare una persona specifica del tuo progetto.

    Un account utente può essere utilizzato per l'autenticazione dai seguenti strumenti:

    • Console Google Cloud
    • Google Cloud CLI
    • IDE e strumenti di creazione che utilizzano gcloud CLI per i test e il deployment App di App Engine
  • Un account di servizio destinato a rappresentare un un'applicazione o un processo anziché una persona. Utilizza gli account di servizio nelle processi di compilazione, test e deployment automatizzati, soprattutto gli sviluppatori possono eseguire questi processi.

    Un account di servizio può essere utilizzato per l'autenticazione dai seguenti strumenti:

Creazione di un account utente

  1. Apri la pagina IAM nella console Google Cloud.

    Aperto pagina IAM

  2. Fai clic su Seleziona un progetto, scegli un progetto e fai clic su Apri.

  3. Fai clic su Aggiungi.

  4. Inserisci un indirizzo email.

  5. Seleziona ruoli che concedono l'accesso ad App Engine funzionalità.

    Se l'utente ha bisogno di accedere anche ad altri servizi Cloud, seleziona i ruoli che e concedere l'accesso ad altri servizi Cloud.

  6. Fai clic su Salva.

L'utente può ora accedere alla console Google Cloud e autorizzare gcloud CLI.

Puoi anche creare account utente da gcloud, l'API REST o librerie.

Creazione di un account di servizio

  1. Apri la pagina Account di servizio nella console Google Cloud.

    Apri Pagina Account di servizio

  2. Seleziona il progetto e fai clic su Apri.

  3. Fai clic su Crea account di servizio.

  4. Inserisci un nome per l'account di servizio. Deve essere un nome facile da usare per la visualizzazione.

  5. Fai clic su Crea.

  6. Seleziona ruoli che concedono l'accesso ad App Engine funzionalità.

    Se l'account di servizio deve accedere anche ad altri servizi Cloud, seleziona che concedono l'accesso ad altri servizi Cloud.

  7. Fai clic su Continua.

  8. (Facoltativo) Specifica gli account utente che possono gestire l'account di servizio. Puoi anche specificare gli account utente che possono utilizzare l'account di servizio per accedere indirettamente a tutte le risorse a cui ha accesso l'account di servizio.

  9. Fai clic su Salva.

    Viene visualizzato un elenco degli account di servizio esistenti.

  10. Facoltativamente, se devi utilizzare l'account di servizio al di fuori Google Cloud, segui le istruzioni per crea una chiave dell'account di servizio.

Passaggi successivi

Concessione dell'accesso alla tua app ai servizi Cloud

Ogni chiamata a un servizio Cloud deve essere autenticata e autorizzata, ad esempio: da un'app App Engine ad altri servizi Cloud come Cloud spazio di archiviazione.

Per impostazione predefinita, le chiamate dalla tua app App Engine ai servizi nella stessa progetto sono autorizzati. Ecco come funziona il flusso predefinito:

  1. Per avviare le chiamate a un servizio Cloud, la tua app crea un oggetto client, contenente le credenziali e altri dati con cui l'app deve interagire il servizio. Se non specifichi le credenziali nel costruttore del client, il client cerca le credenziali nell'ambiente dell'app.

    Ecco un esempio di creazione di un client per 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. Per impostazione predefinita, l'ambiente dell'app contiene le credenziali predefinita Account di servizio App Engine.

    Questo account di servizio viene creato da Google quando crei un'app Engine e dispone di autorizzazioni complete per gestire e utilizzare tutti i servizi Cloud di un progetto Google Cloud.

Puoi eseguire l'override di questo flusso predefinito in uno dei seguenti modi:

  • Imposta la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS. Se questo impostata, i servizi Cloud usano le credenziali specificate dalla variabile anziché l'account di servizio predefinito.

  • Specifica le credenziali quando crei un'istanza dell'oggetto Client per un servizio cloud. Ad esempio, se la tua app chiama un servizio Cloud in un progetto diverso, potresti dover passare credenziali manualmente.

Se imposti la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS o passi credenziali nel codice, ti consigliamo di memorizzarle in dei seguenti modi:

  • Archivia le tue credenziali in un luogo sicuro, ad esempio Firestore in modalità Datastore (Datastore) e recuperali in fase di runtime.
  • Mantieni le credenziali nel codice, ma criptale con un archivio chiavi, come di Cloud KMS.

Per conoscere i vantaggi di ciascun approccio, vedi Scelta di una soluzione di gestione dei secret.

Concessione dell'accesso alle risorse Cloud agli utenti

Se vuoi che la tua app legga i dati utente da un altro servizio Google, dovrai per configurare OAuth 2.0 per il server web Applicazioni. Ad esempio, se vuoi estrarre l'input di un utente i dati di Google Drive e trasferirli nella tua app, usa OAuth 2.0 per il server web Applicazioni per condividere dati specifici conservando altri dati, come i nomi utente e password, private.

Delega dell'autorità a livello di dominio Google Workspace

Se hai un dominio Google Workspace (precedentemente noto come G Suite), un amministratore di il dominio può autorizzare un'applicazione ad accedere ai dati utente per conto degli utenti. nel dominio Google Workspace. Ad esempio, un'applicazione che utilizza l'API Google Calendar per aggiungere eventi ai calendari di tutti gli utenti in un Google Workspace userebbe un account di servizio per accedere ai API Calendar per conto degli utenti.

L'autorizzazione di un account di servizio ad accedere ai dati per conto degli utenti di un dominio talvolta definita "autorità delegata a livello di dominio" a un servizio . Questa operazione utilizza ancora OAuth 2.0 e richiede un dominio Google Workspace amministratore di autorizzare a livello di dominio l'autorità a utilizzare il servizio Google Cloud.

Specifica di un account di servizio

App Engine consente di utilizzare due tipi di account di servizio:

  • Account di servizio per versione: un account di servizio configurato come identità. per una versione specifica del servizio di cui hai eseguito il deployment. Quando esegui il deployment di un modello una versione più recente o una nuova versione, puoi specificare un account di servizio che funga da e l'identità della versione. Ad esempio, se una versione richiede autorizzazioni diverse dall'account di servizio predefinito a livello di app, puoi assegnare un account di servizio specifico di quella versione. Per ulteriori informazioni, vedi Configura Servizio App Engine Google Cloud.