Autenticare i carichi di lavoro utilizzando account di servizio

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

In questa pagina viene descritto come utilizzare gli account di servizio per abilitare le app in esecuzione sulle istanze di macchine virtuali (VM) per l'autenticazione nelle API Google Cloud e autorizzare l'accesso alle risorse.

Per ulteriori informazioni su come Compute Engine utilizza gli account di servizio, consulta la panoramica degli account di servizio.

Prima di iniziare

Creazione di un nuovo account di servizio

Puoi creare e configurare un nuovo account di servizio utilizzando IAM. Dopo aver creato un account, concedigli uno o più ruoli IAM e poi autorizza l'esecuzione di un'istanza di macchina virtuale come account di servizio.

Console

Per creare un nuovo account di servizio:

  1. Crea un nuovo account di servizio come descritto nella sezione Creare un account di servizio.

  2. Ricevi l'email dell'account di servizio. Devi avere l'email per configurare un'istanza da eseguire come account di servizio. Verifica l'indirizzo email dell'account di servizio nella console:

    1. Vai alla pagina Account di servizio.

      Vai agli account di servizio

    2. Se richiesto, seleziona un progetto.

    3. Cerca il tuo nuovo account di servizio e annota l'email dell'account.

    In genere, l'email dell'account di servizio deriva dall'ID dell'account di servizio, nel formato:

    [SERVIZIO-ACCOUNT-NOME]@[ID_PROGETTO].iam.gserviceaccount.com

  3. Concedi i ruoli IAM all'account di servizio. Se non concedi alcun ruolo, l'account di servizio non avrà accesso ad alcun servizio. Per un elenco completo dei ruoli IAM, consulta Informazioni sui ruoli nella documentazione di IAM.

  4. Successivamente, configura un'istanza da eseguire come account di servizio. Segui le istruzioni per configurare un'istanza da eseguire come account di servizio.

Terraform

Per creare un account di servizio, puoi utilizzare la risorsa google_service_account.

resource "google_service_account" "default" {
  account_id   = "service-account-id"
  display_name = "Service Account"
}

Ricorda di sostituire i valori segnaposto degli attributi account_id e display_name.

Per scoprire come applicare o rimuovere una configurazione Terraform, vedi Comandi Terraform di base.

Configurazione di una nuova istanza da eseguire come account di servizio

Dopo aver creato un nuovo account di servizio, puoi creare nuove istanze di macchine virtuali da eseguire come account di servizio. Se l'account di servizio si trova in un progetto diverso da quello delle istanze, devi configurare l'account di servizio per una risorsa in un progetto diverso.

Se vuoi assegnare o modificare un account di servizio per un'istanza esistente, consulta Cambiare l'account di servizio e gli ambiti di accesso per un'istanza.

Puoi abilitare più istanze di macchine virtuali per utilizzare lo stesso account di servizio, ma un'istanza di macchina virtuale può avere una sola identità di account di servizio. Se assegni lo stesso account di servizio a più istanze di macchine virtuali, qualsiasi modifica successiva apportata all'account di servizio interesserà le istanze che utilizzano l'account di servizio. incluse eventuali modifiche apportate ai ruoli IAM concessi all'account di servizio. Ad esempio, se rimuovi un ruolo, tutte le istanze che utilizzano l'account di servizio perderanno le autorizzazioni concesse da tale ruolo.

In genere, puoi impostare l'ambito di accesso cloud-platform per consentire l'accesso alla maggior parte delle API Cloud, quindi concedere all'account di servizio solo i ruoli IAM pertinenti. La combinazione degli ambiti di accesso concessi all'istanza della macchina virtuale e dei ruoli IAM concessi all'account di servizio determina il livello di accesso dell'account di servizio per l'istanza. L'account di servizio può eseguire i metodi API solo se sono consentiti sia dall'ambito di accesso che dai ruoli IAM.

