Questo documento spiega come risolvere gli errori comuni relativi all'autenticazione dei workload con altri workload tramite mTLS.
Prima di iniziare
-
Se non l'hai ancora fatto, configura l'autenticazione.
L'autenticazione è
il processo mediante il quale la tua identità viene verificata per l'accesso ai Google Cloud servizi e alle API.
Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su
Compute Engine selezionando una delle seguenti opzioni:
-
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.
- Set a default region and zone.
-
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:
Assicurati che la VM supporti l'autenticazione da workload a workload eseguendo il seguente 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, 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 da workload a workload utilizzando uno dei seguenti metodi:
Se la risposta è un codice di errore
HTTP 404
con il messaggio di erroreworkload certificate feature not enabled
, la VM supporta le identità dei carichi di lavoro gestite, ma la funzionalità non è abilitata. Per abilitare la funzionalità sulla VM, consulta Abilitare le identità dei workload gestite sulle VM esistenti.
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 VM_NAME | grep "GCE Agent Started"
Sostituisci VM_NAME con il nome della VM.
Per aggiornare l'agente guest di Compute Engine, consulta Aggiornamento dell'ambiente guest.
Controlla i log del servizio per verificare che
gce-workload-cert-refresh.timer
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.
Controlla i contenuti del file
config_status
per assicurarti che la funzionalità delle identità dei workload gestite sia abilitata. Se la funzionalità non è abilitata utilizzando i metadati VM appropriati, il file di log contiene il messaggio di erroreworkload certificate feature not enabled
.Per risolvere il problema, crea una nuova VM che supporti l'autenticazione da carico di lavoro a carico di lavoro utilizzando uno dei seguenti metodi:
Controlla i contenuti del file
config_status
per assicurarti che non siano presenti errori dovuti a valori degli attributi 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.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 subordinate. Utilizza 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 secondarie.
- SUBORDINATE_CA_POOL_REGION: la regione del pool di CA secondario.
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 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.
Se il file
config_status
non contiene messaggi di errore, controlla il valore diiam.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à 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 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à gestita può essere aggiornato solo durante la creazione della VM.Se il file
config_status
non contiene messaggi di errore, assicurati che la configurazione dell'attendibilità contenga una voce valida per il dominio di attendibilità SPIFFEPOOL_ID.global.PROJECT_NUMBER.workload.id.goog
, che corrisponde al dominio di attendibilità SPIFFE nell'identità gestita assegnata alla VM. Per saperne di più, vedi Definire la configurazione dell'attendibilità.Se il file
config_status
contiene messaggi di errore con il codice di erroreINTERNAL_ERROR
, contatta l'assistenza clienti Google Cloud o il tuo Google Cloud contatto con il messaggio di errore.
L'interrogazione degli 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 gestite eseguendo
il seguente 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 workload gestite. Per risolvere il problema, esegui una delle seguenti operazioni:
Se la risposta è un codice di errore HTTP
404
con il messaggio di erroreworkload certificate feature not enabled
, questa VM supporta le identità dei workload gestite, 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 siano state concesse le autorizzazioni corrette al pool di identità per i carichi di lavoro per accedere ai pool di CA subordinate eseguendo 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 secondario.
L'output di questo comando dovrebbe contenere quanto segue, dove PROJECT_NUMBER è il numero di progetto del tuo progetto e POOL_ID è l'ID del pool di identità del workload.
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 Autorizza le identità dei workload gestiti a richiedere certificati dal pool di CA.
Assicurati che il valore di
iam.googleapis.com/workload-identity
sia corretto e corrisponda 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à gestita non può essere aggiornato dopo la creazione della VM.
Assicurati che la configurazione dell'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 alla VM.