Questa pagina mostra come risolvere i problemi di autorizzazione che si verificano quando utilizzi Config Sync con un account di servizio Google.
Accesso come lettore mancante
Quando utilizzi un account di servizio Google (spec.git.gcpServiceAccountEmail
, o
spec.oci.gcpServiceAccountEmail
o spec.helm.gcpServiceAccountEmail
) per
l'autenticazione a Cloud Source Repositories o Artifact Registry, il service account Google
richiede il seguente accesso in lettura:
- Cloud Source Repositories:
roles/source.reader
- Artifact Registry:
roles/artifactregistry.reader
Se nel account di servizio mancano questi ruoli, git-sync
o oci-sync
o
helm-sync
non riesce a essere eseguito e vengono visualizzati errori simili ai seguenti:
failed to pull image us-docker.pkg.dev/...: GET https://us-docker.pkg.dev/v2/token?scope=repository...: DENIED: Permission \"artifactregistry.repositories.downloadArtifacts\" denied on resource \"projects/.../locations/us/repositories/...\" (or it may not exist)
"Err":"failed to render the helm chart: exit status 1, stdout: Error: failed to download ...
Per risolvere il problema, concedi al account di servizio l'accesso in lettura corretto.
Associazione di criteri IAM mancante con la federazione delle identità per i carichi di lavoro per GKE
Quando utilizzi un account di servizio Google per l'autenticazione, è necessaria un'associazione dei criteri IAM tra il account di servizio Google e il account di servizio Kubernetes. Se l'associazione della policy IAM non è presente, viene visualizzato il seguente errore:
KNV2004: unable to sync repo Error in the git-sync container: ERROR: failed to call ASKPASS callback URL: auth URL returned status 500, body: "failed to get token from credentials: oauth2/google: status code 403: {\n \"error\": {\n \"code\": 403,\n \"message\": \"The caller does not have permission\",\n \"status\": \"PERMISSION_DENIED\"\n }\n}\n"
Per risolvere il problema, crea la seguente associazione di criteri IAM:
gcloud iam service-accounts add-iam-policy-binding \
--role roles/iam.workloadIdentityUser \
--member "serviceAccount:PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \
GSA_NAME@PROJECT_ID.iam.gserviceaccount.com
Sostituisci quanto segue:
PROJECT_ID
: se utilizzi Workload Identity Federation for GKE, aggiungi l'ID progetto della tua organizzazione. Se utilizzi la federazione delle identità per i carichi di lavoro per GKE, puoi utilizzare due ID progetto diversi. InserviceAccount:PROJECT_ID
, aggiungi l'ID progetto del parco risorse a cui è registrato il cluster. InGSA_NAME@PROJECT_ID
, aggiungi un ID progetto per qualsiasi progetto che abbia accesso in lettura al repository in Cloud Source Repositories.KSA_NAME
: il account di servizio Kubernetes per il riconciliatore. Per i repository radice, se il nome diRootSync
èroot-sync
,KSA_NAME
èroot-reconciler
. In caso contrario, èroot-reconciler-ROOT_SYNC_NAME
.Per i repository dello spazio dei nomi, se il nome
RepoSync
èrepo-sync
,KSA_NAME
èns-reconciler-NAMESPACE
. In caso contrario, èns-reconciler-NAMESPACE-REPO_SYNC_NAME
.GSA_NAME
: l'account di servizio Google personalizzato che vuoi utilizzare per connetterti a Cloud Source Repositories. Assicurati che l'account di servizio Google selezionato disponga del ruolosource.reader
.
Per creare questa associazione di policy è richiesta l'autorizzazione iam.serviceAccounts.setIamPolicy
.
Assicurati che la federazione delle identità per i carichi di lavoro per GKE del parco risorse sia abilitata sui cluster registrati. Per ulteriori informazioni, vedi Registrare un cluster. Se il cluster si trova in un progetto diverso da quello host del parco, devi associare l'account di servizio Google all'account di servizio Kubernetes nel progetto host del parco.
Ambito cloud-platform
mancante per accedere a Cloud Source Repositories
Quando concedi a un account di servizio Google l'accesso al tuo repository Git in Cloud Source Repositories, l'ambito di sola lettura deve essere incluso negli ambiti di accesso per i nodi del cluster.
L'ambito di sola lettura può essere aggiunto includendo cloud-source-repos-ro
nell'elenco
--scopes
specificato al momento della creazione del cluster o utilizzando l'ambito
cloud-platform
al momento della creazione del cluster. Ad esempio:
gcloud container clusters create CLUSTER_NAME --scopes=cloud-platform
Se l'ambito di sola lettura non è presente, viene visualizzato un errore simile al seguente:
Error in the git-sync container: {"Msg":"unexpected error syncing repo, will retry","Err":"Run(git clone -v --no-checkout -b main --depth 1 https://source.developers.google.com/p/PROJECT_ID/r/csr-auth-test /repo/source): exit status 128: { stdout: \"\", stderr: \"Cloning into '/repo/source'...\\nremote: INVALID_ARGUMENT: Request contains an invalid argument\\nremote: [type.googleapis.com/google.rpc.LocalizedMessage]\\nremote: locale: \\\"en-US\\\"\\nremote: message: \\\"Invalid authentication credentials. Please generate a new identifier: https://source.developers.google.com/new-password\\\"\\nremote: \\nremote: [type.googleapis.com/google.rpc.RequestInfo]\\nremote: request_id: \\\"fee01d10ba494552922d42a9b6c4ecf3\\\"\\nfatal: unable to access 'https://source.developers.google.com/p/PROJECT_ID/r/csr-auth-test/': The requested URL returned error: 400\\n\" }","Args":{}}
Ambito storage-ro
mancante per accedere ad Artifact Registry
Quando utilizzi Artifact Registry, i livelli delle immagini vengono conservati nei bucket Cloud Storage. Quando concedi a un account di servizio Google l'accesso alla tua immagine OCI o al grafico Helm in Artifact Registry, l'ambito di sola lettura deve essere incluso negli ambiti di accesso per i nodi del cluster.
L'ambito di sola lettura può essere aggiunto includendo storage-ro
nell'elenco --scopes
specificato al momento della creazione del cluster o utilizzando l'ambito cloud-platform
al momento della creazione del cluster. Ad esempio:
gcloud container clusters create CLUSTER_NAME --scopes=cloud-platform
Se l'ambito di sola lettura non è presente, viene visualizzato un errore simile al seguente:
Error in the oci-sync container: {"Msg":"unexpected error fetching package, will retry","Err":"failed to pull image us-docker.pkg.dev/...: GET https://us-docker.pkg.dev/v2/token?scope=repository%3A...%3Apull\u0026service=us-docker.pkg.dev: UNAUTHORIZED: failed authentication","Args":{}}
Il messaggio di errore potrebbe non includere i dettagli completi della causa dell'errore,
ma fornisce un comando che stampa i log dal container git-sync
che potrebbero contenere ulteriori informazioni.
Se hai abilitato le API RootSync
o RepoSync
, esegui questo comando:
kubectl logs -n config-management-system -l app=reconciler -c git-sync
Se non hai abilitato le API RootSync
o RepoSync
, esegui il seguente comando:
kubectl logs -n config-management-system -l app=git-importer -c git-sync
Le API RootSync
e RepoSync
sono abilitate per impostazione predefinita se hai utilizzato la
consoleGoogle Cloud o Google Cloud CLI per installare Config Sync e non puoi
disabilitarle.
Passaggi successivi
Se i problemi persistono, verifica se il tuo problema è un problema noto.
Se non riesci a trovare una soluzione al tuo problema nella documentazione, consulta la sezione Richiedi assistenza per ulteriore aiuto, inclusi consigli sui seguenti argomenti:
- Apertura di una richiesta di assistenza contattando Cloud Customer Care.
- Ricevere assistenza dalla community
ponendo domande su
Stack Overflow.
Se utilizzi kpt o Kustomize, usa il tag
kpt
okustomize
per cercare problemi simili. - Apertura di bug o richieste di funzionalità utilizzando lo strumento di monitoraggio dei problemi pubblico su GitHub.