Erro no pod do UDCA

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

  1. 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.
  2. 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.

Configuração da conta de serviço