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

Questo documento descrive come configurare il provisioning automatico e il ciclo di vita delle identità dei carichi di lavoro gestiti per Compute Engine. Tu configurare i pool di CA per l'emissione di certificati utilizzando Certificate Authority Service (CA) un servizio Google Cloud scalabile e a disponibilità elevata che semplifica automatizza il deployment, la gestione e la sicurezza dei servizi CA. Ogni VM viene eseguito il provisioning con le credenziali X.509 del pool di CA configurato. Questi le credenziali possono essere usate per stabilire connessioni mTLS.

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

Prima di iniziare

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

  • Configura Google Cloud CLI.

    Installa Google Cloud CLI, quindi initialize eseguendo questo comando:

    gcloud init
  • Configura Google Cloud CLI in modo da utilizzare il progetto nella lista consentita per la fatturazione 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 di Workload Identity gestito.

  • Esamina il Panoramica delle identità dei carichi di lavoro gestiti documentazione.
  • 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 identità per i carichi di lavoro gestiti per l'autenticazione su altri carichi di lavoro, chiedi all'amministratore di concederti seguenti ruoli IAM sul progetto:

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

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

Panoramica

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

  1. Amministratore della sicurezza:

  2. Amministratore computing:

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

  • Segui le istruzioni in Configura l'autenticazione delle identità dei carichi di lavoro gestite .

    Queste istruzioni spiegano come completare le seguenti operazioni:

    • Crea un pool di identità per i carichi di lavoro.
    • Crea spazi dei nomi nel pool di identità per i carichi di lavoro. Puoi utilizzare gli spazi dei nomi creare confini amministrativi per le identità dei carichi di lavoro gestiti, uno spazio dei nomi per ciascuna delle applicazioni di proprietà dell'organizzazione.
    • Crea un'identità Workload Identity gestita in uno spazio dei nomi in Workload Identity piscina. Ad esempio, puoi creare uno spazio dei nomi per un'applicazione creano identità gestite all'interno dello spazio dei nomi per i microservizi la relativa applicazione.
    • Crea un account di servizio. Le VM di Compute Engine possono essere autorizzate Ricevere un'identità dei carichi di lavoro gestita basata sul servizio Google Cloud collegato alla VM.
    • Crea un criterio di attestazione del carico di lavoro che consenta l'emissione del carico di lavoro e credenziali per l'identità dei carichi di lavoro gestiti. Per emettere le credenziali per l'identità dei carichi di lavoro gestiti, il carico di lavoro deve trovarsi in una a cui è collegato l'account di servizio.
    • Configura Certificate Authority Service per emettere certificati per il carico di lavoro gestito identità:
      • Configura il pool di CA radice
      • Configura le CA subordinate
      • Autorizza le identità dei carichi di lavoro gestiti a richiedere i 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:

Questo file deve essere denominato CONFIGS.json. Devi usare questo file per creare per i gruppi di istanze gestite o quando si crea 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 un'unica entità. Ogni VM in un gruppo di istanze gestite viene creata 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 è abilitata la funzionalità delle identità per carichi di lavoro gestiti. Poi utilizza questo modello per creare gruppo di istanze gestite (MIG, Managed Instance Group).

gcloud

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

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 ulteriori flag durante la creazione del modello di istanza personalizzare le VM che crea, 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 servizio a cui è consentito ricevere l'identità gestita.
  • PROJECT_ID: l'ID del progetto in cui si trova l'account di servizio è stata creata.
  • CONFIGS.json: il file di configurazione contenente dell'emissione dei certificati, la configurazione dell'attendibilità l'identità dei carichi di lavoro gestiti.

Per ulteriori informazioni, 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 abilita le identità dei carichi di lavoro gestiti. Per maggiori dettagli su come creare il modello di istanza, consulta Crea un modello di istanza.

gcloud

Crea un gruppo di istanze gestite utilizzando il modello di istanza 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 sui nomi validi, consulta Risorse dei nomi.
  • SIZE: la dimensione del gruppo di istanze gestite
  • INSTANCE_TEMPLATE_NAME: il nome del modello di istanza da utilizzare quando creando 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 aggiornando i metadati del partner per una VM esistente.

Crea VM con le identità dei carichi di lavoro gestiti abilitate

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

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

gcloud

Usa il comando gcloud beta compute instances create per creare una nuova VM. Usa il file CONFIGS.json fornito dal team di sicurezza amministratore o creato seguendo le istruzioni in Crea un file di configurazione per caricare i metadati del partner.

  1. Crea una VM con la funzionalità delle identità dei carichi di lavoro gestiti 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. come il tipo di macchina e l'immagine, invece di utilizzare i valori predefiniti. Per ulteriori informazioni, vedi Crea e avvia un'istanza VM.

    Sostituisci quanto segue:

    • INSTANCE_NAME: un nome univoco per la VM. Per maggiori dettagli su nomi di istanze validi, consulta Nome delle risorse.
    • INSTANCE_ZONE: la zona in cui creare la VM.
    • SERVICE_ACCOUNT_NAME: il nome dell'account di servizio a cui è consentito ricevere l'identità gestita.
    • PROJECT_ID: l'ID del progetto in cui si trova l'account di servizio è stata creata.
    • CONFIGS.json: il nome del file di configurazione che contiene la configurazione dell'emissione dei certificati, e la configurazione gestita di Workload Identity.

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 in configurare quanto segue:

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

gcloud

