Síntoma
Después de actualizar Apigee hybrid, los pods de Universal Data Collection Agent (UDCA) y Connect Agent arrojan un error de problema de permisos.
Mensajes de error
Tu Pod de UDCA arroja este error en los registros:
Permission 'apigee.runtimeconfigs.get' denied on resource 'organizations/org-example/runtimeConfig' (or it may not exist)\\\",\\n \\\"status\\\": \\\"PERMISSION_DENIED\\
Además, tu pod de la API de Management para Runtime (MART) arroja este error sobre el agente de Connect:
Permission 'apigeeconnect.endpoints.connect' denied on resource '//apigeeconnect.googleapis.com/projects/org-example/endpoints/APIGEE_MART' (or it may not exist).
Pasos comunes de diagnóstico
Recopila la secuencia de comandos must-gather de Apigee Hybrid de tu clúster y el archivo overrides.yaml
del clúster.
Causas posibles
Causa | Descripción |
---|---|
Las credenciales son incorrectas | Es posible que hayas ingresado las credenciales incorrectas en el archivo overrides.yaml . |
Los archivos de SA se encuentran en el directorio incorrecto | Es posible que los archivos de tu cuenta de servicio (SA) residan fuera del directorio $APIGEE_HELM_CHARTS_HOME . |
Causa 1: Credenciales incorrectas
Los archivos serviceAccountPath
o serviceAccountRef
que se usan en el archivo overrides.yaml
para los pods de UDCA, MART y Connect Agent son incorrectos. Esto puede deberse a que el archivo overrides.yaml
se generó a través de la automatización o secuencias de comandos personalizadas, por ejemplo, con Terraform.
Diagnóstico
-
Verifica los roles y permisos de IAM asignados a las cuentas de servicio que usas.
gcloud iam service-accounts get-iam-policy SERVICE_ACCOUNT_EMAIL
gcloud projects get-iam-policy PROJECT_ID
Aquí:
- SERVICE_ACCOUNT_EMAIL es la dirección de correo electrónico de la cuenta de servicio.
- PROJECT_ID es el proyecto de Google Cloud asociado con la cuenta de servicio.
-
Revisa tu archivo
overrides.yaml
para asegurarte de que la cuenta de servicio a la que se hace referencia coincida con la que se usa en la política y los roles de IAM del proyecto.
Ejemplo
A continuación, se muestra un ejemplo de una política de IAM que funciona para la cuenta de servicio de una configuración que no es de producción:
gcloud iam service-accounts get-iam-policy apigee-non-prod@org-example.iam.gserviceaccount.com
Resultado de muestra:
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
Ejemplo de validación de roles:
gcloud projects get-iam-policy org-example
Resultado de muestra:
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 la producción, ejecuta los mismos comandos en la cuenta de servicio de producción para apigee-udca
y verifica los roles de IAM que coincidan con la sección de instalación.
Solución
Si el archivo de cuenta de servicio que se usa en tu overrides.yaml
no coincide con la cuenta de servicio correcta en la vinculación y los roles de IAM del proyecto, debes borrar y volver a crear la cuenta de servicio, y corregir el archivo de cuenta de servicio que se usa en el overrides.yaml
.
Causa 2: Los archivos SA se encuentran en el directorio incorrecto
Este problema se produce cuando se configuran los gráficos de Helm y se crea la cuenta de servicio.
Diagnóstico
Verifica la ubicación del archivo de credenciales de tu cuenta de servicio para asegurarte de que resida en el directorio del gráfico de Helm correcto. El archivo JSON de la cuenta de servicio debe residir en los siguientes directorios:
$APIGEE_HELM_CHARTS_HOME/apigee-datastore
$APIGEE_HELM_CHARTS_HOME/apigee-telemetry
$APIGEE_HELM_CHARTS_HOME/apigee-org
$APIGEE_HELM_CHARTS_HOME/apigee-env
Ejemplo
Por ejemplo, verifica los directorios de charts de Helm enumerando el directorio apigee-datastore
y haz lo mismo para los directorios apigee-org
, apigee-env
y apigee-telemetry
.
Comando de muestra:
Asegúrate de estar en el directorio correcto:
pwd
Resultado de muestra:
/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
Solución
Copia el archivo de la cuenta de servicio en los cuatro directorios (apigee-datastore
, apigee-telemetry
, apigee-org
y apigee-env
) según la ubicación del árbol de ejemplo anterior y, luego, vuelve a ejecutar los gráficos de Helm.