In alternativa, puoi scegliere di impostare ambiti specifici che consentano l'accesso ai metodi API specifici che il servizio chiamerà. Ad esempio, chiamare il metodo instances.insert richiede l'autorizzazione con l'ambito https://www.googleapis.com/auth/compute o l'ambito https://www.googleapis.com/auth/cloud-platform, nonché con un ruolo IAM che concede l'accesso a quel metodo. Potresti impostare l'ambito compute al posto dell'ambito cloud-platform, che fornirebbe al servizio l'accesso ai metodi di chiamata in Compute Engine, ma nessun accesso ai metodi API di chiamata all'esterno di Compute Engine.

Puoi configurare una nuova istanza da eseguire come account di servizio tramite la console Google Cloud, Google Cloud CLI o direttamente tramite l'API.

Console

  1. Vai alla pagina Crea un'istanza.

    Vai a Crea un'istanza

  2. Specifica i dettagli della VM.

  3. Nella sezione Identity and API access (Identità e accesso API), scegli dall'elenco a discesa l'account di servizio che vuoi utilizzare.

  4. Continua con il processo di creazione della VM.

gcloud

Per creare una nuova istanza e autorizzarne l'esecuzione come account di servizio personalizzato utilizzando Google Cloud CLI, fornisci l'email dell'account di servizio e gli ambiti di accesso desiderati per l'istanza.

gcloud compute instances create [INSTANCE_NAME] \
    --service-account [SERVICE_ACCOUNT_EMAIL] \
    --scopes [SCOPES,...]

dove:

  • [SERVICE_ACCOUNT_EMAIL] è l'indirizzo email dell'account di servizio che vuoi utilizzare. Ad esempio: my-sa-123@my-project-123.iam.gserviceaccount.com. Se non sai cos'è l'email, scopri come ottenere un'email per l'account di servizio.
  • [INSTANCE_NAME] è il nome dell'istanza.
  • [SCOPES] è un elenco separato da virgole di URI dell'ambito o alias di ambito completi forniti nella descrizione del flag --scopes.

Ad esempio:

gcloud compute instances create example-vm \
    --service-account 123-my-sa@my-project-123.iam.gserviceaccount.com \
    --scopes https://www.googleapis.com/auth/cloud-platform

L'interfaccia a riga di comando gcloud offre anche alias di ambito al posto degli URI ambito più lunghi. Ad esempio, l'ambito per l'accesso completo a Cloud Storage è https://www.googleapis.com/auth/devstorage.full_control. L'alias per questo ambito è storage-full.

Puoi visualizzare un elenco di ambiti e alias di ambito nella pagina instances create della descrizione per il flag --scopes. La guida per il comando instances create elenca anche questi ambiti e alias:

gcloud compute instances create --help

Specifica l'alias nello stesso modo in cui si specifica l'URI dell'ambito normale. Ad esempio:

gcloud compute instances create [INSTANCE_NAME] \
    --service-account [SERVICE_ACCOUNT_EMAIL] \
    --scopes cloud-platform

Terraform

Per configurare una nuova istanza da eseguire come account di servizio, puoi utilizzare la risorsa google_compute_instance.

resource "google_compute_instance" "default" {
  name         = "my-test-vm"
  machine_type = "n1-standard-1"
  zone         = "us-central1-a"

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }

  // Local SSD disk
  scratch_disk {
    interface = "SCSI"
  }

  network_interface {
    network = "default"

    access_config {
      // Ephemeral public IP
    }
  }

  service_account {
    # Google recommends custom service accounts with `cloud-platform` scope with
    # specific permissions granted via IAM Roles.
    # This approach lets you avoid embedding secret keys or user credentials
    # in your instance, image, or app code
    email  = google_service_account.default.email
    scopes = ["cloud-platform"]
  }
}

API

Nell'API, crea una richiesta standard per creare un'istanza, ma includere la proprietà serviceAccounts. Ottieni l'email del tuo account di servizio e includila nella proprietà email, insieme agli ambiti di accesso desiderati per l'istanza.

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances

