Risolvi i problemi relativi all'autenticazione dei workload

Questo documento spiega come risolvere gli errori comuni relativi a Autentica i workload con altri workload tramite mTLS.

Per ulteriori informazioni, consulta Risolvere i problemi relativi alla federazione delle identità per i carichi di lavoro.

Prima di iniziare

  • Se non l'hai ancora fatto, configura l'autenticazione. L'autenticazione verifica la tua identità per l'accesso ad API e servizi Google Cloud . Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su Compute Engine selezionando una delle seguenti opzioni:
    1. Installa Google Cloud CLI. Dopo l'installazione, inizializza Google Cloud CLI eseguendo il comando seguente:

      gcloud init

      Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

    2. Imposta una regione e una zona predefinite.

La directory delle credenziali generate non esiste

Se ricevi un messaggio di errore che indica che la directory /var/run/secrets/workload-spiffe-credentials non esiste, procedi nel seguente modo:

  1. Assicurati che la tua istanza di computing supporti l'autenticazione da workload a workload utilizzando una delle seguenti interfacce per verificare che le identità dei workload gestite siano abilitate:

    Console

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

      Vai a Istanze VM

    2. Nella colonna Nome della pagina Istanze VM, fai clic sul nome dell'istanza per visualizzare ulteriori dettagli.

    3. Nella sezione Sicurezza e accesso della pagina Dettagli, verifica che "Certificati di identità del workload" abbia il valore "Attivato".

    gcloud

    Per verificare se la funzionalità Workload Identity gestite è abilitata per un'istanza di computing, utilizza il comando gcloud alpha compute instances describe.

    gcloud alpha compute instances describe INSTANCE_NAME \
        --zone=ZONE \
        --format="table(name,zone,identityCertificate)"
    

    Sostituisci quanto segue:

    • INSTANCE_NAME: il nome dell'istanza

    • ZONE: la zona in cui si trova l'istanza

    REST

    Per visualizzare i dettagli di un'istanza di Compute, invia una richiesta GET al metodo instances.get. Se aggiungi un parametro di query $fields alla richiesta, puoi limitare l'output ai soli campi di interesse.

    GET https://compute.googleapis.com/compute/alpha/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME$fields=name,identityCertificate,identity
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del progetto in cui si trova l'istanza

    • ZONE: la zona in cui si trova l'istanza

    • INSTANCE_NAME: il nome dell'istanza

  2. Esamina i valori delle istanze per identityCertificate e identity.

  3. Se la proprietà identityCertificate è impostata su false, questa istanza di calcolo non supporta questa funzionalità.

    Per risolvere il problema, crea una nuova istanza che supporti l'autenticazione da workload a workload. Per maggiori dettagli, vedi Abilitare le identità dei workload gestite sulle VM esistenti.

  4. Assicurati che la VM esegua un sistema operativo guest con l'agente guest di Compute Engine versione 20231103.01 o successive. Utilizza gcloud CLI per visualizzare l'output della porta seriale per determinare la versione attuale dell'agente guest di Compute Engine:

    gcloud compute instances get-serial-port-output INSTANCE_NAME | grep "GCE Agent Started"
    

    Sostituisci INSTANCE_NAME con il nome dell'istanza di Compute.

    Per aggiornare l'agente guest di Compute Engine, consulta Aggiornamento dell'ambiente guest.

  5. Controlla i log del servizio per verificare che il timer gce-workload-cert-refresh.timer systemd sia riuscito a recuperare le credenziali del workload e il bundle di attendibilità.

    # View timer logs to see when the gce-workload-cert-refresh.timer last ran
    journalctl -u gce-workload-cert-refresh.timer
    
    # View service logs from gce-workload-cert-refresh.service
    journalctl -u gce-workload-cert-refresh.service
    

La directory delle credenziali generate contiene solo il file config_status

La directory delle credenziali generate, /var/run/secrets/workload-spiffe-credentials, potrebbe contenere solo config_status per una serie di motivi. Per risolvere il problema, segui questi passaggi.

  1. Controlla i contenuti del file config_status per assicurarti che la funzionalità Identità dei workload gestita sia abilitata. Se la funzionalità non è attivata utilizzando i valori appropriati, il file di log contiene il messaggio di errore workload certificate feature not enabled.

    Per risolvere il problema, crea una nuova istanza di computing che supporti l'autenticazione da carico di lavoro a carico di lavoro utilizzando uno dei seguenti metodi:

  2. Controlla i contenuti del file config_status per assicurarti che non siano presenti errori dovuti a valori di attributo mancanti o a una configurazione non valida per l'emissione del certificato o la configurazione dell'attendibilità. Se esistono errori di questo tipo, aggiorna i valori di configurazione seguendo i passaggi descritti in Aggiornare la configurazione di emissione e attendibilità dei certificati.

  3. Assicurati che siano state concesse le autorizzazioni corrette alle identità del workload gestite nel pool di identità del workload per accedere ai pool di CA subordinate. Utilizza il seguente comando:

    gcloud privateca pools get-iam-policy SUBORDINATE_CA_POOL_ID \
       --location=SUBORDINATE_CA_POOL_REGION
    

    Sostituisci quanto segue:

    • SUBORDINATE_CA_POOL_ID: l'ID del pool di CA subordinate.
    • SUBORDINATE_CA_POOL_REGION: la regione del pool di CA subordinato.

    L'output di questo comando dovrebbe contenere quanto segue:

    bindings:
    - members:
      - principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/POOL_ID/*
      -
      role: roles/privateca.poolReader
    - members:
      - principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/name/locations/global/workloadIdentityPools/POOL_ID/*
      role: roles/privateca.workloadCertificateRequester
    

    Nell'esempio precedente:

    • PROJECT_NUMBER è il numero di progetto del tuo progetto.
    • POOL_ID è l'ID del pool di identità del workload.

    Se non vedi un output simile all'esempio precedente, concedi le autorizzazioni richieste come descritto in Autorizzare le identità dei workload gestiti a richiedere certificati dal pool di CA.

  4. Se il file config_status non contiene messaggi di errore, controlla il valore di iam.googleapis.com/workload-identity all'interno del file.Il valore deve corrispondere a quanto segue:

    spiffe://POOL_ID.global.PROJECT_NUMBER.workload.id.goog/ns/NAMESPACE_ID/sa/MANAGED_IDENTITY_ID
    

    Nell'esempio precedente:

    • PROJECT_NUMBER è il numero di progetto del progetto che contiene il pool di identità del workload gestito.
    • POOL_ID è l'ID del pool di identità del workload.
    • NAMESPACE_ID è l'ID dello spazio dei nomi nel pool di identità del workload.
    • MANAGED_IDENTITY_ID è l'ID dell'identità del workload gestita.

    Se il valore di iam.googleapis.com/workload-identity non è corretto, devi creare una nuova istanza di Compute con il valore corretto, perché il valore dell'identità gestita può essere aggiornato solo durante la creazione dell'istanza.

  5. Se il file config_status non contiene messaggi di errore, assicurati che la configurazione di attendibilità contenga una voce valida per il dominio di attendibilità SPIFFE POOL_ID.global.PROJECT_NUMBER.workload.id.goog, che corrisponde al dominio di attendibilità SPIFFE nell'identità gestita assegnata all'istanza di calcolo. Per saperne di più, consulta Definisci la configurazione dell'attendibilità.

  6. Se il file config_status contiene messaggi di errore con il codice di errore INTERNAL_ERROR, contatta l'assistenza clienti Google Cloud o il tuo Google Cloud contatto con il messaggio di errore.