Sintoma
Após a atualização do Apigee hybrid, os pods do agente de recolha de dados universal (UDCA) e do agente de ligação geram um erro de problema de autorização.
Mensagens de erro
O seu pod UDCA apresenta este erro nos registos:
Permission 'apigee.runtimeconfigs.get' denied on resource 'organizations/org-example/runtimeConfig' (or it may not exist)\\\",\\n \\\"status\\\": \\\"PERMISSION_DENIED\\
Além disso, o seu pod da API Management for Runtime (MART) apresenta este erro relativamente ao agente de ligação:
Permission 'apigeeconnect.endpoints.connect' denied on resource '//apigeeconnect.googleapis.com/projects/org-example/endpoints/APIGEE_MART' (or it may not exist).
Passos de diagnóstico comuns
Recolha o script Apigee hybrid must-gather do seu cluster e o ficheiro overrides.yaml
para o cluster.
Causas possíveis
Causa | Descrição |
---|---|
Credenciais incorretas | Pode ter introduzido as credenciais erradas no ficheiro overrides.yaml . |
Ficheiros SA localizados no diretório errado | Os ficheiros da conta de serviço (SA) podem estar localizados fora do diretório $APIGEE_HELM_CHARTS_HOME . |
Causa 1: credenciais incorretas
O serviceAccountPath
ou o serviceAccountRef
usado no seu ficheiro overrides.yaml
para os pods UDCA, MART e do agente de ligação está incorreto. Isto pode dever-se ao facto de o ficheiro overrides.yaml
ter sido gerado através de automatização ou scripts personalizados, como a utilização do Terraform.
Diagnóstico
-
Valide as funções e as autorizações do IAM atribuídas às contas de serviço que usa.
gcloud iam service-accounts get-iam-policy SERVICE_ACCOUNT_EMAIL
gcloud projects get-iam-policy PROJECT_ID
Onde:
- SERVICE_ACCOUNT_EMAIL é o endereço de email da conta de serviço.
- PROJECT_ID é o projeto do Google Cloud associado à conta de serviço.
-
Reveja o ficheiro
overrides.yaml
para se certificar de que a conta de serviço referenciada corresponde à usada nas funções e política de IAM do projeto.
Exemplo
Um exemplo de uma política de IAM funcional para a conta de serviço para uma configuração não de produção:
gcloud iam service-accounts get-iam-policy apigee-non-prod@org-example.iam.gserviceaccount.com
Exemplo de saída:
bindings: - members: - serviceAccount:org-example.svc.id.goog[apigee/apigee-cassandra-backup-sa] - serviceAccount:org-example.svc.id.goog[apigee/apigee-cassandra-default] - serviceAccount:org-example.svc.id.goog[apigee/apigee-cassandra-guardrails-sa] - serviceAccount:org-example.svc.id.goog[apigee/apigee-connect-agent-org-example-sa] - serviceAccount:org-example.svc.id.goog[apigee/apigee-mart-org-example-sa] - serviceAccount:org-example.svc.id.goog[apigee/apigee-metrics-sa] - serviceAccount:org-example.svc.id.goog[apigee/apigee-runtime-org-example-sa] - serviceAccount:org-example.svc.id.goog[apigee/apigee-synchronizer-org-example-sa] - serviceAccount:org-example.svc.id.goog[apigee/apigee-udca-org-example-sa] - serviceAccount:org-example.svc.id.goog[apigee/apigee-watcher-org-example-sa] role: roles/iam.workloadIdentityUser etag: BwYw33-1N8s= version: 1
Um exemplo de validação de funções:
gcloud projects get-iam-policy org-example
Exemplo de saída:
bindings: - members: - serviceAccount:apigee-non-prod@org-example.iam.gserviceaccount.com role: roles/apigee.analyticsAgent - members: - serviceAccount:apigee-non-prod@org-example.iam.gserviceaccount.com role: roles/apigee.runtimeAgent - members: - serviceAccount:apigee-non-prod@org-example.iam.gserviceaccount.com role: roles/apigee.synchronizerManager - members: - serviceAccount:apigee-non-prod@org-example.iam.gserviceaccount.com role: roles/apigeeconnect.Agent - members: - serviceAccount:apigee-non-prod@org-example.iam.gserviceaccount.com role: roles/storage.objectAdmin
Para produção, execute os mesmos comandos na conta de serviço de produção para apigee-udca
e verifique se existem funções de IAM que correspondam à secção de instalação.
Resolução
Se o ficheiro da conta de serviço usado no overrides.yaml
não corresponder à conta de serviço correta nas associações e funções de IAM do projeto, deve eliminar e recriar a conta de serviço e corrigir o ficheiro da conta de serviço usado no overrides.yaml
.
Causa 2: ficheiros SA localizados no diretório errado
Este problema ocorre quando configura os gráficos Helm e cria a conta de serviço.
Diagnóstico
Verifique a localização do ficheiro de credenciais da conta de serviço para garantir que reside no diretório do gráfico Helm correto. O ficheiro JSON da conta de serviço deve residir nos seguintes diretórios:
$APIGEE_HELM_CHARTS_HOME/apigee-datastore
$APIGEE_HELM_CHARTS_HOME/apigee-telemetry
$APIGEE_HELM_CHARTS_HOME/apigee-org
$APIGEE_HELM_CHARTS_HOME/apigee-env
Exemplo
Por exemplo, verifique os diretórios do gráfico Helm listando o diretório apigee-datastore
e faça o mesmo para os diretórios apigee-org
, apigee-env
e apigee-telemetry
.
Exemplo de comando:
Certifique-se de que está no diretório correto:
pwd
Exemplo de saída:
/usr/local/home/example/Hybrid/helm-charts
├── apigee-datastore │ ├── org-example-apigee-non-prod.json │ └── templates ├── apigee-env │ ├── org-example-apigee-non-prod.json │ └── templates ├── apigee-ingress-manager │ └── templates ├── apigee-operator │ ├── etc │ │ ├── crds │ │ │ ├── crd │ │ │ │ ├── bases │ │ │ │ └── patches │ │ │ └── default │ │ ├── examples │ │ │ └── helmfiles │ │ └── tools │ │ └── service-accounts │ │ ├── org-example-apigee-cassandra.json │ │ ├── org-example-apigee-logger.json │ │ ├── org-example-apigee-mart.json │ │ ├── org-example-apigee-metrics.json │ │ ├── org-example-apigee-runtime.json │ │ ├── org-example-apigee-synchronizer.json │ │ ├── org-example-apigee-udca.json │ │ └── org-example-apigee-watcher.json │ └── templates ├── apigee-org │ ├── org-example-apigee-non-prod.json │ └── templates ├── apigee-redis │ └── templates ├── apigee-telemetry │ ├── org-example-apigee-non-prod.json │ └── templates ├── apigee-virtualhost │ ├── certs │ └── templates └── cluster-check 29 directories, 12 files
Resolução
Copie o ficheiro da conta de serviço para os quatro diretórios (apigee-datastore
, apigee-telemetry
, apigee-org
e apigee-env
) de acordo com a localização da árvore de exemplo acima e, em seguida, volte a executar os gráficos Helm.