Cambiare l'account di servizio collegato

Questo documento spiega come configurare una macchina virtuale (VM) esistente per l'uso di un account di servizio diverso. Un account di servizio è un tipo speciale di account generalmente utilizzato da un'applicazione o da un carico di lavoro di computing per effettuare chiamate API autorizzate.

Gli account di servizio sono necessari per gli scenari in cui un carico di lavoro, ad esempio un'applicazione personalizzata, deve accedere alle risorse Google Cloud o eseguire azioni senza il coinvolgimento dell'utente finale. Per ulteriori informazioni su quando utilizzare gli account di servizio, consulta le best practice per l'utilizzo degli account di servizio.

Se hai applicazioni che devono effettuare chiamate alle API Google Cloud, Google consiglia di collegare un account di servizio gestito dall'utente alla VM su cui sono in esecuzione l'applicazione o il carico di lavoro. Successivamente, concederai i ruoli IAM all'account di servizio, che consentiranno all'account di servizio e, di conseguenza, alle applicazioni in esecuzione sulla VM, di accedere alle risorse Google Cloud.

Prima di iniziare

  • Se non l'hai ancora fatto, configura l'autenticazione. L'autenticazione è il processo mediante il quale viene verificata l'identità per l'accesso ai servizi e alle API Google Cloud. Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti in Compute Engine nel seguente modo.

    Seleziona la scheda relativa a come prevedi di utilizzare gli esempi in questa pagina:

    Console

    Quando utilizzi la console Google Cloud per accedere ai servizi e alle API di Google Cloud, non devi configurare l'autenticazione.

    gcloud

    1. Installa Google Cloud CLI, quindi initialize eseguendo questo comando:

      gcloud init
    2. Imposta una regione e una zona predefinite.

    REST

    Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, devi utilizzare le credenziali che fornisci a gcloud CLI.

      Installa Google Cloud CLI, quindi initialize eseguendo questo comando:

      gcloud init

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per configurare gli account di servizio sulla VM, chiedi all'amministratore di concederti il ruolo IAM Amministratore istanze Compute (v1) (roles/compute.instanceAdmin.v1) per la VM o per il tuo progetto. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

Questo ruolo predefinito contiene le autorizzazioni necessarie per configurare gli account di servizio sulla VM. Per visualizzare le autorizzazioni esatte necessarie, espandi la sezione Autorizzazioni richieste:

Autorizzazioni obbligatorie

Per configurare gli account di servizio sulla VM sono necessarie le seguenti autorizzazioni:

  • compute.instances.setServiceAccount
  • compute.instances.stop
  • compute.instances.start

Potresti anche essere in grado di ottenere queste autorizzazioni con i ruoli personalizzati o altri ruoli predefiniti.

Panoramica

Ti consigliamo di configurare gli account di servizio per le tue VM come segue:

  1. Crea un nuovo account di servizio gestito dall'utente anziché utilizzare l'account di servizio predefinito di Compute Engine. Assegna i ruoli IAM a quell'account di servizio solo per le risorse e le operazioni necessarie.
  2. Collega l'account di servizio alla VM.
  3. Imposta l'ambito della piattaforma Cloud (https://www.googleapis.com/auth/cloud-platform) sulla tua VM. Ciò consente all'account di servizio della VM di chiamare le API Google Cloud che ha l'autorizzazione a utilizzare.
    • Se specifichi l'account di servizio utilizzando la console Google Cloud, l'ambito di accesso della VM verrà impostato automaticamente sull'ambito cloud-platform per impostazione predefinita.
    • Se specifichi l'account di servizio utilizzando Google Cloud CLI o l'API Compute Engine, puoi utilizzare il parametro scopes per impostare l'ambito di accesso dell'accesso.

Configura l'account di servizio

Puoi creare un account di servizio gestito dall'utente o utilizzare l'account di servizio predefinito di Compute Engine. È consigliabile avere un account di servizio gestito dall'utente.

