Creare una VM che utilizza un account di servizio gestito dall'utente

Questo documento spiega come creare un'istanza di macchina virtuale (VM) configurata per utilizzare un account di servizio gestito dall'utente. 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.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

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

      gcloud init
    2. Set a default region and zone.
    3. Terraform

      Per utilizzare gli esempi di Terraform su questa pagina in un ambiente di sviluppo locale, installa e inizializza gcloud CLI, quindi configura le Credenziali predefinite dell'applicazione con le tue credenziali utente.

      1. Installa Google Cloud CLI.
      2. Per initialize gcloud CLI, esegui questo comando:

        gcloud init
      3. Crea credenziali di autenticazione locali per il tuo Account Google:

        gcloud auth application-default login

      Per ulteriori informazioni, consulta Set up authentication for a local development environment.

      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

      Per maggiori informazioni, consulta Autenticazione per REST nella documentazione sull'autenticazione di Google Cloud.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per creare VM che utilizzano account di servizio, chiedi all'amministratore di concederti i seguenti ruoli IAM sul progetto:

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

Questi ruoli predefiniti contengono le autorizzazioni necessarie per creare VM che utilizzano account di servizio. Per visualizzare le autorizzazioni esatte necessarie, espandi la sezione Autorizzazioni richieste:

Autorizzazioni obbligatorie

Per creare VM che utilizzano account di servizio sono necessarie le seguenti autorizzazioni:

  • Per creare account di servizio: tutte le autorizzazioni nel ruolo serviceAccountCreator
  • Per creare delle VM:
    • compute.instances.create sul progetto
    • Per utilizzare un'immagine personalizzata per creare la VM&: compute.images.useReadOnly nell'immagine
    • a utilizzare uno snapshot per creare la VM con i due punti compute.snapshots.useReadOnly nello snapshot
    • a utilizzare un modello di istanza per creare la VM&: compute.instanceTemplates.useReadOnly nel modello di istanza
    • ad assegnare una rete legacy alla VM e ai due punti compute.networks.use del progetto
    • Per specificare un indirizzo IP statico per la VM&: compute.addresses.use nel progetto
    • Per assegnare un indirizzo IP esterno alla VM quando si utilizza una rete legacy&due punti compute.networks.useExternalIp nel progetto
    • Per specificare una subnet per la VM&: compute.subnetworks.use nel progetto o nella subnet scelta
    • Per assegnare un indirizzo IP esterno alla VM quando utilizzi una rete VPC&;compute.subnetworks.useExternalIp nel progetto o nella subnet scelta
    • a impostare i metadati dell'istanza VM per VM&: compute.instances.setMetadata nel progetto
    • a impostare i tag per la VM con i due punti compute.instances.setTags sulla VM
    • a impostare le etichette per la VM con i due punti compute.instances.setLabels sulla VM
    • Per impostare un account di servizio affinché la VM utilizzi i due punti compute.instances.setServiceAccount sulla VM
    • a creare un nuovo disco per la VM&: compute.disks.create nel progetto
    • Per collegare un disco esistente in modalità di sola lettura o lettura/scrittura&due punti, compute.disks.use sul disco
    • Per collegare un disco esistente in modalità di sola lettura&due punti compute.disks.useReadOnly sul disco

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.

Configurare un account di servizio

Crea un account di servizio e assegna i ruoli IAM richiesti. Assegna tutti i ruoli IAM necessari. Puoi modificare i ruoli IAM sul tuo account di servizio in base alle esigenze.

Google consiglia di limitare i privilegi degli account di servizio e di controllare regolarmente le autorizzazioni dell'account di servizio per assicurarsi che siano aggiornate.

Utilizza uno dei seguenti metodi per configurare l'account di servizio.

