Risolvere i problemi relativi all'autenticazione delle identità per i carichi di lavoro gestiti per GKE

Questo documento descrive le soluzioni per gli errori comuni relativi alle identità del workload gestite.

Se il pod del workload di Google Kubernetes Engine (GKE) non è stato sottoposto a deployment con i certificati montati, utilizza il seguente comando per controllare lo stato del pod:

kubectl describe pod POD_NAME -n POD_NAMESPACE

L'output comando include gli eventi del pod generati da kubelet e da gke-spiffe-controller. Esamina questi eventi per individuare messaggi di errore specifici, che potrebbero includere uno dei seguenti:

Errori PermissionDenied

Questa sezione descrive gli errori che restituiscono un codice di errore RPC PermissionDenied.

PRIVATE_CA_AUTHORIZATION_FAILURE

Questo errore è simile al seguente:

Permission denied while issuing the certificate: failed to issue the certificate from the GKE Auth: rpc error: code = PermissionDenied desc = Permission 'privateca.caPools.get' denied on resource 'privateca.googleapis.com/projects/CA_POOL_PROJECT_NUMBER/locations/REGION/caPools/CA_POOL_ID' (or it may not exist). Ensure that the CaPool exists and you have authorized the Managed Workload Identity to request certificates from the CaPool.

L'errore si è verificato perché nel pool di CA subordinato manca il ruolo CA Service Workload Certificate Requester(roles/privateca.workloadCertificateRequester) del pool di identità del workload o perché il pool di CA non esiste.

Per risolvere questo errore, assegna il ruolo al pool:

gcloud privateca pools add-iam-policy-binding SUBORDINATE_CA_POOL_ID \
   --project=CA_POOL_PROJECT_ID \
   --location=REGION \
   --role=roles/privateca.workloadCertificateRequester \
   --member="principal://iam.googleapis.com/projects/WIP_PROJECT_NUMBER/name/locations/global/workloadIdentityPools/TRUST_DOMAIN_NAME"

Sostituisci quanto segue:

  • SUBORDINATE_CA_POOL_ID: l'ID del pool di CA subordinato
  • CA_POOL_PROJECT_ID: l'ID progetto del pool di CA
  • REGION: la regione della CA subordinata
  • WIP_PROJECT_NUMBER: il numero di progetto del progetto del pool di identità del workload
  • TRUST_DOMAIN_NAME: il nome del dominio di attendibilità. A seconda del tipo di pool, formatta il nome come segue:
    • Pool gestito da Google: PROJECT_ID.svc.id.goog
    • Pool autogestito: POOL_NAME.global.POOL_HOST_PROJECT_NUMBER.workload.id.goog

WORKLOAD_IDENTITY_NOT_FOUND, WORKLOAD_POOL_NOT_FOUND o WORKLOAD_NAMESPACE_NOT_FOUND

Questo errore è simile al seguente:

failed to issue the certificate from the GKE Auth: rpc error: code = PermissionDenied desc = Permission denied on resource 'projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_NAME/... (or it may not exist).

Questo errore corrisponde a WORKLOAD_IDENTITY_NOT_FOUND, WORKLOAD_POOL_NOT_FOUND o WORKLOAD_NAMESPACE_NOT_FOUND. Si verifica quando il pool di identità del workload, lo spazio dei nomi del pool di identità del workload o la risorsa di identità gestita non esiste oppure quando è disabilitata o eliminata. Tieni presente che questo errore restituisce PermissionDenied anziché NotFound per evitare di rivelare l'inesistenza della risorsa.

Per risolvere questo errore, verifica l'esistenza e lo stato del pool di identità del workload e delle relative risorse secondarie in IAM. Assicurati che siano configurati correttamente e che non siano disabilitati o eliminati.

Errori FailedPrecondition

Questa sezione descrive gli errori che restituiscono un codice di errore RPC FailedPrecondition, che in genere indica una configurazione mancante o errata.

WORKLOAD_IDENTITY_INVALID_CONFIGURATION

La descrizione del pod può includere uno dei seguenti messaggi:

failed to issue the certificate from the GKE Auth: rpc error: code = FailedPrecondition desc = There are no CaPools configured for certificate issuance. Ensure you have added certificate issuance configuration to the workload identity pool 'projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/WI_POOL_NAME', which contains at least one CaPool.

o

failed to issue the certificate from the GKE Auth: rpc error: code = FailedPrecondition desc = Missing Certificate issuance configuration in the Trust Domain. Ensure you have added certificate issuance configuration to the workload identity pool 'projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/WI_POOL_NAME' which contains at least one CaPool.

Questo errore (WORKLOAD_IDENTITY_INVALID_CONFIGURATION) si è verificato perché il pool di identità del workload non è stato configurato con una configurazione dell'emissione dei certificati (CIC) o perché la CIC configurata non contiene almeno un pool di CA.

Per risolvere questo errore, crea una CIC che contenga almeno un pool di CA e utilizzala per aggiornare il pool di identità del workload.

CERTIFICATE_AUTHORITY_NOT_FOUND