Questa attività utilizza il file CONFIGS.json fornito dal tuo addetto alla sicurezza amministratore o creato seguendo le istruzioni in Crea un file di configurazione per caricare i metadati del partner.

  1. Se alla VM non è già collegato un account di servizio, di collegare l'account di servizio alla VM.

  2. Aggiorna i metadati per una VM esistente per abilitare delle identità dei carichi di lavoro gestiti.

    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 dell'emissione dei certificati, la configurazione dell'attendibilità l'identità dei carichi di lavoro gestiti.
  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. Avviare 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.

Accedi alle credenziali del carico di lavoro su una VM Linux

Dopo aver configurato correttamente il carico di lavoro per l'autenticazione tramite mTLS, puoi accedere alle credenziali emesse sulla tua VM.

Esistono due modi per accedere all'identità dei carichi di lavoro gestita di Compute Engine credenziali e il bundle di attendibilità associato:

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

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

Questo metodo posiziona le credenziali X.509 e il pacchetto 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 e credenziali, vedi i seguenti esempi su GitHub:

La VM deve eseguire l'agente guest di Compute Engine versione 20231103.01 o successiva. Utilizza il comando seguente per verificare la versione del guest 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 aggiornare seguendo le istruzioni in Aggiornamento dell'ambiente guest.

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

  1. Installa o aggiorna il Agente ospite Compute Engine alla versione 20231103.01 o successiva. L'agente ospite effettua le seguenti operazioni:

    • Recupera automaticamente le credenziali e il pacchetto di attendibilità dal il server di metadati di Compute Engine.
    • Garantisce scritture atomiche sul file system durante l'aggiornamento di X.509 e la 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 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 la directory autorizzazioni per 0755 (rwxr-xr-x).

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

    • private_key.pem: una chiave privata in formato PEM
    • certificates.pem: un bundle di certificati X.509 in formato PEM che possono essere presentate ad altre VM come catena di certificati client oppure utilizzate come una catena di certificati server.
    • ca_certificates.pem: un bundle di certificati X.509 in formato PEM per 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à da direttamente il file system per stabilire connessioni mTLS.

Accedi alle credenziali e al bundle di attendibilità 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 di metadati e recuperare le credenziali e il pacchetto di attendibilità. La dell'applicazione è responsabile della verifica periodica del server metadati per le nuove credenziali e gli aggiornamenti del bundle di attendibilità.

Il server di metadati di Compute Engine espone tre endpoint HTTP da abilitare l'uso della funzionalità delle identità per carichi di lavoro gestiti da parte delle applicazioni che eseguono all'interno della VM.

  • gce-workload-certificates/config-status: un endpoint contenente 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 saperne di più sull'esecuzione di query sui metadati per un'istanza VM, consulta Informazioni sui metadati della VM.

Per accedere alle credenziali e al bundle di attendibilità del carico di lavoro utilizzando il server dei metadati, la tua applicazione dovrebbe:

  1. Esegui una query sull'endpoint gce-workload-certificates/config-status. Assicurati che il codice di risposta HTTP è 200 e la risposta non contiene partnerMetadataConfigsErrors errori. Se sono presenti errori di questo tipo, aggiorna configurazione appropriata con valori validi seguendo i passaggi descritti in Aggiornare la configurazione dell'emissione dei certificati e 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 le seguenti informazioni: 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 i valori certificatePem e privateKeyPem. È fondamentale che entrambi i valori vengono letti dalla stessa risposta per evitare una mancata corrispondenza tra i valori chiave pubblica e privata nel caso in cui le identità dei carichi di lavoro gestiti siano state aggiornate dell'infrastruttura Compute Engine.

  3. Esegui una query sull'endpoint gce-workload-certificates/trust-anchors. Assicurati che il codice di risposta HTTP è 200. La risposta conterrà solo l'attendibilità ancoraggi per il dominio di attendibilità SPIFFE, se specificato. Altrimenti, la query restituisce un errore. L'endpoint trust-anchors restituisce una risposta JSON con 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 includono il bundle di attendibilità che può quindi essere utilizzato per autenticare le credenziali peer X.509 quando stabilisce una connessione mTLS connessione.

Aggiornamento del pacchetto di credenziali e attendibilità in corso...

Il piano di controllo di Compute Engine ruota automaticamente il carico di lavoro gestito le credenziali di identità e i trust anchor.

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

Se le tue applicazioni interrogano il server metadati, le applicazioni in esecuzione una VM deve eseguire periodicamente query sugli endpoint del server di metadati per ottenere l'ultima serie delle credenziali di identità per i carichi di lavoro gestiti e del bundle di attendibilità. Mancata attestazione può interrompere le applicazioni a causa della scadenza del certificato o di modifiche all'attendibilità che può causare errori nella connessione mTLS. Google consiglia alle applicazioni di eseguire query sul server dei metadati per trovare le credenziali di Workload Identity e il bundle di attendibilità ogni 5 minuti.

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

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

Aggiorna il modello di istanza per un gruppo di istanze gestite

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

Aggiorna singole VM di Compute Engine

Per aggiornare la configurazione dell'emissione dei certificati e dell'attendibilità, aggiorna il i contenuti del file CONFIGS.json e usa 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 e configurare i valori di configurazione
  • FILENAME: nome del file di configurazione modificato, ad esempio CONFIGS.json

Risoluzione dei problemi

Per trovare metodi per diagnosticare e risolvere gli errori comuni relativi a il recupero delle credenziali dei carichi di lavoro, Risolvere i problemi relativi all'autenticazione dai carichi di lavoro ai carichi di lavoro documentazione.

Passaggi successivi