Console

    In the Google Cloud console, go to the Create service account page.

    Go to Create service account
  1. Select your project.
  2. In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.

    In the Service account description field, enter a description. For example, Service account for quickstart.

  3. Click Create and continue.
  4. Grant the required roles to the service account.

    To grant a role, find the Select a role list, then select the role.

    To grant additional roles, click Add another role and add each additional role.

  5. Click Continue.
  6. In the Service account users role field, enter the identifier for the principal that will attach the service account to other resources, such as Compute Engine instances.

    This is typically the email address for a Google Account.

  7. Click Done to finish creating the service account.

gcloud

    Set up authentication:

    1. Create the service account:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Replace SERVICE_ACCOUNT_NAME with a name for the service account.

    2. To provide access to your project and your resources, grant a role to the service account:

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE

      Replace the following:

      • SERVICE_ACCOUNT_NAME: the name of the service account
      • PROJECT_ID: the project ID where you created the service account
      • ROLE: the role to grant
    3. To grant another role to the service account, run the command as you did in the previous step.
    4. Grant the required role to the principal that will attach the service account to other resources.

      gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com --member="user:USER_EMAIL" --role=roles/iam.serviceAccountUser

      Replace the following:

      • SERVICE_ACCOUNT_NAME: the name of the service account
      • PROJECT_ID: the project ID where you created the service account
      • USER_EMAIL: the email address for a Google Account

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"
}

Ricordati di sostituire i valori segnaposto per gli attributi account_id e display_name.

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

Crea una VM e collega l'account di servizio

Dopo aver creato l'account di servizio, crea una VM e collega l'account di servizio creato nella sezione precedente. Imposta anche l'ambito di accesso della VM su cloud-platform.

Se hai già una VM e vuoi configurarla in modo che utilizzi un account di servizio diverso, consulta Cambiare l'account di servizio collegato.

Utilizza uno dei seguenti metodi per creare una VM e collegare l'account di servizio.

Console

  1. Nella console Google Cloud, vai alla pagina Istanze VM.

Vai a Istanze VM

  1. Seleziona il progetto e fai clic su Continua.
  2. Fai clic su Crea istanza.
  3. Specifica un nome per la VM.
  4. Vai alla sezione Identità e accesso API.
  5. Nell'elenco Account di servizio, seleziona l'account di servizio che hai creato. Quando colleghi un account di servizio a una VM, l'ambito di accesso cloud-platform dell'ambito di accesso Google Cloud viene impostato automaticamente sulla VM.
  6. Se necessario, apporta ulteriori personalizzazioni della VM.
  7. Per creare e avviare la VM, fai clic su Crea.

gcloud

Per creare una nuova istanza VM e configurarla in modo da utilizzare un account di servizio personalizzato utilizzando Google Cloud CLI, utilizza il comando gcloud compute instances create e fornisci all'istanza VM l'indirizzo email dell'account di servizio e l'ambito di accesso cloud-platform.

gcloud compute instances create VM_NAME \
    --service-account=SERVICE_ACCOUNT_EMAIL \
    --scopes=https://www.googleapis.com/auth/cloud-platform

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.
  • VM_NAME: il nome dell'istanza VM.

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

Puoi anche specificare l'ambito utilizzando l'alias: --scopes=cloud-platform. Questi alias sono riconosciuti solo dallgcloud CLI. L'API e altre librerie non riconoscono questi alias, quindi devi specificare l'URI completo dell'ambito.

Terraform

Per configurare una nuova VM per l'utilizzo di un 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"]
  }
}

REST

Utilizza il metodo instances.insert per creare la VM e specificare l'indirizzo email dell'account di servizio e l'ambito di accesso per l'istanza VM.

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

{
   "machineType":"zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
   "name":"VM_NAME",

   "disks":[
      {
         "initializeParams":{
            "sourceImage":"projects/IMAGE_PROJECT/global/images/IMAGE"
         },
         "boot":true
      }
   ],

   "networkInterfaces":[
      {
         "network":"global/networks/NETWORK_NAME"
      }
   ],

  "serviceAccounts": [
      {
      "email": "SERVICE_ACCOUNT_EMAIL",
      "scopes": ["https://www.googleapis.com/auth/cloud-platform"]
      }
   ],
   "shieldedInstanceConfig":{
      "enableSecureBoot":"ENABLE_SECURE_BOOT"
   }
}

