Autentica i carichi di lavoro utilizzando account di servizio


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

Per saperne di più 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, concedi all'account uno o più ruoli IAM, quindi 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. Hai bisogno dell'email per configurare un'istanza da eseguire come questo 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 prendi nota dell'email dell'account di servizio.

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

    [NOME-ACCOUNT-SERVIZIO]@[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 ai servizi. Per un elenco completo dei ruoli IAM, consulta la sezione Informazioni sui ruoli nella documentazione di IAM.

  4. Quindi, 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 informazioni su come applicare o rimuovere una configurazione Terraform, consulta 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 rispetto alle istanze, devi configurare l'account di servizio per una risorsa in un altro progetto.

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

Puoi abilitare più istanze di macchine virtuali a 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, le modifiche apportate successivamente all'account di servizio avranno effetto sulle istanze che utilizzano l'account di servizio. Sono 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 quel ruolo.

In genere, puoi semplicemente 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 di macchina virtuale e i ruoli IAM concessi all'account di servizio determina la quantità 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 relativi ruoli IAM.

In alternativa, puoi scegliere di impostare ambiti specifici che consentano l'accesso ai relativi metodi API che il servizio chiamerà. Ad esempio, per chiamare il metodo instances.insert è necessaria 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. Puoi impostare l'ambito compute al posto dell'ambito cloud-platform, in modo da offrire al servizio l'accesso ai metodi di chiamata in Compute Engine, ma nessun accesso ai metodi dell'API di chiamata al di fuori 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 Identità e accesso API, scegli l'account di servizio che vuoi utilizzare dall'elenco a discesa.

  4. Continua con il processo di creazione della VM.

gcloud

Per creare una nuova istanza e autorizzarla a essere eseguita 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 quale sia l'indirizzo email, scopri come recuperare un'email dell'account di servizio.
  • [INSTANCE_NAME] è il nome dell'istanza.
  • [SCOPES] è un elenco separato da virgole di URI dell'ambito completi, o alias di ambito, forniti nella descrizione per il 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

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

Puoi vedere un elenco di ambiti e alias di ambito nella pagina instances create nella 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 come faresti per l'URI di ambito normale. Ad esempio:

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

Terraform

Per configurare l'esecuzione di una nuova istanza 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. Procurati l'email del tuo account di servizio e includila la 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 un'istanza da eseguire come account di servizio, un'applicazione in esecuzione sull'istanza può utilizzare uno dei seguenti metodi per l'autenticazione:

Autenticazione delle applicazioni mediante le credenziali dell'account di servizio

Dopo aver configurato un'istanza da eseguire 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 eseguire l'autenticazione con le API di Google e inviare richieste a queste API. Credenziali predefinite dell'applicazione consentono alle applicazioni di ottenere automaticamente le credenziali da più origini, in modo da poter testare l'applicazione in locale e quindi eseguirne il deployment in un'istanza di Compute Engine senza modificare il codice dell'applicazione.

Per informazioni sulla configurazione Credenziali predefinite dell'applicazione, consulta Fornisci le credenziali alle credenziali predefinite dell'applicazione.

Questo esempio utilizza la libreria client 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. Ottenere le credenziali di autenticazione necessarie per l'API Cloud Storage e inizializzare 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 alla gestione dei bucket in Cloud Storage.


import argparse
from typing import Dict

import googleapiclient.discovery


def create_service() -> googleapiclient.discovery.Resource:
    """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: googleapiclient.discovery.Resource, project_id: str) -> Dict:
    """List buckets in Cloud Storage"""
    return service.buckets().list(project=project_id).execute()


def main(project_id: str) -> None:
    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 delle applicazioni direttamente con i token di accesso

Per la maggior parte delle applicazioni, puoi eseguire l'autenticazione utilizzando le credenziali predefinite delle applicazioni, che trovano le credenziali e gestiscono 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 da utilizzare nell'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 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, interroga il server dei 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 a:

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

    Per le richieste API è necessario includere il valore access_token, non l'intera risposta. Se hai installato il processore JSON della riga di comando jq, puoi utilizzare il seguente comando 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 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 riesce, lo script stampa la risposta.
import argparse
from typing import Dict

import requests


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


def get_access_token() -> str:
    """Get an access token from the metadata server"""
    url = f"{METADATA_URL}instance/service-accounts/{SERVICE_ACCOUNT}/token"

    # 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: str, access_token: str) -> Dict:
    """List buckets in Cloud Storage"""
    url = "https://www.googleapis.com/storage/v1/b"
    params = {"project": project_id}
    headers = {"Authorization": f"Bearer {access_token}"}

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

    return r.json()


def main(project_id: str) -> None:
    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 hanno a disposizione 5 minuti di tempo rimanente prima della loro scadenza. Puoi richiedere nuovi token tutte le volte che vuoi, ma le tue applicazioni devono avere 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 o utilizzando i token di accesso direttamente nell'applicazione.

Per sfruttare il riconoscimento automatico degli 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 abbia bisogno di 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 a qualsiasi servizio Google Cloud oppure modificare una VM in modo che venga eseguita come account di servizio 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 arrestare temporaneamente l'istanza. Per arrestare l'istanza, leggi la documentazione relativa all'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 è stata 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, il valore predefinito dell'ambito di accesso della VM è cloud-platform. Puoi modificare l'ambito utilizzando gcloud CLI o l'API Compute Engine.
    • Per scoprire di più sull'impostazione degli ambiti di accesso, consulta le best practice.
  7. Fai clic su Salva per salvare le modifiche.

gcloud

Utilizza il comando instances set-service-account e fornisci il nome dell'istanza, l'indirizzo email dell'account di servizio e gli ambiti desiderati. Per scoprire di più 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 completi, o alias di ambito, forniti nella descrizione per il flag --scopes. Se vuoi rimuovere tutti gli ambiti per l'istanza, utilizza il flag --no-scopes.

Ad esempio, il seguente comando assegna all'account di servizio my-sa-123@my-project-123.iam.gserviceaccount.com a un'istanza denominata istanza di esempio 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 scoprire di più sull'impostazione degli ambiti di accesso, consulta le best practice.

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

Ad esempio, la richiesta seguente 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"
  ]
}

Ricezione di un'email dell'account di servizio

Per identificare un account di servizio, devi disporre dell'email dell'account di servizio. Puoi ottenere un'email dell'account di servizio utilizzando 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, riceverai una risposta senza la proprietà serviceAccounts.

Server metadati

Interroga il server di metadati all'interno 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 degli account di servizio.

Utilizzo dell'account di servizio predefinito di Compute Engine

Se conosci l'account di servizio predefinito di Compute Engine e vuoi utilizzare le credenziali fornite da quest'ultimo anziché creare nuovi account di servizio, puoi concedere i ruoli IAM all'account di servizio predefinito.

Per impostazione predefinita, tutte le istanze di 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, a tutte le istanze in esecuzione come account di servizio predefinito con gli ambiti di accesso richiesti saranno concesse le autorizzazioni dal ruolo roles/storage.objectAdmin. Analogamente, se limiti l'accesso omettendo determinati ruoli, questa influirà su tutte le istanze in esecuzione come account di servizio predefinito.

  • Devi revocare l'autorizzazione dell'editor di progetti 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 del 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 Compute Engine.

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

  5. Rimuovi l'accesso come Editor e salva le modifiche.

  6. Quindi, 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 che hai concesso 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. Procurati l'ID dell'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 che ogni istanza VM che deve chiamare un'API Google debba essere eseguita come account di servizio con le autorizzazioni minime necessarie per l'esecuzione della VM.
  • Segui queste istruzioni per configurare gli account di servizio per le tue VM:

    1. Crea un nuovo account di servizio anziché utilizzare l'account di servizio predefinito di Compute Engine.
    2. Concedi i ruoli IAM all'account di servizio solo per le risorse di cui ha bisogno.
    3. Configura la VM da eseguire come nuovo account di servizio 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 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 sai con certezza se viene utilizzato un account di servizio, ti consigliamo di disattivarlo anziché eliminarlo. Gli account di servizio disattivati possono essere riattivati qualora siano ancora necessari.

  • Ridurre i rischi per la sicurezza del tuo account di servizio. Per ulteriori informazioni, consulta le 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