Sintoma
Depois de fazer upgrade da Apigee híbrida, os pods do Agente Universal de Coleta de Dados (UDCA) e do Agente de conexão vão gerar um erro de problema de permissão.
Mensagens de erro
O pod da UDCA gera este erro nos registros:
Permission 'apigee.runtimeconfigs.get' denied on resource 'organizations/org-example/runtimeConfig' (or it may not exist)\\\",\\n \\\"status\\\": \\\"PERMISSION_DENIED\\
Além disso, seu pod da API Management para Runtime (MART) gera este erro relacionado ao agente do Connect:
Permission 'apigeeconnect.endpoints.connect' denied on resource '//apigeeconnect.googleapis.com/projects/org-example/endpoints/APIGEE_MART' (or it may not exist).
Etapas comuns do diagnóstico
Colete o script must-gather do Apigee híbrido do cluster e o arquivo overrides.yaml
dele.
Causas possíveis
Causa | Descrição |
---|---|
Credenciais incorretas | Talvez você tenha inserido as credenciais erradas no arquivo overrides.yaml . |
Arquivos da SA localizados no diretório errado | Os arquivos da sua conta de serviço (SA, na sigla em inglês) podem estar fora do diretório $APIGEE_HELM_CHARTS_HOME . |
Causa 1: credenciais incorretas
O serviceAccountPath
ou serviceAccountRef
usado no arquivo overrides.yaml
para pods do UDCA, MART e agente do Connect está incorreto. Isso pode acontecer porque o arquivo overrides.yaml
foi gerado por automação ou scripts personalizados, como o Terraform.
Diagnóstico
-
Verifique os papéis e as permissões do IAM atribuídos às contas de serviço que você usa.
gcloud iam service-accounts get-iam-policy SERVICE_ACCOUNT_EMAIL
gcloud projects get-iam-policy PROJECT_ID
Em que:
- SERVICE_ACCOUNT_EMAIL é o endereço de e-mail da conta de serviço.
- PROJECT_ID é o projeto do Google Cloud associado à conta de serviço.
-
Revise o arquivo
overrides.yaml
para garantir que a conta de serviço referenciada corresponda à usada na política e nos papéis do IAM do projeto.
Exemplo
Exemplo de uma política do IAM funcional para a conta de serviço em 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 resposta:
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
Exemplo de validação de papéis:
gcloud projects get-iam-policy org-example
Exemplo de resposta:
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 os papéis do IAM que correspondem à seção de instalação.
Resolução
Se o arquivo de conta de serviço usado no overrides.yaml
não corresponder à conta de serviço correta na vinculação e nos papéis do IAM do projeto, exclua e recrie a conta de serviço e corrija o arquivo de conta de serviço usado no overrides.yaml
.
Causa 2: arquivos de SA localizados no diretório errado
Esse problema ocorre ao configurar os gráficos do Helm e criar a conta de serviço.
Diagnóstico
Verifique o local do arquivo de credenciais da conta de serviço para garantir que ele esteja no diretório correto do gráfico do Helm. O arquivo JSON da conta de serviço precisa estar 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 de gráficos do 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:
Verifique se você está no diretório correto:
pwd
Exemplo de resposta:
/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 arquivo da conta de serviço para os quatro diretórios (apigee-datastore
, apigee-telemetry
, apigee-org
e apigee-env
), conforme o local da árvore de exemplo acima, e execute os gráficos do Helm novamente.