{
  "machineType": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/machineTypes/[MACHINE_TYPE]",
  "name": "[INSTANCE_NAME]",
  "serviceAccounts": [
   {
    "email": "[SERVICE_ACCOUNT_EMAIL]",
    "scopes": ["https://www.googleapis.com/auth/cloud-platform"]
   }
  ],
  ...
}

Dopo aver configurato l'esecuzione di un'istanza come account di servizio, un'applicazione in esecuzione sull'istanza può utilizzare uno dei seguenti metodi per l'autenticazione:

Autenticazione delle applicazioni utilizzando le credenziali dell'account di servizio

Dopo aver configurato un'istanza per l'esecuzione come account di servizio, puoi utilizzare le credenziali dell'account di servizio per autenticare le applicazioni in esecuzione sull'istanza.

Autenticazione delle applicazioni con una libreria client

Le librerie client possono utilizzare le credenziali predefinite dell'applicazione per l'autenticazione con le API di Google e l'invio di richieste a tali API. Credenziali predefinite dell'applicazione consentono alle applicazioni di ottenere automaticamente le credenziali da più origini in modo da poter testare la tua applicazione in locale e quindi eseguirne il deployment in un'istanza Compute Engine senza modificare il codice dell'applicazione.

Per informazioni sulla configurazione Credenziali predefinite dell'applicazione, consulta Fornire le credenziali alle 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 seguente procedura:

  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 con accesso per gestire i bucket in Cloud Storage.


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)

Autenticazione diretta delle applicazioni con i token di accesso

Per la maggior parte delle applicazioni, puoi autenticarti utilizzando Credenziali predefinite dell'applicazione, che trova le credenziali e gestisce i token per te. Tuttavia, se la tua applicazione richiede di fornire un token di accesso OAuth2, Compute Engine ti consente di ottenere un token di accesso dal suo server di metadati per utilizzarlo nella tua applicazione.

Esistono diverse opzioni per ottenere e utilizzare questi token di accesso per autenticare le tue applicazioni. Ad esempio, puoi utilizzare curl per creare una richiesta semplice oppure puoi usare un linguaggio di programmazione come Python per una maggiore flessibilità.

cURL

Per utilizzare curl per richiedere un token di accesso e inviare una richiesta a un'API:

  1. Nell'istanza in cui viene eseguita l'applicazione, esegui una query sul server di metadati per un token di accesso eseguendo il comando seguente:

    $ curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" \
    -H "Metadata-Flavor: Google"

    La richiesta restituisce una risposta simile alla seguente:

    {
          "access_token":"ya29.AHES6ZRN3-HlhAPya30GnW_bHSb_QtAS08i85nHq39HE3C2LTrCARA",
          "expires_in":3599,
          "token_type":"Bearer"
     }

    Per le richieste API devi includere il valore access_token, non l'intera risposta. Se hai installato il processore JSON della riga di comando jq, puoi utilizzare il comando seguente per estrarre il valore del token di accesso dalla risposta:

    $ ACCESS_TOKEN=`curl \
    "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" \
    -H "Metadata-Flavor: Google" | jq -r '.access_token'`
    
  2. Copia il valore della proprietà access_token dalla risposta e utilizzalo per inviare le richieste all'API. Ad esempio, la richiesta seguente stampa un elenco di istanze nel progetto da una determinata zona:

    $ curl https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances \
    -H "Authorization":"Bearer [ACCESS_TOKEN]"
    

    dove:

    • [PROJECT_ID] è l'ID progetto per questa richiesta.
    • [ZONE] è la zona da cui elencare le istanze.
    • [ACCESS_TOKEN] è il valore del token di accesso che hai ricevuto nel passaggio 1.

    Per informazioni sui parametri che puoi impostare nella richiesta, consulta la documentazione dei parametri.

Python

