Problème constaté
Après la mise à niveau d'Apigee Hybrid, vos pods Universal Data Collection Agent (UDCA) et Connect Agent génèrent une erreur d'autorisation.
Messages d'erreur
Votre pod UDCA génère l'erreur suivante dans les journaux :
Permission 'apigee.runtimeconfigs.get' denied on resource 'organizations/org-example/runtimeConfig' (or it may not exist)\\\",\\n \\\"status\\\": \\\"PERMISSION_DENIED\\
De plus, votre pod API Management pour les données d'exécution (MART) génère l'erreur suivante concernant l'agent Connect :
Permission 'apigeeconnect.endpoints.connect' denied on resource '//apigeeconnect.googleapis.com/projects/org-example/endpoints/APIGEE_MART' (or it may not exist).
Étapes de diagnostic courantes
Collectez le script must-gather Apigee hybrid à partir de votre cluster et le fichier overrides.yaml
pour le cluster.
Causes possibles
Cause | Description |
---|---|
Identifiants incorrects | Vous avez peut-être saisi les mauvais identifiants dans le fichier overrides.yaml . |
Fichiers SA situés dans le mauvais répertoire | Vos fichiers de compte de service peuvent se trouver en dehors du répertoire $APIGEE_HELM_CHARTS_HOME . |
Cause 1 : Identifiants incorrects
Les serviceAccountPath
ou serviceAccountRef
utilisés dans votre fichier overrides.yaml
pour les pods UDCA, MART et Connect Agent sont incorrects. Cela peut être dû au fait que le fichier overrides.yaml
a été généré par le biais d'une automatisation ou de scripts personnalisés, par exemple à l'aide de Terraform.
Diagnostic
-
Vérifiez les rôles et autorisations IAM attribués aux comptes de service que vous utilisez.
gcloud iam service-accounts get-iam-policy SERVICE_ACCOUNT_EMAIL
gcloud projects get-iam-policy PROJECT_ID
Où :
- SERVICE_ACCOUNT_EMAIL est l'adresse e-mail du compte de service.
- PROJECT_ID correspond au projet Google Cloud associé au compte de service.
-
Examinez votre fichier
overrides.yaml
pour vous assurer que le compte de service référencé correspond à celui utilisé dans la stratégie et les rôles IAM du projet.
Exemple
Voici un exemple de stratégie IAM fonctionnelle pour le compte de service d'une configuration non destinée à la production :
gcloud iam service-accounts get-iam-policy apigee-non-prod@org-example.iam.gserviceaccount.com
Exemple de résultat :
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
Exemple de validation des rôles :
gcloud projects get-iam-policy org-example
Exemple de résultat :
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
Pour la production, exécutez les mêmes commandes sur le compte de service de production pour apigee-udca
et recherchez les rôles IAM correspondant à la section Installation.
Solution
Si le fichier de compte de service utilisé dans votre overrides.yaml
ne correspond pas au compte de service approprié dans les liaisons et rôles IAM du projet, vous devez supprimer et recréer le compte de service, puis corriger le fichier de compte de service utilisé dans le overrides.yaml
.
Cause 2 : Fichiers SA situés dans le mauvais répertoire
Ce problème se produit lors de la configuration des graphiques Helm et de la création du compte de service.
Diagnostic
Vérifiez l'emplacement de votre fichier d'identifiants de compte de service pour vous assurer qu'il se trouve dans le répertoire de chart Helm approprié. Le fichier JSON du compte de service doit se trouver dans les répertoires suivants :
$APIGEE_HELM_CHARTS_HOME/apigee-datastore
$APIGEE_HELM_CHARTS_HOME/apigee-telemetry
$APIGEE_HELM_CHARTS_HOME/apigee-org
$APIGEE_HELM_CHARTS_HOME/apigee-env
Exemple
Par exemple, vérifiez les répertoires de charts Helm en listant le répertoire apigee-datastore
, puis faites de même pour les répertoires apigee-org
, apigee-env
et apigee-telemetry
.
Exemple de commande :
Assurez-vous de vous trouver dans le bon répertoire :
pwd
Exemple de résultat :
/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
Solution
Copiez le fichier du compte de service dans les quatre répertoires (apigee-datastore
, apigee-telemetry
, apigee-org
et apigee-env
) en suivant l'exemple d'arborescence ci-dessus, puis réexécutez les graphiques Helm.