Cambia l'account di servizio collegato


Questo documento spiega come configurare una macchina virtuale (VM) esistente per utilizzare 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 l'intervento dell'utente finale. Per ulteriori informazioni su quando utilizzare gli account di servizio, consulta 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, in modo che l'account di servizio e, per estensione, le applicazioni in esecuzione sulla VM possano accedere alle risorse Google Cloud.

Prima di iniziare

  • Configurare l'autenticazione.

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

    Console

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

    gcloud

    1. Installa Google Cloud CLI, quindi inizializzalo eseguendo il comando seguente:

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

    REST

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

      Installa Google Cloud CLI, quindi inizializzalo eseguendo il comando seguente:

      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 il progetto. Per saperne di più sulla concessione dei ruoli, vedi Gestire l'accesso.

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

Autorizzazioni obbligatorie

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

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

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

Panoramica

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

  1. Crea un nuovo account di servizio gestito dall'utente anziché utilizzare l'account di servizio predefinito di Compute Engine e concedi i ruoli IAM a quell'account di servizio solo per le risorse e le operazioni necessarie.
  2. Collega l'account di servizio alla tua VM.
  3. Imposta l'ambito Cloud Platform (https://www.googleapis.com/auth/cloud-platform) sulla tua VM. In questo modo l'account di servizio della VM può 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.
    • 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.

Configura l'account di servizio

Puoi creare un account di servizio gestito dall'utente o utilizzare l'account di servizio predefinito di Compute Engine. Si consiglia 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 Compute Engine e vuoi utilizzare le credenziali fornite dall'account di servizio predefinito anziché creare nuovi account di servizio, puoi concedere i ruoli IAM all'account di servizio predefinito.

Prima di assegnare 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 disporranno delle autorizzazioni concesse dal ruolo roles/storage.objectAdmin. Analogamente, se limiti l'accesso omettendo determinati ruoli, questa operazione influisce su tutte le VM in esecuzione come account di servizio predefinito.

  • Ti consigliamo di rimuovere il ruolo Editor di base per l'account di servizio predefinito. L'account di servizio predefinito viene aggiunto ai progetti come editor del progetto per impostazione predefinita. Per utilizzare i ruoli IAM, revoca il ruolo Editor di base.

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

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 Ruolo/i, espandi il menu a discesa dell'account di servizio predefinito di Compute Engine.

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

  6. Successivamente, 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.

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, la VM deve essere arrestata temporaneamente.

Se l'account di servizio si trova in un progetto diverso dalla VM, devi configurarlo 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 l'account di servizio gestito dall'utente, utilizza l'interfaccia a riga di comando gcloud 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 alle tue esigenze.
      • Consigliato Se non sai con certezza quali sono gli 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 nell'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 specifica il nome della VM, 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 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, consulta Scheda 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 dell'ambito forniti nella descrizione del flag --scopes.

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

    Ad esempio, il seguente comando assegna l'account di servizio my-sa-123@my-project-123.iam.gserviceaccount.com a una VM denominata istanza-esempio e imposta gli ambiti di accesso su quella VM 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
    
  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 da arrestare
  2. Associa l'account di servizio effettuando 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, consulta Scheda degli account di servizio.
    • SCOPE_URI: l'URI dell'ambito richiesto.

    Ad esempio, la seguente richiesta utilizza l'indirizzo email my-sa-123@my-project-123.iam.gserviceaccount.com dell'account di servizio 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 creando una richiesta POST utilizzando 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

Visualizzare l'account di servizio utilizzato da una VM

Per visualizzare tutti gli account di servizio in un progetto, consulta 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, riceverai 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 al momento della 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.

best practice

  • Limita i privilegi degli account di servizio e controlla regolarmente le autorizzazioni dell'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 se un account di servizio sia in uso, ti consigliamo di disattivarlo 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?