Questo esempio mostra come richiedere un token per accedere all'API Cloud Storage in un'applicazione Python. L'esempio utilizza la seguente procedura:

  1. Richiedi un token di accesso al server di metadati.
  2. Estrai il token di accesso dalla risposta del server.
  3. Utilizza il token di accesso per effettuare una richiesta a Cloud Storage.
  4. Se la richiesta ha esito positivo, lo script stampa la risposta.

import argparse

import requests

METADATA_URL = 'http://metadata.google.internal/computeMetadata/v1/'
METADATA_HEADERS = {'Metadata-Flavor': 'Google'}
SERVICE_ACCOUNT = 'default'

def get_access_token():
    url = '{}instance/service-accounts/{}/token'.format(
        METADATA_URL, SERVICE_ACCOUNT)

    # Request an access token from the metadata server.
    r = requests.get(url, headers=METADATA_HEADERS)
    r.raise_for_status()

    # Extract the access token from the response.
    access_token = r.json()['access_token']

    return access_token

def list_buckets(project_id, access_token):
    url = 'https://www.googleapis.com/storage/v1/b'
    params = {
        'project': project_id
    }
    headers = {
        'Authorization': 'Bearer {}'.format(access_token)
    }

    r = requests.get(url, params=params, headers=headers)
    r.raise_for_status()

    return r.json()

def main(project_id):
    access_token = get_access_token()
    buckets = list_buckets(project_id, access_token)
    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)

I token di accesso scadono dopo un breve periodo di tempo. Il server di metadati memorizza nella cache i token di accesso finché non ha almeno 5 minuti di tempo prima che scadano. Puoi richiedere i nuovi token tutte le volte che vuoi, ma le tue applicazioni devono disporre di un token di accesso valido per consentire le chiamate API.

Autenticazione degli strumenti in un'istanza mediante un account di servizio

Alcune applicazioni potrebbero utilizzare i comandi degli strumenti gcloud e gsutil, che sono inclusi per impostazione predefinita nella maggior parte delle immagini Compute Engine. Questi strumenti riconoscono automaticamente l'account di servizio di un'istanza e le autorizzazioni pertinenti concesse all'account di servizio. In particolare, se concedi i ruoli corretti all'account di servizio, puoi utilizzare gli strumenti gcloud e gsutil delle istanze senza utilizzare gcloud auth login.

Questo riconoscimento dell'account di servizio avviene automaticamente e si applica solo agli strumenti gcloud e gsutil inclusi nell'istanza. Se crei nuovi strumenti o aggiungi strumenti personalizzati, devi autorizzare l'applicazione utilizzando una libreria client oppure utilizzando i token di accesso direttamente nell'applicazione.

Per sfruttare il riconoscimento automatico dell'account di servizio, concedi i ruoli IAM appropriati all'account di servizio e configura un'istanza da eseguire come account di servizio. Ad esempio, se concedi a un account di servizio il ruolo roles/storage.objectAdmin, lo strumento gsutil può gestire e accedere automaticamente agli oggetti Cloud Storage.

Analogamente, se abiliti roles/compute.instanceAdmin.v1 per l'account di servizio, lo strumento gcloud compute può gestire automaticamente le istanze.

Modifica dell'account di servizio e degli ambiti di accesso per un'istanza

Se vuoi eseguire la VM con un'identità diversa o se ritieni che l'istanza richieda un insieme di ambiti diverso per chiamare le API richieste, puoi modificare l'account di servizio e gli ambiti di accesso di un'istanza esistente. Ad esempio, puoi cambiare gli ambiti di accesso per concedere l'accesso a una nuova API, puoi rimuovere l'account di servizio e gli ambiti di accesso per impedire a una VM di accedere ai servizi Google Cloud oppure puoi cambiare una VM in modo che venga eseguita come account di servizio che hai creato al posto dell'account di servizio predefinito di Compute Engine. Tuttavia, Google consiglia di utilizzare criteri IAM granulari anziché fare affidamento sugli ambiti di accesso per controllare l'accesso alle risorse per l'account di servizio.