Sostituisci quanto segue:

  • PROJECT_ID: ID del progetto in cui creare la VM
  • ZONE: zona in cui creare la VM
  • MACHINE_TYPE_ZONE: zona contenente il tipo di macchina da utilizzare per la nuova VM
  • MACHINE_TYPE: tipo di macchina, predefinita o personalizzata, per la nuova VM
  • VM_NAME: nome della nuova VM
  • IMAGE_PROJECT: progetto contenente l'immagine
    Ad esempio, se specifichi debian-10 come famiglia di immagini, specifica debian-cloud come progetto di immagini.
  • IMAGE or IMAGE_FAMILY: specifica una delle seguenti opzioni:
    • IMAGE: una versione specifica di un'immagine pubblica
      Ad esempio, "sourceImage": "projects/debian-cloud/global/images/debian-10-buster-v20200309"
    • IMAGE_FAMILY: una famiglia di immagini
      Crea la VM dall'immagine del sistema operativo più recente non deprecata. Ad esempio, se specifichi "sourceImage": "projects/debian-cloud/global/images/family/debian-10", Compute Engine crea una VM dall'ultima versione dell'immagine del sistema operativo nella famiglia di immagini Debian 10.
  • NETWORK_NAME: la rete VPC che vuoi utilizzare per la VM. Puoi specificare default per l'utilizzo della tua rete predefinita.
  • 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, scopri come ottenere l'email di un account di servizio.
  • ENABLE_SECURE_BOOT: facoltativo: se hai scelto un'immagine che supporta le funzionalità delle VM schermate, per impostazione predefinita Compute Engine abilita il Virtual Trusted Platform Module (vTPM) e il monitoraggio dell'integrità. Compute Engine non abilita Avvio protetto per impostazione predefinita.

    Se specifichi true per enableSecureBoot, Compute Engine crea una VM con tutte e tre le funzionalità delle Shielded VM abilitate. Dopo che Compute Engine avvia la VM, devi modificare le opzioni della Shielded VM.

Accedere ad altri servizi Google Cloud e utilizzarli

Dopo che la VM è stata configurata per l'utilizzo dell'account di servizio, le applicazioni possono utilizzarlo per l'autenticazione. Il metodo più comune è l'autenticazione utilizzando Credenziali predefinite dell'applicazione e una libreria client. Alcuni strumenti Google Cloud, come gcloud CLI e gsutil, sono in grado di utilizzare automaticamente l'account di servizio per accedere alle API Google Cloud da una VM. Per ulteriori informazioni, consulta Autenticare i carichi di lavoro utilizzando gli account di servizio.

Se un account di servizio viene eliminato, le applicazioni non avranno più accesso alle risorse Google Cloud tramite quell'account di servizio. Se elimini gli account di servizio predefiniti di App Engine e Compute Engine, le tue VM non avranno più accesso alle risorse del progetto. Se non sai con certezza se un account di servizio sia in uso, Google consiglia di disattivare l'account di servizio prima di eliminarlo. Gli account di servizio disabilitati possono essere riattivati se sono ancora necessari.

Esempio: accedere alle risorse Cloud Storage dalla VM

Dopo aver configurato la tua VM per l'utilizzo di un account di servizio con il ruolo storage.admin, puoi utilizzare strumenti come gcloud CLI e gsutil per gestire i file che hai archiviato in Cloud Storage. Per accedere alle risorse di Cloud Storage, completa quanto segue:

  1. Assicurati che l'account di servizio collegato alla VM abbia il ruolo roles/storage.admin.

  2. Se la tua VM utilizza un'immagine del sistema operativo personalizzata, installa gcloud CLI. Per impostazione predefinita, gcloud CLI è installato sulla maggior parte delle immagini del sistema operativo pubbliche fornite da Google Cloud.

  3. Connettiti alla VM.

  4. Dalla VM, utilizza uno dei seguenti strumenti per gestire le tue risorse Cloud Storage.

Che cosa succede dopo?