Sintomo
Dopo l'upgrade di Apigee Hybrid, i pod dell'agente di raccolta dei dati universale (UDCA) e dell'agente di connessione generano un errore relativo alle autorizzazioni.
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 dell'API di gestione per il runtime (MART) genera questo errore relativo all'agente di connessione:
Permission 'apigeeconnect.endpoints.connect' denied on resource '//apigeeconnect.googleapis.com/projects/org-example/endpoints/APIGEE_MART' (or it may not exist).
Passaggi comuni per la diagnosi
Raccogli lo script Apigee hybrid must-gather dal tuo cluster e il file overrides.yaml per il cluster.
Cause possibili
| Causa | Descrizione |
|---|---|
| Credenziali non corrette | Potresti aver inserito le credenziali sbagliate nel file overrides.yaml. |
| File SA che si trovano nella directory sbagliata | I file del service account (SA) potrebbero trovarsi al di fuori della directory $APIGEE_HELM_CHARTS_HOME. |
Causa 1: credenziali errate
Il valore 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_IDDove:
- 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.yamlper assicurarti che il account di servizio a cui viene fatto riferimento corrisponda a quello utilizzato nei ruoli e nelle policy IAM del progetto.
Esempio
Esempio di policy 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 corrispondenti alla sezione Installazione.
Risoluzione
Se il file del account di servizio utilizzato nel tuo overrides.yaml non corrisponde al account di servizio corretto nell'associazione e nei ruoli IAM del progetto, devi eliminare e ricreare il account di servizio e correggere il file del account di servizio utilizzato nel overrides.yaml.
Causa 2: i file SA si trovano nella directory sbagliata
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 del 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 essere 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 nell'esempio di posizione dell'albero riportato sopra, quindi esegui nuovamente i grafici Helm.