Per modificare l'account di servizio e gli ambiti di accesso di un'istanza, è necessario interromperla temporaneamente. Per arrestare l'istanza, leggi la documentazione per l'arresto di un'istanza. Dopo aver modificato l'account di servizio o gli ambiti di accesso, ricordati di riavviare l'istanza. Utilizza uno dei seguenti metodi per modificare l'account di servizio o gli ambiti di accesso dell'istanza arrestata.

Console

  1. Vai alla pagina Istanze VM.

    Vai a Istanze VM

  2. Fai clic sul nome dell'istanza VM per cui vuoi modificare l'account di servizio.

  3. Se l'istanza non viene arrestata, fai clic su Arresta. Attendi l'arresto dell'istanza.

  4. Successivamente, fai clic su Modifica.

  5. Scorri verso il basso fino alla sezione Account di servizio.

  6. Dall'elenco a discesa, seleziona l'account di servizio da assegnare all'istanza.

    • Se scegli l'account di servizio predefinito, puoi modificarne gli ambiti di accesso nella console Google Cloud.
      • Per modificare gli ambiti, nella sezione Ambiti di accesso, seleziona Imposta l'accesso per ogni API e imposta gli ambiti appropriati per le tue esigenze.
      • Se hai dubbi sugli ambiti di accesso corretti da impostare, scegli Consenti l'accesso completo a tutte le API Cloud e assicurati di limitare l'accesso impostando i ruoli IAM nell'account di servizio.
    • Se scegli un altro account di servizio, per impostazione predefinita l'ambito di accesso della VM è l'ambito cloud-platform. Puoi modificare l'ambito utilizzando l'interfaccia a riga di comando gcloud o l'API Compute Engine.
    • Per ulteriori informazioni sull'impostazione degli ambiti di accesso, consulta le best practice.
  7. Fai clic su Salva per salvare le modifiche.

gcloud

Usa il comando instances set-service-account e specifica il nome dell'istanza, l'indirizzo email dell'account di servizio e gli ambiti desiderati. Per ulteriori informazioni sull'impostazione degli ambiti di accesso, consulta le best practice.

gcloud compute instances set-service-account [INSTANCE_NAME] \
   [--service-account [SERVICE_ACCOUNT_EMAIL] | --no-service-account] \
   [--no-scopes | --scopes [SCOPES,...]]

dove:

  • [SERVICE_ACCOUNT_EMAIL] è l'indirizzo email dell'account di servizio che vuoi utilizzare. Ad esempio: my-sa-123@my-project-123.iam.gserviceaccount.com.
  • [INSTANCE_NAME] è il nome dell'istanza.
  • [SCOPES] è un elenco separato da virgole di URI dell'ambito o alias di ambito completi forniti nella descrizione del flag --scopes. Se vuoi rimuovere tutti gli ambiti per l'istanza, utilizza il flag --no-scopes.

Ad esempio, il comando seguente assegna l'account di servizio my-sa-123@my-project-123.iam.gserviceaccount.com a un'istanza denominata example-instance e imposta gli ambiti di accesso su quell'istanza per consentire l'accesso in lettura/scrittura a Compute Engine e l'accesso in sola lettura a Cloud Storage:

gcloud compute instances set-service-account example-instance \
   --service-account my-sa-123@my-project-123.iam.gserviceaccount.com \
   --scopes compute-rw,storage-ro

API

Nell'API, effettua una richiesta POST al metodo setServiceAccount:

https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]/setServiceAccount

dove:

  • [PROJECT_ID] è l'ID progetto per questa richiesta.
  • [ZONE] è la zona a cui appartiene questa istanza.
  • [INSTANCE_NAME] è il nome dell'istanza.

