Risolvi i problemi dei carichi di lavoro per l'autenticazione dei carichi di lavoro

Questo documento spiega come risolvere gli errori comuni relativi all'autenticazione dei carichi di lavoro in altri carichi di lavoro tramite mTLS.

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.
    1. Installa Google Cloud CLI, quindi initialize eseguendo questo comando:

      gcloud init
    2. Set a default region and zone.

La directory delle credenziali generata non esiste

Se viene visualizzato un errore che indica che la directory /var/run/secrets/workload-spiffe-credentials non esiste:

  1. Assicurati che la tua VM supporti l'autenticazione dai carichi di lavoro ai carichi di lavoro eseguendo questo comando dall'interno della VM.

    curl  "http://metadata.google.internal/computeMetadata/v1/instance/gce-workload-certificates/config-status" -H "Metadata-Flavor: Google"
    
    1. Se la risposta è un codice di errore HTTP 404 con il seguente messaggio di errore, questa VM non supporta questa funzionalità.

      The requested URL /computeMetadata/v1/instance/gce-workload-certificates/config-status
      was not found on this server.  That's all we know.
      

      Per risolvere il problema, crea una nuova VM che supporti l'autenticazione dai carichi di lavoro all'utilizzo dei carichi di lavoro utilizzando uno dei seguenti metodi:

    2. Se la risposta è un codice di errore HTTP 404 con il messaggio di errore workload certificate feature not enabled, la VM supporta le identità del carico di lavoro gestito, ma la funzionalità non è abilitata. Per abilitare la funzionalità sulla VM, consulta Abilitare le identità dei carichi di lavoro gestiti sulle VM esistenti.

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

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

    Sostituisci VM_NAME con il nome della VM.

    Per aggiornare l'agente ospite Compute Engine, consulta Aggiornare l'ambiente ospite.

  3. Controlla i log di servizio per verificare che gce-workload-cert-refresh.timer sia riuscito a recuperare le credenziali del carico di lavoro 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 generata contiene solo il file config_status

La directory delle credenziali generata, /var/run/secrets/workload-spiffe-credentials, potrebbe contenere solo config_status per diversi motivi. Per risolvere il problema:

  1. Controlla i contenuti del file config_status per assicurarti che la funzionalità delle identità per i carichi di lavoro gestiti sia abilitata. Se la funzionalità non viene abilitata utilizzando i metadati della VM appropriati, il file di log contiene il messaggio di errore workload certificate feature not enabled.

    Per risolvere il problema, crea una nuova VM che supporti l'autenticazione dai carichi di lavoro ai carichi di lavoro utilizzando uno dei seguenti metodi:

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

  3. Assicurati che siano state concesse le autorizzazioni corrette alle identità dei carichi di lavoro gestiti nel pool di identità per i carichi di lavoro per accedere ai pool di CA subordinati. 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 subordinato.
    • 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/locations/global/workloadIdentityPools/POOL_ID/*
      -
      role: roles/privateca.poolReader
    - members:
      - principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/*
      role: roles/privateca.workloadCertificateRequester
    

    Nell'esempio precedente:

    • PROJECT_NUMBER è il numero del progetto.
    • POOL_ID è l'ID del pool di identità per i carichi di lavoro.

    Se non visualizzi un output simile all'esempio precedente, concedi le autorizzazioni richieste come descritto in Autorizzare le identità dei carichi di lavoro gestiti per richiedere i 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 del progetto che contiene il pool di identità per i carichi di lavoro gestiti.
    • POOL_ID è l'ID del pool di identità per i carichi di lavoro.
    • NAMESPACE_ID è l'ID dello spazio dei nomi nel pool di identità dei carichi di lavoro.
    • MANAGED_IDENTITY_ID è l'ID dell'identità del carico di lavoro gestito.

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

  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 sull'identità gestita assegnata alla VM. Per maggiori informazioni, consulta Definire la configurazione di 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 contatto Google Cloud comunicando il messaggio di errore.

L'esecuzione di query sugli endpoint del server di metadati restituisce un errore 404

Se ricevi una risposta 404 quando esegui una query sull'endpoint workload-identities o trust-anchors, assicurati che la VM supporti le identità dei carichi di lavoro gestiti eseguendo questo comando dall'interno della VM:

curl  "http://metadata.google.internal/computeMetadata/v1/instance/gce-workload-certificates/config-status" -H "Metadata-Flavor: Google"
  • Se la risposta è un codice di errore HTTP 404 con il seguente messaggio di errore:

      The requested URL /computeMetadata/v1/instance/gce-workload-certificates/config-status
      was not found on this server.  That's all we know.
    

    La VM non supporta le identità dei carichi di lavoro gestiti. Per risolvere il problema, esegui una delle seguenti operazioni:

  • Se la risposta è un codice di errore HTTP 404 con il messaggio di errore workload certificate feature not enabled, la VM supporta le identità dei carichi di lavoro gestiti, ma la funzionalità non è abilitata. Crea una nuova VM con la funzionalità abilitata oppure crea un nuovo modello di istanza e un nuovo gruppo di istanze gestite.

  • Assicurati che al pool di identità dei carichi di lavoro siano state concesse le autorizzazioni corrette per l'accesso ai pool di CA subordinati eseguendo questo 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 subordinato.
    • SUBORDINATE_CA_POOL_REGION: la regione del pool di CA subordinato.

    L'output di questo comando dovrebbe contenere quanto segue, dove PROJECT_NUMBER è il numero di progetto del progetto e POOL_ID è l'ID del pool di identità per i carichi di lavoro.

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

    Se l'output non contiene questi valori, concedi le autorizzazioni corrette, come descritto in Autorizzare le identità dei carichi di lavoro gestiti per richiedere certificati dal pool di CA.

  • Assicurati che il valore iam.googleapis.com/workload-identity sia corretto e corrisponde a quanto segue:

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

    Se il valore non corrisponde, devi creare una nuova VM perché il valore dell'identità gestito non può essere aggiornato dopo la creazione della VM.

  • 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 sull'identità gestita assegnata alla VM.