Per l'account di servizio selezionato, assicurati che siano assegnati i ruoli Identity and Access Management (IAM) richiesti.

Gestita dall'utente

Se non hai ancora un account di servizio gestito dall'utente, creane uno. Per istruzioni dettagliate, vedi Configurare un account di servizio.

Predefinito

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

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 interessa tutte le VM in esecuzione come account di servizio predefinito. Ad esempio, se concedi all'account di servizio predefinito il ruolo roles/storage.objectAdmin, tutte le VM in esecuzione come account di servizio predefinito con gli ambiti di accesso richiesti avranno le autorizzazioni concesse dal ruolo roles/storage.objectAdmin. Allo stesso modo, se limiti l'accesso omettendo determinati ruoli, questa operazione influisce su tutte le VM in esecuzione come account di servizio predefinito.

  • A seconda della configurazione dei criteri dell'organizzazione, all'account di servizio predefinito potrebbe essere concesso automaticamente il ruolo Editor per il progetto. Ti consigliamo vivamente di disabilitare la concessione automatica del ruolo applicando il vincolo del criterio dell'organizzazione iam.automaticIamGrantsForDefaultServiceAccounts. Se hai creato la tua organizzazione dopo il 3 maggio 2024, questo vincolo viene applicato per impostazione predefinita.

    Se disabiliti la concessione automatica dei ruoli, devi decidere quali ruoli concedere agli account di servizio predefiniti e poi concedere personalmente questi ruoli.

    Se l'account di servizio predefinito dispone già del ruolo Editor, ti consigliamo di sostituire il ruolo Editor con ruoli meno permissivi. Per modificare in modo sicuro i ruoli dell'account di servizio, utilizza il Simulatore di criteri per vedere l'impatto della modifica, quindi concedi e revoca i ruoli appropriati.

Se hai dubbi sulla concessione dei ruoli IAM all'account di servizio predefinito, crea un nuovo account di servizio gestito dall'utente.

Collega l'account di servizio e aggiorna l'ambito di accesso

Per modificare l'account di servizio e gli ambiti di accesso di una VM, questa deve essere arrestata temporaneamente.

Se l'account di servizio si trova in un progetto diverso dalla VM, devi configurare l'account di servizio per una risorsa in un progetto diverso.

Utilizza uno dei seguenti metodi per modificare l'account di servizio e gli ambiti di accesso sulla VM.

Console

  1. Vai alla pagina Istanze VM.

    Vai a Istanze VM

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

  3. Se la VM non viene arrestata, fai clic su Arresta. Attendi che la VM venga arrestata.

  4. 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 alla VM.

    • Se scegli un account di servizio gestito dall'utente, l'ambito di accesso della VM viene impostato in modo predefinito sull'ambito cloud-platform consigliato. Se hai bisogno di un ambito diverso per il tuo account di servizio gestito dall'utente, utilizza gcloud CLI o l'API Compute Engine per collegare l'account di servizio.
    • Se scegli l'account di servizio predefinito di Compute Engine, 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 in base alle tue esigenze.
      • Consigliato Se non sei sicuro degli ambiti di accesso corretti da impostare, scegli Consenti l'accesso completo a tutte le API Cloud, quindi assicurati di limitare l'accesso impostando i ruoli IAM sull'account di servizio.
  7. Fai clic su Salva per salvare le modifiche.

  8. Fai clic su Avvia/Riprendi per riavviare la VM.

