Autentica i workload con altri workload tramite mTLS


Questo documento descrive come configurare il provisioning automatico e la gestione del ciclo di vita delle identità dei carichi di lavoro gestite per Compute Engine. Configura i pool di CA per emettere certificati utilizzando Certificate Authority Service (CA), un servizio Google Cloud scalabile e a disponibilità elevata che semplifica e automatizza il deployment, la gestione e la sicurezza dei servizi CA. A ogni VM vengono fornite credenziali X.509 dal pool di CA configurato. Queste credenziali possono essere utilizzate per stabilire connessioni mTLS.

Con le identità dei workload gestite per Compute Engine, puoi implementare comunicazioni autenticate e criptate reciprocamente tra due VM Compute Engine. Le applicazioni del carico di lavoro in esecuzione sulle VM configurate possono utilizzare le credenziali X.509 per mTLS per VM. Questi certificati mTLS vengono ruotati e gestiti automaticamente per te da Certificate Authority Service.

Prima di iniziare

  • Richiedi l'accesso all'anteprima dell'identità del workload gestita.

  • Configura Google Cloud CLI.

    After installing the Google Cloud CLI, initialize it by running the following command:

    gcloud init

    If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  • Configura Google Cloud CLI in modo da utilizzare il progetto consentito per la fatturazione e la quota.

      gcloud config set billing/quota_project PROJECT_ID

    Sostituisci PROJECT_ID con l'ID del progetto che è stato aggiunto alla lista consentita per l'anteprima dell'identità del workload gestita.

  • Consulta la documentazione sulla panoramica delle identità dei workload gestite.
  • Enable the Compute Engine API:

    gcloud services enable compute.googleapis.com

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per creare VM che utilizzano certificati di identità del workload gestita per l'autenticazione ad altri workload, chiedi all'amministratore di concederti i seguenti ruoli IAM per il progetto:

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Panoramica

Per utilizzare le identità dei carichi di lavoro gestite per le tue applicazioni, devi eseguire le seguenti attività:

  1. Amministratore della sicurezza:

  2. Amministratore Compute:

Configurare le identità dei carichi di lavoro gestite in Identity and Access Management

  • Segui le istruzioni riportate in Configurare l'autenticazione delle identità dei workload gestiti .

    Queste istruzioni descrivono in dettaglio come completare le seguenti operazioni:

    • Crea un pool di identità del workload.
    • Crea spazi dei nomi nel pool di identità del workload. Utilizzi gli spazi dei nomi per creare limiti amministrativi per le identità dei carichi di lavoro gestiti, ad esempio uno spazio dei nomi per ciascuna delle applicazioni di proprietà della tua organizzazione.
    • Crea un'identità del workload gestita in uno spazio dei nomi nel pool di identità del workload. Ad esempio, potresti creare uno spazio dei nomi per un'applicazione e creare identità gestite all'interno di questo spazio dei nomi per i microservizi che supportano l'applicazione.
    • Crea un account di servizio. Le VM Compute Engine possono essere autorizzate a ricevere un'identità del workload gestita in base al service account collegato alla VM. Google Cloud
    • Crea un criterio di attestazione del workload che consenta al workload di emettere credenziali per l'identità del workload gestita. Per emettere credenziali per l'identità del workload gestita, il workload deve trovarsi all'interno di un progetto specificato e avere l'account di servizio collegato.
    • Configura Certificate Authority Service per emettere certificati per le identità dei workload gestiti:
      • Configura il pool di CA radice
      • Configura le CA subordinate
      • Autorizza le identità dei workload gestite a richiedere certificati dal pool di CA

Recupera il file di configurazione per caricare i metadati del partner

L'amministratore della sicurezza crea un file JSON contenente:

Il nome di questo file deve essere CONFIGS.json. Utilizzi questo file quando crei un modello di istanza per i gruppi di istanze gestite o quando crei una singola VM.