Nel corpo della richiesta, fornisci l'indirizzo email dell'account di servizio e gli URI dell'ambito desiderati per l'istanza. Per ulteriori informazioni sull'impostazione degli ambiti di accesso, consulta le best practice.

{
  "email": "[SERVICE_ACCOUNT_EMAIL]",
  "scopes": [
    "[SCOPE_URI]",
    "[SCOPE_URI]",
    ...
  ]
}

Ad esempio, la seguente richiesta utilizza l'email dell'account di servizio my-sa-123@my-project-123.iam.gserviceaccount.com e imposta un ambito Cloud Storage e BigQuery:

{
  "email": "my-sa-123@my-project-123.iam.gserviceaccount.com",
  "scopes": [
    "https://www.googleapis.com/auth/bigquery",
    "https://www.googleapis.com/auth/devstorage.read_only"
  ]
}

Ottenere un'email per l'account di servizio

Per identificare un account di servizio, hai bisogno dell'email dell'account. Ottieni un'email dell'account di servizio tramite una delle seguenti opzioni:

Console

  1. Vai alla pagina Account di servizio.

    Vai agli account di servizio

  2. Se richiesto, seleziona un progetto. Nella pagina degli account di servizio sono elencati tutti gli account di servizio per il progetto e i relativi indirizzi email.

gcloud

Utilizza il comando gcloud compute instances describe dalla tua macchina locale:

gcloud compute instances describe [INSTANCE_NAME] --format json
{
      ...
      "serviceAccounts":[
         {
            "email":"123845678986-compute@developer.gserviceaccount.com",
            "scopes":[
               "https://www.googleapis.com/auth/devstorage.full_control"
            ]
         }
      ]
      ...
   }

Se l'istanza non utilizza un account di servizio, ricevi una risposta senza la proprietà serviceAccounts.

Server metadati

Esegui una query sul server di metadati dell'istanza stessa. Invia una richiesta a http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/:

user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/" \
-H "Metadata-Flavor: Google"

Se hai abilitato uno o più account di servizio durante la creazione dell'istanza, il comando curl restituisce un output simile al seguente:

123845678986-compute@developer.gserviceaccount.com/
default/

Se l'istanza non utilizza un account di servizio, riceverai una risposta vuota.

API

Inviare una richiesta all'API Service Accounts.

Utilizzo dell'account di servizio predefinito di Compute Engine

Se hai dimestichezza con l'account di servizio predefinito di Compute Engine e vuoi utilizzare le credenziali fornite dall'account di servizio predefinito anziché creare nuovi account di servizio, puoi concedere ruoli IAM all'account di servizio predefinito.

Per impostazione predefinita, tutte le istanze Compute Engine possono essere eseguite come account di servizio predefinito. Quando crei un'istanza utilizzando Google Cloud CLI o la console Google Cloud e ometti eventuali specifiche dell'account di servizio, l'account di servizio predefinito viene assegnato all'istanza.

Prima di assegnare i ruoli IAM all'account di servizio predefinito, tieni presente che:

  • La concessione di un ruolo IAM all'account di servizio predefinito influisce su tutte le istanze in esecuzione come account di servizio predefinito. Ad esempio, se concedi all'account di servizio predefinito il ruolo roles/storage.objectAdmin, tutte le istanze in esecuzione come account di servizio predefinito con gli ambiti di accesso richiesti avranno le autorizzazioni concesse dal ruolo roles/storage.objectAdmin. Analogamente, se limiti l'accesso omettendo determinati ruoli, la modifica influirà su tutte le istanze in esecuzione come account di servizio predefinito.

  • Devi revocare l'autorizzazione di editor del progetto per l'account di servizio. L'account di servizio predefinito viene aggiunto come editor di progetto ai progetti per impostazione predefinita. Per utilizzare i ruoli IAM, devi revocare l'autorizzazione dell'editor di progetto.

In caso di dubbi sulla concessione dei ruoli IAM all'account di servizio predefinito, crea un nuovo account di servizio.