Questo errore è simile al seguente:

failed to issue the certificate from the GKE Auth: rpc error: code = FailedPrecondition desc = Failed to request certificates from the CaPool... There are no enabled CAs in the CaPool. Ensure that there is at least one enabled Certificate Authority to issue a certificate.

Questo errore (CERTIFICATE_AUTHORITY_NOT_FOUND) indica che non è possibile trovare un'autorità di certificazione per l'emissione di certificati nel pool di CA configurato dal cliente.

Per risolvere questo errore, verifica che esista un'autorità di certificazione nel pool di CA configurato e che sia abilitata per l'emissione di certificati.

CA_POOL_REGION_MISMATCH

Questo errore è simile al seguente:

failed to issue the certificate from the GKE Auth: rpc error: code = FailedPrecondition desc = Unable to find a CaPool in the workload's region. Ensure you have setup a subordinate CaPool in 'WORKLOAD_REGION' and added it to the certificate issuance configuration of the Workload Identity Pool...

Questo errore (CA_POOL_REGION_MISMATCH) indica che non è stato configurato alcun pool di CA per la regione specifica del workload.

Per risolvere questo errore, configura un pool di CA aggiuntivo per la regione del workload nel pool di identità del workload o esegui il deployment del workload in una regione in cui è già configurato un pool di CA.

Errori ResourceExhausted

Questa sezione descrive gli errori che restituiscono un codice di errore RPC ResourceExhausted.

PRIVATE_CA_QUOTA_EXCEEDED

Questo errore è simile al seguente:

failed to issue the certificate from the GKE Auth: rpc error: code = ResourceExhausted desc = Quota exceeded for quota metric 'QUOTA_METRIC' and limit 'QUOTA_LIMIT' of service 'privateca.googleapis.com' for consumer 'project_number:PROJECT_NUMBER'.

Questo errore (PRIVATE_CA_QUOTA_EXCEEDED) si verifica quando configuri il pool di identità del workload in modo che utilizzi una CA personalizzata e un tentativo di emissione di un certificato ha superato una quota o un limite stabiliti relativi al servizio CA. Questo errore non si verifica se utilizzi la CA predefinita gestita da Google.

  • QUOTA_METRIC e QUOTA_LIMIT: la metrica e il limite di quota specifici che sono stati superati. Ad esempio, privateca.googleapis.com/enterprise_certificate_issuance e CertsPerEnterpriseCaPerMinute.

Per risolvere questo errore, esamina le quote e i limiti del servizio CA nella Google Cloud console e richiedi un aumento della quota, se necessario.

Errori InvalidArgument

Questa sezione descrive gli errori che restituiscono un codice di errore RPC InvalidArgument.

PRIVATE_CA_KEY_ALGORITHM_MISMATCH

Questo errore è simile al seguente:

failed to issue the certificate from the GKE Auth: rpc error: code = InvalidArgument desc = Public key algorithm is not permitted by the CaPool's issuance policy. Ensure that the requested keyAlgorithm 'KEY_ALGO_IN_CSR' is permitted by the CAs in the CaPool 'privateca.googleapis.com/projects/PROJECT_NAME/locations/WORKLOAD_REGION/caPools/CA_POOL_NAME'.

Questo errore (PRIVATE_CA_KEY_ALGORITHM_MISMATCH) indica che l'algoritmo della chiave specificato nella richiesta di certificato non è compatibile con le limitazioni del pool di CA configurato. Questo si verifica solo quando configuri un algoritmo della chiave personalizzato nella configurazione dell'emissione dei certificati (CIC) e aggiorni il pool di identità del workload.

Per risolvere questo errore, verifica che l'algoritmo configurato nella CIC del pool di identità del workload sia compatibile con gli algoritmi supportati dalla policy di emissione del pool di CA.

Errori Unknown

Questa sezione descrive gli errori che restituiscono un codice di errore RPC Unknown.

UNKNOWN_PRIVATE_CA_CLIENT_ERROR

Questo errore è simile al seguente:

failed to issue the certificate from the GKE Auth: rpc error: code = Unknown desc = Failed to get certificates using the CaPool... PRIVATE_CA_ERROR_MESSAGE

Questo errore (UNKNOWN_PRIVATE_CA_CLIENT_ERROR) indica che si è verificato un errore client sconosciuto, ad esempio un argomento non valido fornito all'API, durante la chiamata al servizio CA.

Per risolvere questo errore, esamina il messaggio di errore specifico restituito dall'API del servizio CA per identificare l'argomento non valido o il problema di configurazione lato client e correggilo.

Latenza di propagazione del bundle di attendibilità

Quando aggiorni o ruoti una CA autogestita, si verifica una latenza di propagazione di circa 5 minuti prima che gli aggiornamenti diventino effettivi nei "cluster GKE". Questo perché gke-spiffe-controller controlla l'appartenenza e recupera i bundle di attendibilità ogni cinque minuti.

Questa latenza non si verifica se utilizzi la CA gestita da Google.

Se aggiorni una CA autogestita, attendi almeno cinque minuti prima che le modifiche diventino effettive.