Esta página mostra-lhe como resolver problemas de autorização que ocorrem quando usa a sincronização de configuração com uma conta de serviço Google.
Acesso de leitura em falta
Quando usar uma conta de serviço Google (spec.git.gcpServiceAccountEmail, spec.oci.gcpServiceAccountEmail ou spec.helm.gcpServiceAccountEmail) para autenticar no Cloud Source Repositories ou no Artifact Registry, a conta de serviço Google requer o seguinte acesso de leitor:
- Cloud Source Repositories: 
roles/source.reader - Artifact Registry: 
roles/artifactregistry.reader 
Se a conta de serviço não tiver estas funções, git-sync ou oci-sync ou
helm-sync falha com erros semelhantes aos seguintes:
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 ...
Para corrigir este problema, conceda à conta de serviço o acesso de leitor correto.
Associação de política de IAM em falta com a federação de identidades de cargas de trabalho para o GKE
Quando usar uma conta de serviço Google para autenticação, é necessária uma associação de políticas do IAM entre a conta de serviço Google e a conta de serviço Kubernetes. Se a associação da política de IAM estiver em falta, recebe o seguinte erro:
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"
Para corrigir o problema, crie a seguinte associação de política de 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
Substitua o seguinte:
PROJECT_ID: se estiver a usar a Workload Identity Federation para o GKE, adicione o ID do projeto da sua organização. Se estiver a usar a Workload Identity Federation da frota para o GKE, pode usar dois IDs de projetos diferentes. EmserviceAccount:PROJECT_ID, adicione o ID do projeto da frota na qual o cluster está registado. EmGSA_NAME@PROJECT_ID, adicione um ID do projeto para qualquer projeto que tenha acesso de leitura ao repositório nos Cloud Source Repositories.KSA_NAME: a conta de serviço do Kubernetes para o reconciliador. Para repositórios de raiz, se o nomeRootSyncforroot-sync,KSA_NAMEéroot-reconciler. Caso contrário, éroot-reconciler-ROOT_SYNC_NAME.Para repositórios de espaços de nomes, se o nome
RepoSyncforrepo-sync,KSA_NAMEéns-reconciler-NAMESPACE. Caso contrário, éns-reconciler-NAMESPACE-REPO_SYNC_NAME.GSA_NAME: a conta de serviço da Google personalizada que quer usar para estabelecer ligação aos Cloud Source Repositories. Certifique-se de que a conta de serviço Google que selecionar tem a função desource.reader.
A criação desta associação de políticas requer a autorização iam.serviceAccounts.setIamPolicy.
Certifique-se de que a federação do Workload Identity da frota para o GKE está ativada nos seus clusters registados. Para mais informações, consulte o artigo Registe um cluster. Se o cluster estiver num projeto diferente do projeto anfitrião da frota, tem de associar a conta de serviço Google à conta de serviço Kubernetes no projeto anfitrião da frota.
Âmbito cloud-platform em falta para aceder aos Cloud Source Repositories
Quando concede acesso a uma conta de serviço Google ao seu repositório Git nos Cloud Source Repositories, o âmbito de leitura tem de ser incluído nos âmbitos de acesso para os nós no cluster.
O âmbito de leitura pode ser adicionado incluindo cloud-source-repos-ro na lista --scopes especificada no momento da criação do cluster ou usando o âmbito cloud-platform no momento da criação do cluster. Por exemplo:
gcloud container clusters create CLUSTER_NAME --scopes=cloud-platform
Se o âmbito só de leitura estiver em falta, é apresentado um erro semelhante ao seguinte:
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":{}}
Âmbito storage-ro em falta para aceder ao Artifact Registry
Quando usa o Artifact Registry, as camadas de imagens são mantidas em contentores do Cloud Storage. Quando concede acesso a uma conta de serviço Google à sua imagem OCI ou gráfico Helm no Artifact Registry, o âmbito só de leitura tem de ser incluído em access scopes para os nós no cluster.
O âmbito de leitura pode ser adicionado incluindo storage-ro na --scopeslista especificada no momento da criação do cluster ou usando o âmbito cloud-platform no momento da criação do cluster. Por exemplo:
gcloud container clusters create CLUSTER_NAME --scopes=cloud-platform
Se o âmbito só de leitura estiver em falta, é apresentado um erro semelhante ao seguinte:
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":{}}
A mensagem de erro pode não incluir os detalhes completos do que causou o erro, mas fornece um comando que imprime os registos do contentor git-sync, que podem ter mais informações.
Se ativou as APIs RootSync ou RepoSync, execute o seguinte comando:
kubectl logs -n config-management-system -l app=reconciler -c git-sync
Se não tiver ativado as APIs RootSync ou RepoSync, execute o seguinte comando:
kubectl logs -n config-management-system -l app=git-importer -c git-sync
As APIs RootSync e RepoSync estão ativadas por predefinição se tiver usado a
Google Cloud consola ou a CLI Google Cloud para instalar o Config Sync e não
as pode desativar.
O que se segue?
Se continuar a ter problemas, verifique se o seu problema é um problema conhecido.
Se não conseguir encontrar uma solução para o seu problema na documentação, consulte a secção Obter apoio técnico para obter mais ajuda, incluindo aconselhamento sobre os seguintes tópicos:
- Abrindo um registo de apoio técnico através do contacto com o Cloud Customer Care.
 - Receber apoio técnico da comunidade
fazendo perguntas no
StackOverflow.
Se usar kpt ou Kustomize, use a etiqueta 
kptoukustomizepara pesquisar problemas semelhantes. - Abrir erros ou pedidos de funcionalidades através do controlador de problemas público no GitHub.