Segui queste istruzioni per concedere un ruolo IAM all'account di servizio predefinito:

  1. Nella console Google Cloud, vai alla pagina IAM.

    Vai a IAM

  2. Se richiesto, seleziona un progetto.

  3. Cerca l'account di servizio denominato Account di servizio predefinito di Compute Engine.

  4. Nella colonna Ruoli, espandi il menu a discesa per l'account di servizio predefinito di Compute Engine.

  5. Rimuovi l'accesso in modifica e salva le modifiche.

  6. Concedi i ruoli IAM all'account di servizio.

Qualsiasi istanza di macchina virtuale attualmente in esecuzione come account di servizio predefinito avrà accesso ad altre API Google Cloud in base ai ruoli IAM concessi all'account.

Se vuoi configurare una nuova istanza da eseguire come account di servizio predefinito, segui queste istruzioni:

Console

  1. Vai alla pagina Crea un'istanza.

    Vai a Crea un'istanza

  2. Specifica i dettagli della VM.

  3. Nella sezione Identità e accesso API, scegli Account di servizio predefinito Compute Engine dall'elenco a discesa Account di servizio.

  4. Continua con il processo di creazione della VM.

gcloud

Per creare una nuova istanza e autorizzarla ad avere accesso completo a tutti i servizi Google Cloud utilizzando l'account di servizio predefinito:

gcloud compute instances create [INSTANCE_NAME] \
     --scopes cloud-platform

API

Nell'API, crea una richiesta standard per creare un'istanza, ma includi la proprietà serviceAccounts. Ottieni l'ID account di servizio predefinito e includilo come email dell'account di servizio. Imposta uno o più ambiti nella proprietà scopes.

POST https://compute.googleapis.com/compute/v1/projects/zones/[ZONE]/instances

{
  "machineType": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/machineTypes/[MACHINE_TYPE]",
  "name": "[INSTANCE_NAME]",
  "serviceAccounts": [
   {
    "email": "[DEFAULT_SERVICE_ACCOUNT_EMAIL]",
    "scopes": ["https://www.googleapis.com/auth/cloud-platform"]
   }
  ],
  ...
}

Best practice

  • Google consiglia di eseguire ogni istanza VM che deve chiamare un'API Google come account di servizio con le autorizzazioni minime necessarie per eseguire la VM.
  • Segui queste istruzioni per configurare gli account di servizio per le tue VM:

    1. Crea un nuovo account di servizio invece di utilizzare l'account di servizio predefinito di Compute Engine.
    2. Concedi i ruoli IAM all'account di servizio solo per le risorse necessarie.
    3. Configura la VM in modo che venga eseguita come nuovo account di servizio che hai creato.
    4. Concedi alla tua VM l'ambito https://www.googleapis.com/auth/cloud-platform per consentire l'accesso alla maggior parte delle API Google Cloud, in modo che le autorizzazioni IAM della VM siano determinate completamente dai ruoli IAM che hai concesso all'account di servizio della VM. L'account di servizio può eseguire solo i metodi API consentiti sia dall'ambito di accesso che dai ruoli IAM specifici dell'account di servizio.
  • Limita i privilegi degli account di servizio e controlla regolarmente le autorizzazioni dell'account di servizio per assicurarti che siano aggiornate.

  • Eliminare con attenzione gli account di servizio. Assicurati che le applicazioni critiche non utilizzino più un account di servizio prima di eliminarlo. Se non hai la certezza che sia in uso un account di servizio, ti consigliamo di disattivare l'account di servizio anziché eliminarlo. Gli account di servizio disattivati possono essere riattivati qualora siano ancora necessari.

  • Riduci i rischi per la sicurezza del tuo account di servizio. Per ulteriori informazioni, consulta Best practice per l'utilizzo degli account di servizio.

Passaggi successivi

Provalo

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

Prova Compute Engine gratuitamente