gcloud

  1. Arresta la VM utilizzando il comando instances stop. Sostituisci VM_NAME con il nome della tua istanza VM.

    gcloud compute instances stop VM_NAME
    
  2. Collega l'account di servizio. Per collegare l'account di servizio, utilizza il comando instances set-service-account e fornisci il nome della VM, l'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 VM_NAME \
      --service-account=SERVICE_ACCOUNT_EMAIL \
      --scopes=SCOPES
    

    Sostituisci quanto segue:

    • SERVICE_ACCOUNT_EMAIL: l'indirizzo email dell'account di servizio che hai creato. Ad esempio: my-sa-123@my-project-123.iam.gserviceaccount.com. Per visualizzare l'indirizzo email, vedi Elenco degli account di servizio.

      Se vuoi rimuovere l'account di servizio dalla VM, utilizza il flag --no-service-account.

    • VM_NAME: il nome dell'istanza VM.

    • SCOPES: un elenco separato da virgole di URI o alias di ambito fornito nella descrizione del flag --scopes.

      Se vuoi rimuovere tutti gli ambiti per la VM, utilizza invece il flag --no-scopes.

    Ad esempio, il comando seguente assegna l'account di servizio my-sa-123@my-project-123.iam.gserviceaccount.com a una VM denominata example-instance e imposta gli ambiti di accesso su quella VM per consentire l'accesso in lettura/scrittura a Compute Engine e l'accesso di 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
    
  3. Avvia la VM utilizzando il comando instances start. Sostituisci VM_NAME con il nome della tua istanza VM.

    gcloud compute instances start VM_NAME
    

REST

  1. Arresta la VM effettuando una richiesta POST utilizzando il metodo instances.stop:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/stop
    

    Sostituisci quanto segue:

    • PROJECT_ID: il progetto in cui si trova la VM
    • ZONE: la zona in cui si trova la VM
    • VM_NAME: il nome della VM che vuoi arrestare
  2. Collega l'account di servizio inviando una richiesta POST al metodo setServiceAccount:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setServiceAccount
    
    {
      "email": "SERVICE_ACCOUNT_EMAIL",
      "scopes": [
        "SCOPE_URI",
        "SCOPE_URI",
        ...
      ]
    }
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID progetto per questa richiesta.
    • ZONE: la zona a cui appartiene la VM.
    • VM_NAME: il nome della VM.
    • SERVICE_ACCOUNT_EMAIL: l'indirizzo email dell'account di servizio che hai creato. Ad esempio: my-sa-123@my-project-123.iam.gserviceaccount.com. Per visualizzare l'indirizzo email, vedi Elenco degli account di servizio.
    • SCOPE_URI: l'URI di ambito richiesto.

    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:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setServiceAccount
    
    {
      "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"
      ]
    }
    
  3. Avvia la VM costruendo una richiesta POST con il metodo instances.start:

    POST https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/start
    

    Sostituisci quanto segue:

    • PROJECT_ID: il progetto in cui si trova la VM
    • ZONE: la zona in cui si trova la VM
    • VM_NAME: il nome della VM che vuoi avviare

Visualizza l'account di servizio utilizzato da una VM

Per visualizzare tutti gli account di servizio in un progetto, vedi Elenco degli account di servizio.

Se devi identificare l'account di servizio utilizzato da una VM, completa una delle seguenti procedure:

console

  1. Vai alla pagina Istanze VM.

    Vai a Istanze VM

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

  3. Vai alla sezione Gestione di API e identità. Questa sezione mostra l'account di servizio e l'ambito di accesso utilizzati dalla VM.

gcloud

Esegui il comando gcloud compute instances describe:

gcloud compute instances describe VM_NAME \
    --format json

L'output è simile al seguente:

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

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

Server metadati

Esegui una query sul server di metadati dall'interno della VM 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, questo 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.

best practice

  • Limita i privilegi degli account di servizio e controlla regolarmente le autorizzazioni degli account di servizio per assicurarti che siano aggiornate.
  • Elimina gli account di servizio con cautela. Assicurati che le applicazioni critiche non utilizzino più un account di servizio prima di eliminarlo. Se non sai con certezza se un account di servizio sia in uso, ti consigliamo di disattivare l'account di servizio anziché eliminarlo. Gli account di servizio disabilitati possono essere riattivati se sono ancora necessari.
  • Riduci i rischi per la sicurezza del tuo account di servizio. Per ulteriori informazioni, consulta le best practice per l'utilizzo degli account di servizio.

Che cosa succede dopo?