Il file CONFIGS.json dovrebbe essere simile al seguente:

  {
  "wc.compute.googleapis.com": {
     "entries": {
        "certificate-issuance-config": {
           "primary_certificate_authority_config": {
              "certificate_authority_config": {
                 "ca_pool": "projects/PROJECT_ID/locations/SUBORDINATE_CA_POOL_REGION/caPools/SUBORDINATE_CA_POOL_ID"
              }
           },
           "key_algorithm": "rsa-2048"
        },
        "trust-config": {
           "POOL_ID.global.PROJECT_NUMBER.workload.id.goog": {
               "trust_anchors": [{
                  "ca_pool": "projects/PROJECT_ID/locations/SUBORDINATE_CA_POOL_REGION/caPools/SUBORDINATE_CA_POOL_ID"
                }]
           }
     }
  }
  },
  "iam.googleapis.com": {
     "entries": {
        "workload-identity": "spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID"
     }
  }
  }
  

Abilitare le identità dei carichi di lavoro gestite per un gruppo di istanze gestite (MIG)

Un gruppo di istanze gestite è un gruppo di istanze di macchine virtuali (VM) che tratti come una singola entità. Ogni VM in un gruppo di istanze gestite viene creata utilizzando un modello di istanza. Per consentire alle VM nel MIG di utilizzare le identità dei carichi di lavoro gestite, specifica la configurazione nel modello di istanza.

Crea un modello di istanza

Crea un modello di istanza con la funzionalità identità dei workload gestite abilitata. Poi utilizza questo modello per creare un gruppo di istanze gestite (MIG).

gcloud

Utilizza il comando gcloud beta compute instance-templates create per creare un nuovo modello di istanza che attivi le identità dei carichi di lavoro gestite.

gcloud beta compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --service-account SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --metadata enable-workload-certificate=true \
    --partner-metadata-from-file CONFIGS.json

Puoi aggiungere flag aggiuntivi durante la creazione del modello di istanza per personalizzare le VM create, ad esempio specificando il tipo di macchina e l'immagine, anziché utilizzare i valori predefiniti.

Sostituisci quanto segue:

  • INSTANCE_TEMPLATE_NAME: il nome del nuovo modello.
  • SERVICE_ACCOUNT_NAME: il nome del service account autorizzato a ricevere l'identità gestita.
  • PROJECT_ID: l'ID del progetto in cui è stato creato ilaccount di serviziot.
  • CONFIGS.json: il file di configurazione contenente la configurazione dell'emissione dei certificati, la configurazione dell'attendibilità e l'identità del workload gestita.

Per saperne di più, vedi Creare modelli di istanza.

Crea un gruppo di istanze gestite dal modello

Crea un gruppo di istanze gestite che utilizza un modello di istanza che attiva le identità dei carichi di lavoro gestite. Per informazioni dettagliate su come creare il modello di istanza, vedi Creare un modello di istanza.

gcloud

Crea un gruppo di istanze gestite utilizzando il modello di istanza e il comando gcloud compute instance-groups managed create.

gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --size=SIZE \
    --template=INSTANCE_TEMPLATE_NAME \
    --zone=ZONE

Sostituisci quanto segue:

  • INSTANCE_GROUP_NAME: un ID univoco per il gruppo di istanze gestite. Per informazioni dettagliate sui nomi validi, consulta Denominazione delle risorse.
  • SIZE: la dimensione del gruppo di istanze gestite
  • INSTANCE_TEMPLATE_NAME: il nome del modello di istanza da utilizzare per la creazione delle VM nel MIG.
  • ZONE: la zona in cui creare le VM

Per informazioni dettagliate sulla creazione di MIG, consulta Scenari di base per la creazione di gruppi di istanze gestite (MIG)

Abilita le identità dei carichi di lavoro gestite per le singole VM

Puoi abilitare le identità dei workload gestite per una VM durante la creazione della VM o aggiornando i metadati del partner per una VM esistente.

Crea VM con identità dei workload gestite abilitate

Quando crei una VM, per abilitare la funzionalità delle identità dei workload gestite per la VM, devi:

  • Specifica un account di servizio da utilizzare per la VM
  • Imposta l'attributo dei metadati enable-workload-certificate su true
  • Specifica le informazioni sulla configurazione dell'emissione dei certificati e sulla configurazione dell'attendibilità come metadati del partner.

gcloud

