Symptom
Nach dem Upgrade von Apigee Hybrid geben Ihre Universal Data Collection Agent- (UDCA) und Connect Agent-Pods einen Berechtigungsfehler aus.
Fehlermeldungen
Ihr UDCA-Pod gibt diesen Fehler in den Logs aus:
Permission 'apigee.runtimeconfigs.get' denied on resource 'organizations/org-example/runtimeConfig' (or it may not exist)\\\",\\n \\\"status\\\": \\\"PERMISSION_DENIED\\
Außerdem wird in Ihrem MART-Pod (Management API for Runtime) dieser Fehler in Bezug auf den Connect-Agent ausgegeben:
Permission 'apigeeconnect.endpoints.connect' denied on resource '//apigeeconnect.googleapis.com/projects/org-example/endpoints/APIGEE_MART' (or it may not exist).
Allgemeine Diagnoseschritte
Rufen Sie das Apigee Hybrid-Must-Gather-Script aus Ihrem Cluster und die Datei overrides.yaml
für den Cluster ab.
Mögliche Ursachen
Ursache | Beschreibung |
---|---|
Anmeldedaten falsch | Möglicherweise haben Sie in der Datei overrides.yaml die falschen Anmeldedaten eingegeben. |
SA-Dateien im falschen Verzeichnis | Ihre Dienstkontodateien befinden sich möglicherweise außerhalb des Verzeichnisses $APIGEE_HELM_CHARTS_HOME . |
Ursache 1: Falsche Anmeldedaten
Die in Ihrer overrides.yaml
-Datei für UDCA-, MART- und Connect Agent-Pods verwendeten serviceAccountPath
- oder serviceAccountRef
-Werte sind falsch. Das kann daran liegen, dass die overrides.yaml
-Datei durch Automatisierung oder benutzerdefinierte Skripts wie Terraform generiert wurde.
Diagnose
-
Prüfen Sie die IAM-Rollen und -Berechtigungen, die den von Ihnen verwendeten Dienstkonten zugewiesen sind.
gcloud iam service-accounts get-iam-policy SERVICE_ACCOUNT_EMAIL
gcloud projects get-iam-policy PROJECT_ID
Wobei:
- SERVICE_ACCOUNT_EMAIL ist die E-Mail-Adresse des Dienstkontos.
- PROJECT_ID ist das Google Cloud-Projekt, das mit dem Dienstkonto verknüpft ist.
-
Prüfen Sie Ihre
overrides.yaml
-Datei, um sicherzustellen, dass das referenzierte Dienstkonto mit dem in der Projekt-IAM-Richtlinie und den Rollen verwendeten Dienstkonto übereinstimmt.
Beispiel
Ein Beispiel für eine funktionierende IAM-Richtlinie für das Dienstkonto für eine Nichtproduktionsumgebung:
gcloud iam service-accounts get-iam-policy apigee-non-prod@org-example.iam.gserviceaccount.com
Beispielausgabe:
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
Beispiel für die Validierung von Rollen:
gcloud projects get-iam-policy org-example
Beispielausgabe:
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
Führen Sie für die Produktion dieselben Befehle für das Produktionsdienstkonto für apigee-udca
aus und prüfen Sie, ob die IAM-Rollen mit dem Abschnitt Installation übereinstimmen.
Lösung
Wenn die in Ihrer overrides.yaml
verwendete Dienstkontodatei nicht mit dem richtigen Dienstkonto in der IAM-Bindung und den Rollen des Projekts übereinstimmt, sollten Sie das Dienstkonto löschen und neu erstellen und die in der overrides.yaml
verwendete Dienstkontodatei korrigieren.
Ursache 2: SA-Dateien im falschen Verzeichnis
Dieses Problem tritt beim Einrichten der Helm-Charts und beim Erstellen des Dienstkontos auf.
Diagnose
Prüfen Sie den Speicherort der Datei mit den Anmeldedaten Ihres Dienstkontos, um sicherzustellen, dass sie sich im richtigen Helm-Diagrammverzeichnis befindet. Die JSON-Datei des Dienstkontos sollte sich in den folgenden Verzeichnissen befinden:
$APIGEE_HELM_CHARTS_HOME/apigee-datastore
$APIGEE_HELM_CHARTS_HOME/apigee-telemetry
$APIGEE_HELM_CHARTS_HOME/apigee-org
$APIGEE_HELM_CHARTS_HOME/apigee-env
Beispiel
Prüfen Sie beispielsweise die Helm-Diagrammverzeichnisse, indem Sie das Verzeichnis apigee-datastore
auflisten. Wiederholen Sie diesen Vorgang für die Verzeichnisse apigee-org
, apigee-env
und apigee-telemetry
.
Beispielbefehl:
Prüfen Sie, ob Sie sich im richtigen Verzeichnis befinden:
pwd
Beispielausgabe:
/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
Lösung
Kopieren Sie die Dienstkontodatei in die vier Verzeichnisse (apigee-datastore
, apigee-telemetry
, apigee-org
und apigee-env
), wie im Beispielbaum oben gezeigt, und führen Sie die Helm-Diagramme noch einmal aus.