Autentica i carichi di lavoro in altri carichi di lavoro tramite mTLS

Questo documento descrive come configurare il provisioning automatico e la gestione del ciclo di vita delle identità dei carichi di lavoro gestiti per Compute Engine. Per emettere i certificati, puoi configurare i pool di CA 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 viene eseguito il provisioning con credenziali X.509 dal pool di CA configurato. Queste credenziali possono essere quindi utilizzate per stabilire connessioni mTLS.

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

Prima di iniziare

  • Richiedi l'accesso all'anteprima di Workload Identity gestito.

  • Configurare Google Cloud CLI.

    Installa Google Cloud CLI, quindi initialize eseguendo questo comando:

    gcloud init
  • Configura Google Cloud CLI per utilizzare il progetto nella lista consentita per la fatturazione e la quota.

      gcloud config set billing/quota_project PROJECT_ID

    Sostituisci PROJECT_ID con l'ID del progetto aggiunto alla lista consentita per l'anteprima di Workload Identity gestito.

  • Consulta la documentazione della panoramica sulle identità dei carichi di lavoro gestiti.
  • Attiva l'API Compute Engine.

    gcloud services enable compute.googleapis.com

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per creare VM che utilizzano certificati di Workload Identity gestiti per l'autenticazione su altri carichi di lavoro, chiedi all'amministratore di concederti i seguenti ruoli IAM sul progetto:

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

Potresti anche essere in grado di ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Panoramica

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

  1. Amministratore della sicurezza:

  2. Amministratore Compute:

Configura le identità dei carichi di lavoro gestiti in Identity and Access Management

  • Segui le istruzioni in Configurare l'autenticazione delle identità per i carichi di lavoro gestiti .

    Queste istruzioni spiegano in dettaglio come completare le seguenti operazioni:

    • Crea un pool di identità per i carichi di lavoro.
    • Crea spazi dei nomi nel pool Workload Identity. Puoi utilizzare gli spazi dei nomi per creare confini 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 carico di lavoro gestita in uno spazio dei nomi nel pool di identità per i carichi di lavoro. Ad esempio, puoi 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. È possibile autorizzare le VM di Compute Engine a ricevere un'identità dei carichi di lavoro gestita in base all'account di servizio Google Cloud collegato alla VM.
    • Crea un criterio di attestazione dei carichi di lavoro che consenta di inviare al carico di lavoro le credenziali per l'identità del carico di lavoro gestita. Per generare le credenziali per l'identità del carico di lavoro gestito, il carico di lavoro 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 carichi di lavoro gestiti:
      • Configura il pool di CA radice
      • Configura le CA subordinate
      • Autorizza le identità dei carichi di lavoro gestiti per richiedere certificati dal pool di CA

Ottieni il file di configurazione per caricare i metadati del partner

L'amministratore della sicurezza crea un file JSON contenente quanto segue:

Il nome di questo file deve essere CONFIGS.json. Puoi utilizzare questo file per creare un modello di istanza per i gruppi di istanze gestite o 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"
     }
  }
  }
  

Abilita le identità dei carichi di lavoro gestiti per un gruppo di istanze gestite

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

Crea un modello di istanza

Crea un modello di istanza con la funzionalità delle identità dei carichi di lavoro gestiti abilitata. Quindi utilizza questo modello per creare un gruppo di istanze gestite.

gcloud

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

gcloud alpha 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 ulteriori flag 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 dell'account di servizio autorizzato a ricevere l'identità gestita.
  • PROJECT_ID: l'ID del progetto in cui è stato creato l'account di servizio.
  • CONFIGS.json: il file di configurazione contenente la configurazione di emissione dei certificati, la configurazione di attendibilità e l'identità del carico di lavoro gestito.

Per maggiori informazioni, consulta 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 abilita le identità dei carichi di lavoro gestiti. Per maggiori dettagli su come creare il modello di istanza, consulta 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 del gruppo di istanze gestite. Per maggiori dettagli sui nomi validi, consulta Risorse relative ai nomi.
  • SIZE: la dimensione del gruppo di istanze gestite
  • INSTANCE_TEMPLATE_NAME: il nome del modello di istanza da utilizzare durante la creazione di VM nel gruppo di istanze gestite.
  • ZONE: la zona in cui creare le VM

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

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

Puoi abilitare le identità dei carichi di lavoro gestiti per una VM durante la creazione della VM o tramite l'aggiornamento dei metadati del partner per una VM esistente.

Creazione di VM con identità dei carichi di lavoro gestite abilitate

Quando crei una VM, per abilitare la funzionalità delle identità dei carichi di lavoro gestiti per la VM:

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

gcloud

Utilizza il comando gcloud alpha 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à delle identità dei carichi di lavoro gestite abilitata.

    gcloud alpha 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
    

    Invece di utilizzare i valori predefiniti, puoi aggiungere altre righe al comando per configurare la VM, ad esempio il tipo di macchina e l'immagine. Per maggiori informazioni, consulta Creare e avviare un'istanza VM.

    Sostituisci quanto segue:

    • INSTANCE_NAME: nome univoco della VM. Per maggiori dettagli sui nomi delle istanze validi, consulta Assegnazione dei nomi alle risorse.
    • INSTANCE_ZONE: la zona in cui creare la VM.
    • SERVICE_ACCOUNT_NAME: il nome dell'account di servizio che può ricevere l'identità gestita.
    • PROJECT_ID: l'ID del progetto in cui è stato creato l'account di servizio.
    • CONFIGS.json: nome del file di configurazione che contiene la configurazione di emissione del certificato, la configurazione di attendibilità e la configurazione dell'identità dei carichi di lavoro gestiti.

