Sintomo
Dopo l'upgrade di Apigee Hybrid, i pod Universal Data Collection Agent (UDCA) e Connect Agent generano un errore relativo a un problema di autorizzazione.
Messaggi di errore
Il pod UDCA genera questo errore nei log:
Permission 'apigee.runtimeconfigs.get' denied on resource 'organizations/org-example/runtimeConfig' (or it may not exist)\\\",\\n \\\"status\\\": \\\"PERMISSION_DENIED\\
Inoltre, il pod Management API for Runtime (MART) genera questo errore relativo all'agente Connect:
Permission 'apigeeconnect.endpoints.connect' denied on resource '//apigeeconnect.googleapis.com/projects/org-example/endpoints/APIGEE_MART' (or it may not exist).
Passaggi comuni di diagnostica
Raccogli lo script Apigee hybrid must-gather dal cluster e il file overrides.yaml
per il cluster.
Cause possibili
Causa | Descrizione |
---|---|
Credenziali non corrette | Potresti aver inserito le credenziali errate nel file overrides.yaml . |
File SA nella directory sbagliata | I file dell'account di servizio potrebbero trovarsi al di fuori della directory $APIGEE_HELM_CHARTS_HOME . |
Causa 1: credenziali non corrette
L'elemento serviceAccountPath
o serviceAccountRef
utilizzato nel file overrides.yaml
per i pod UDCA, MART e Connect Agent non è corretto. Ciò potrebbe essere dovuto al fatto che il file overrides.yaml
è stato generato tramite automazione o script personalizzati, ad esempio utilizzando Terraform.
Diagnosi
-
Verifica i ruoli e le autorizzazioni IAM assegnati ai service account che utilizzi.
gcloud iam service-accounts get-iam-policy SERVICE_ACCOUNT_EMAIL
gcloud projects get-iam-policy PROJECT_ID
Dove:
- SERVICE_ACCOUNT_EMAIL è l'indirizzo email del account di servizio.
- PROJECT_ID è il progetto Google Cloud associato al account di servizio.
-
Esamina il file
overrides.yaml
per assicurarti che il account di servizio a cui viene fatto riferimento corrisponda a quello utilizzato nei ruoli e nei criteri IAM del progetto.
Esempio
Un esempio di criterio IAM funzionante per il account di servizio per una configurazione non di produzione:
gcloud iam service-accounts get-iam-policy apigee-non-prod@org-example.iam.gserviceaccount.com
Esempio di output:
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
Esempio di convalida dei ruoli:
gcloud projects get-iam-policy org-example
Esempio di output:
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
Per la produzione, esegui gli stessi comandi sul account di servizio di produzione per apigee-udca
e verifica i ruoli IAM che corrispondono alla sezione Installazione.
Risoluzione
Se il file del account di servizio utilizzato in overrides.yaml
non corrisponde al account di servizio corretto nel binding e nei ruoli IAM del progetto, devi eliminare e ricreare il account di servizio e correggere il file del account di servizio utilizzato in overrides.yaml
.
Causa 2: file SA nella directory errata
Questo problema si verifica durante la configurazione dei grafici Helm e la creazione del service account.
Diagnosi
Controlla la posizione del file delle credenziali del account di servizio per assicurarti che si trovi nella directory del grafico Helm corretta. Il file JSON dell'account di servizio deve trovarsi nelle seguenti directory:
$APIGEE_HELM_CHARTS_HOME/apigee-datastore
$APIGEE_HELM_CHARTS_HOME/apigee-telemetry
$APIGEE_HELM_CHARTS_HOME/apigee-org
$APIGEE_HELM_CHARTS_HOME/apigee-env
Esempio
Ad esempio, controlla le directory dei grafici Helm elencando la directory apigee-datastore
e fai lo stesso per le directory apigee-org
, apigee-env
e apigee-telemetry
.
Comando di esempio:
Assicurati di trovarti nella directory corretta:
pwd
Esempio di output:
/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
Risoluzione
Copia il file del service account nelle quattro directory (apigee-datastore
, apigee-telemetry
, apigee-org
e apigee-env
) come indicato nella posizione dell'albero di esempio sopra, poi esegui di nuovo i grafici Helm.