Utilizza il comando gcloud beta compute instances create per creare una nuova VM. Utilizza il file CONFIGS.json fornito dall'amministratore della sicurezza o creato seguendo le istruzioni riportate in Creare un file di configurazione per caricare i metadati del partner.

  1. Crea una VM con la funzionalità di identità dei workload gestite abilitata.

    gcloud beta compute instances create INSTANCE_NAME \
       --zone=INSTANCE_ZONE \
       --service-account SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
       --metadata enable-workload-certificate=true \
       --partner-metadata-from-file CONFIGS.json
    

    Puoi aggiungere altre righe al comando per configurare la VM, ad esempio il tipo di macchina e l'immagine, anziché utilizzare i valori predefiniti. Per ulteriori informazioni, consulta Crea e avvia un'istanza VM.

    Sostituisci quanto segue:

    • INSTANCE_NAME: un nome univoco per la VM. Per informazioni dettagliate sui nomi delle istanze validi, consulta Denominazione delle risorse.
    • INSTANCE_ZONE: la zona in cui creare la VM.
    • SERVICE_ACCOUNT_NAME: il nome dell'account di servizio autorizzato a ricevere l'identità gestita.
    • PROJECT_ID: l'ID del progetto in cui è stato creato ilaccount di serviziot.
    • CONFIGS.json: il nome del file di configurazione che contiene la configurazione di emissione dei certificati, la configurazione di attendibilità e la configurazione dell'identità del workload gestita.

Abilitare le identità dei carichi di lavoro gestite sulle VM esistenti

Per abilitare le identità dei carichi di lavoro gestite per una VM esistente, aggiorna la VM per configurare quanto segue:

  • Se la VM non ha già un account di servizio collegato, creane uno e collegalo alla VM.
  • Imposta l'attributo dei metadati enable-workload-certificate su true.
  • Specifica le informazioni di configurazione dell'emissione dei certificati e dell'attendibilità come metadati del partner.
  • Riavvia la VM.

gcloud

Questa attività utilizza il file CONFIGS.json fornito dall'amministratore della sicurezza o creato seguendo le istruzioni riportate in Creare un file di configurazione per caricare i metadati del partner.

  1. Se la VM non ha già un account di servizio collegato, collega ilaccount di serviziot alla VM.

  2. Aggiorna i metadati di una VM esistente per abilitare le identità dei workload gestite.

    gcloud beta compute instances add-metadata VM_NAME \
       --zone=ZONE \
       --metadata enable-workload-certificate=true
    

    Sostituisci quanto segue:

    • VM_NAME: il nome della VM
    • ZONE: la zona in cui si trova la VM
  3. Aggiorna la configurazione di una VM esistente per aggiungere il file di configurazione.

    gcloud beta compute instances update VM_NAME \
       --zone=ZONE \
       --partner-metadata-from-file CONFIGS.json
    

    Sostituisci quanto segue:

    • VM_NAME: il nome della VM
    • ZONE: la zona in cui si trova la VM
    • CONFIGS.json: il file di configurazione contenente la configurazione dell'emissione dei certificati, la configurazione dell'attendibilità e l'identità del workload gestita.
  4. Arresta la VM.

    gcloud beta compute instances stop VM_NAME \
       --zone=ZONE
    

    Sostituisci quanto segue:

    • VM_NAME: il nome della VM
    • ZONE: la zona in cui si trova la VM.
  5. Avvia la VM.

    gcloud beta compute instances start VM_NAME \
       --zone=ZONE
    

    Sostituisci quanto segue:

    • VM_NAME: il nome della VM
    • ZONE: la zona in cui si trova la VM.

Accedere alle credenziali del carico di lavoro su una VM Linux

Dopo aver configurato correttamente l'autenticazione da workload a workload utilizzando mTLS, puoi accedere alle credenziali emesse sulla tua VM.

Esistono due modi per accedere alle credenziali dell'identità del workload gestita da Compute Engine e al bundle di attendibilità associato:

  • Il file system sulla VM
  • Il server metadati di Compute Engine

Accedere alle credenziali del workload e al bundle di attendibilità utilizzando il file system sulla VM

Questo metodo inserisce le credenziali X.509 e il bundle di attendibilità in un percorso specifico all'interno del file system della VM. Le applicazioni possono leggere direttamente le credenziali e il bundle di attendibilità dal file system. Per esempi su come recuperare le credenziali, consulta gli esempi seguenti su GitHub:

La VM deve eseguire la versione 20231103.01 o successive dell'agente guest di Compute Engine. Utilizza il seguente comando per controllare la versione dell'agente guest di Compute Engine sulla tua VM:

gcloud beta compute instances get-serial-port-output INSTANCE_NAME \
   --zone=ZONE | grep "GCE Agent Started"

Se la versione dell'agente guest è precedente alla 20231103.01, puoi aggiornarla seguendo le istruzioni riportate in Aggiornamento dell'ambiente guest.

Per rendere disponibili le credenziali del workload e il bundle di attendibilità nel file system di una VM, completa i seguenti passaggi:

  1. Installa o aggiorna l'agente guest di Compute Engine alla versione 20231103.01 o successive. L'agente guest esegue le seguenti operazioni:

    • Recupera automaticamente le credenziali e il bundle di attendibilità dal server di metadati di Compute Engine.
    • Garantisce scritture atomiche nel file system durante l'aggiornamento del certificato X.509 e della chiave privata corrispondente.
    • Aggiorna automaticamente le credenziali e il bundle di attendibilità, ad esempio, quando i certificati mTLS vengono ruotati.
  2. Dopo aver installato o aggiornato l'agente guest di Compute Engine sul sistema operativo guest, il job di aggiornamento del workload crea la directory /var/run/secrets/workload-spiffe-credentials e imposta le autorizzazioni della directory su 0755 (rwxr-xr-x).

    La directory contiene i seguenti file creati con le autorizzazioni 0644 (rw-r--r--):

    • private_key.pem: una chiave privata in formato PEM
    • certificates.pem: un bundle di certificati X.509 in formato PEM che possono essere presentati ad altre VM come catena di certificati client o utilizzati come catena di certificati server.
    • ca_certificates.pem: un bundle di certificati X.509 in formato PEM da utilizzare come ancore di attendibilità durante la convalida dei certificati dei peer.

      spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog
      
    • config_status: un file di log contenente messaggi di errore.

  3. Le applicazioni possono leggere i certificati, la chiave privata e il bundle di attendibilità direttamente dal file system per stabilire connessioni mTLS.

Accedere alle credenziali del workload e al bundle di attendibilità utilizzando il server metadati

Un'applicazione in esecuzione su una VM Compute Engine può interrogare direttamente gli endpoint del server di metadati e recuperare le credenziali e il bundle di attendibilità. L'applicazione è responsabile del controllo periodico degli endpoint del server dei metadati per nuove credenziali e aggiornamenti del bundle di attendibilità.

Il server di metadati di Compute Engine espone tre endpoint HTTP per consentire l'utilizzo della funzionalità di identità dei workload gestita da applicazioni in esecuzione all'interno della VM.

  • gce-workload-certificates/config-status: un endpoint contenente eventuali errori nei valori di configurazione forniti tramite i metadati della VM.
  • gce-workload-certificates/workload-identities: un endpoint di identità gestite dal piano di controllo di Compute Engine. Questo endpoint contiene il certificato X.509 e la chiave privata per il dominio di attendibilità della VM.
  • gce-workload-certificates/trust-anchors: un endpoint contenente un insieme di certificati attendibili per la convalida della catena di certificati X.509 peer.

Per scoprire di più sull'esecuzione di query sui metadati di un'istanza VM, consulta Informazioni sui metadati della VM.