Abilita le identità dei carichi di lavoro gestiti sulle VM esistenti

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

  • Imposta l'attributo dei metadati enable-workload-certificate su true
  • Specifica la configurazione di emissione del certificato e le informazioni di configurazione di attendibilità come metadati del partner.

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. Aggiornare la configurazione di una VM esistente per abilitare le identità dei carichi di lavoro gestiti.

    gcloud alpha compute instances update VM_NAME \
       --zone=ZONE \
       --metadata enable-workload-certificate=true \
       --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 di emissione dei certificati, la configurazione di attendibilità e l'identità del carico di lavoro gestito.

Accesso alle credenziali del carico di lavoro su una VM Linux

Dopo aver configurato correttamente il carico di lavoro per l'autenticazione dei carichi di lavoro utilizzando mTLS, puoi accedere alle credenziali applicate sulla VM.

Esistono due modi per accedere alle credenziali di identità per i carichi di lavoro gestite di Compute Engine e al bundle di attendibilità associato:

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

Accedi al bundle di attendibilità e credenziali del carico di lavoro utilizzando il file system nella VM

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

La VM deve eseguire l'agente guest Compute Engine versione 20231103.01 o successiva. Utilizza il comando seguente per verificare la versione dell'agente guest Compute Engine sulla VM:

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

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

Per rendere disponibili le credenziali del carico di lavoro e il bundle di attendibilità nel file system di una VM, completa questi passaggi:

  1. Installa o aggiorna l'agente ospite di Compute Engine alla versione 20231103.01 o successive. L'agente ospite procede nel seguente modo:

    • Recupera automaticamente le credenziali e il bundle di attendibilità dal server metadati di Compute Engine.
    • Garantisce che l'atomica scriva sul 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 ospite Compute Engine sul sistema operativo guest, il job di aggiornamento del carico di lavoro 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 può essere presentato ad altre VM come catena di certificati client oppure utilizzato come catena di certificati server.
    • ca_certificates.pem: un bundle di certificati X.509 in formato PEM da utilizzare come trust anchor 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.

Accedi al pacchetto di attendibilità e credenziali del carico di lavoro utilizzando il server dei metadati

Un'applicazione in esecuzione su una VM di Compute Engine può eseguire una query sugli endpoint del server dei metadati direttamente e recuperare le credenziali e il bundle di attendibilità. L'applicazione è responsabile di controllare periodicamente gli endpoint del server di metadati per verificare la presenza di nuove credenziali e aggiornamenti del bundle di attendibilità.

Il server metadati di Compute Engine espone tre endpoint HTTP per consentire l'uso della funzionalità delle identità dei carichi di lavoro gestite da parte delle applicazioni in esecuzione all'interno della VM.

  • gce-workload-certificates/config-status: un endpoint che contiene 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 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 che contiene un set di certificati attendibili per la convalida della catena di certificati peer X.509.

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

Per accedere al bundle di attendibilità e credenziali del carico di lavoro utilizzando il server dei 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 l'emissione dei certificati e la configurazione dell'attendibilità.

    Per verificare il valore, puoi eseguire il comando seguente 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 mancate corrispondenze tra la chiave privata e quella pubblica nel caso in cui le identità dei carichi di lavoro gestiti siano state aggiornate dall'infrastruttura di 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 anchor trust per il dominio trust 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"
            }
        }
    }
    

    Il contenuto di trustAnchorsPem contiene il bundle di attendibilità che può essere utilizzato per autenticare le credenziali X.509 del peer quando si stabilisce una connessione mTLS.

Aggiornamento delle credenziali e del bundle di attendibilità

Il piano di controllo di Compute Engine ruota automaticamente e periodicamente le credenziali di Workload Identity gestite e i trust anchor.

Se le tue applicazioni utilizzano il file system per accedere al bundle di attendibilità e credenziali del carico di lavoro, 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 di metadati, le applicazioni in esecuzione su una VM devono eseguire periodicamente query sugli endpoint del server di metadati per ottenere il set più recente di credenziali di Workload Identity gestite e il bundle di attendibilità. In caso contrario, le applicazioni potrebbero non funzionare a causa della scadenza del certificato o delle modifiche al bundle di attendibilità, che può causare la mancata connessione della connessione mTLS. Google consiglia alle applicazioni di eseguire query sul server dei metadati per ottenere le credenziali dell'identità del carico di lavoro gestito e del bundle di attendibilità ogni 5 minuti.

Aggiorna la configurazione di emissione e attendibilità dei certificati

Puoi modificare la configurazione di emissione dei certificati e la configurazione di attendibilità per una VM che utilizza identità dei carichi di lavoro gestiti.

Aggiorna il modello di istanza per un gruppo di istanze gestite

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

Aggiorna singole VM di Compute Engine

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

gcloud alpha 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

Risolvere i problemi

Per individuare i metodi per diagnosticare e risolvere gli errori comuni relativi al recupero delle credenziali dei carichi di lavoro, consulta la documentazione relativa alla risoluzione dei problemi relativi all'autenticazione dei carichi di lavoro per i carichi di lavoro.

Passaggi successivi