Per accedere alle credenziali del workload e al bundle di attendibilità utilizzando il server di metadati, l'applicazione deve:

  1. Esegui una query sull'endpoint gce-workload-certificates/config-status. Assicurati che il codice di risposta HTTP sia 200 e che la risposta non contenga errori partnerMetadataConfigsErrors. Se esistono errori di questo tipo, aggiorna la configurazione appropriata con valori validi seguendo i passaggi descritti in Aggiornare la configurazione dell'emissione e dell'attendibilità dei certificati.

    Per controllare il valore, puoi eseguire il seguente comando sulla VM:

    curl "http://metadata.google.internal/computeMetadata/v1/instance/gce-workload-certificates/config-status" -H "Metadata-Flavor: Google"
    

    L'endpoint config-status restituisce una risposta JSON con la seguente struttura:

    {
        "partnerMetadataConfigsErrors": {
            "errors": {  // A map of errors keyed by attribute name.
                "ATTRIBUTE_NAME" : "ERROR_DETAILS",
                ...
            }
        }
    }
    
  2. Esegui una query sull'endpoint gce-workload-certificates/workload-identities. Assicurati che il codice di risposta HTTP sia 200. L'endpoint restituisce una risposta JSON con la seguente struttura:

    {
     "workloadCredentials": {  // Credentials for the VM's trust domains
       "spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID": {
          "certificatePem" : "X.509 certificate or certificate chain",
          "privateKeyPem" : "Private for X.509 leaf certificate"
       }
     }
    }
    

    Estrai certificatePem e privateKeyPem. È fondamentale che entrambi i valori vengano letti dalla stessa risposta per evitare una mancata corrispondenza tra la chiave privata e quella pubblica nel caso in cui le identità dei workload gestiti siano state aggiornate dall'infrastruttura Compute Engine.

  3. Esegui una query sull'endpoint gce-workload-certificates/trust-anchors. Assicurati che il codice di risposta HTTP sia 200. La risposta conterrà solo gli ancoraggi attendibili per il dominio attendibile SPIFFE, se specificato. In caso contrario, la query restituisce un errore. L'endpoint trust-anchors restituisce una risposta JSON con la seguente struttura:

    {
        "trustAnchors": {  // Trust bundle for the VM's trust domains
            "POOL_ID.global.PROJECT_NUMBER.workload.id.goog": {
                "trustAnchorsPem" : "Trust bundle containing the X.509
                roots certificates"
            }
        }
    }
    

    I contenuti di trustAnchorsPem contengono il bundle di attendibilità che può essere utilizzato per autenticare le credenziali X.509 peer durante la creazione di una connessione mTLS.

Aggiornamento delle credenziali e del bundle di attendibilità

Il control plane di Compute Engine ruota automaticamente le credenziali dell'identità del carico di lavoro gestito e gli ancoraggi attendibili periodicamente.

Se le tue applicazioni utilizzano il file system per accedere alle credenziali del carico di lavoro e al bundle di attendibilità, l'agente guest Compute Engine aggiorna automaticamente le credenziali e il bundle di attendibilità, ad esempio quando i certificati mTLS vengono ruotati.

Se le tue applicazioni eseguono query sul server dei metadati, quelle in esecuzione su una VM devono eseguire query periodiche sugli endpoint del server dei metadati per ottenere l'ultimo set di credenziali dell'identità del workload gestita e il bundle di attendibilità. In caso contrario, le applicazioni potrebbero non funzionare a causa della scadenza del certificato o di modifiche al bundle di attendibilità, che possono causare errori di stabilimento della connessione mTLS. Google consiglia alle applicazioni di eseguire query sul server dei metadati per le credenziali dell'identità del workload gestita e il bundle di attendibilità ogni 5 minuti.

Aggiorna la configurazione dell'emissione e dell'attendibilità dei certificati

Puoi modificare la configurazione dell'emissione dei certificati e la configurazione dell'attendibilità per una VM che utilizza identità dei workload gestite.

Aggiorna il modello di istanza per un gruppo di istanze gestite

Per aggiornare i valori di configurazione dell'emissione e dell'attendibilità dei certificati in un modello di istanza, devi creare un nuovo modello con i nuovi valori. Pertanto, l'aggiornamento della configurazione dell'emissione dei certificati e della configurazione dell'attendibilità per i gruppi di istanze gestite (MIG) esistenti non è supportato.

Aggiorna singole VM di Compute Engine

Per aggiornare la configurazione dell'emissione dei certificati e la configurazione dell'attendibilità, aggiorna i contenuti del file CONFIGS.json e utilizza il comando gcloud beta compute instances update per applicare gli aggiornamenti:

gcloud beta compute instances update INSTANCE_NAME \
    --partner-metadata-from-file FILENAME.json

Sostituisci quanto segue:

  • INSTANCE_NAME: Il nome della VM per cui stai aggiornando i valori di configurazione
  • FILENAME: Il nome del file di configurazione modificato, ad esempio CONFIGS.json

Risoluzione dei problemi

Per trovare metodi per diagnosticare e risolvere gli errori comuni relativi al recupero delle credenziali del workload, consulta la documentazione Risolvi i problemi relativi all'autenticazione dei workload.

Passaggi successivi