Síntoma
Después de actualizar Apigee hybrid, los pods de tu agente general de recogida de datos (UDCA) y de Connect Agent generan un error de problema de permisos.
Mensajes de error
Tu pod de UDCA muestra 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 Management for Runtime (MART) muestra este error en relación con el agente de conexión:
Permission 'apigeeconnect.endpoints.connect' denied on resource '//apigeeconnect.googleapis.com/projects/org-example/endpoints/APIGEE_MART' (or it may not exist).
Pasos de diagnóstico habituales
Recoge la secuencia de comandos Apigee hybrid must-gather de tu clúster y el archivo overrides.yaml
del clúster.
Posibles motivos
Causa | Descripción |
---|---|
Credenciales incorrectas | Es posible que hayas introducido las credenciales incorrectas en el archivo overrides.yaml . |
Los archivos de SA se encuentran en un directorio incorrecto | Es posible que los archivos de tu cuenta de servicio (SA) se encuentren fuera del directorio $APIGEE_HELM_CHARTS_HOME . |
Causa 1: Credenciales incorrectas
Los serviceAccountPath
o serviceAccountRef
que se usan en el archivo overrides.yaml
de los pods de UDCA, MART y Connect Agent son incorrectos. Esto puede deberse a que el archivo overrides.yaml
se haya generado mediante automatización o secuencias de comandos personalizadas, como Terraform.
Diagnóstico
-
Verifica los roles y permisos de gestión de identidades y accesos 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
Donde:
- SERVICE_ACCOUNT_EMAIL es la dirección de correo de la cuenta de servicio.
- PROJECT_ID es el proyecto de Google Cloud asociado a la cuenta de servicio.
-
Revisa el archivo
overrides.yaml
para asegurarte de que la cuenta de servicio a la que se hace referencia coincide con la que se usa en la política y los roles de gestión de identidades y accesos del proyecto.
Ejemplo
Ejemplo de una política de gestión de identidades y accesos 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
Ejemplo de salida:
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
Ejemplo de salida:
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
En producción, ejecuta los mismos comandos en la cuenta de servicio de producción de apigee-udca
y comprueba los roles de gestión de identidades y accesos que coincidan con la sección instalación.
Resolución
Si el archivo de cuenta de servicio que se usa en tu overrides.yaml
no coincide con la cuenta de servicio correcta en los enlaces y roles de IAM del proyecto, debes eliminar y volver a crear la cuenta de servicio, así como corregir el archivo de cuenta de servicio que se usa en el overrides.yaml
.
Causa 2: Los archivos SA se encuentran en un directorio incorrecto
Este problema se produce al configurar los gráficos de Helm y crear la cuenta de servicio.
Diagnóstico
Comprueba la ubicación del archivo de credenciales de tu cuenta de servicio para asegurarte de que se encuentra en el directorio del gráfico de Helm correcto. El archivo JSON de la cuenta de servicio debe estar 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, consulta los directorios de gráficos de Helm enumerando el directorio apigee-datastore
y haz lo mismo con los directorios apigee-org
, apigee-env
y apigee-telemetry
.
Comando de ejemplo:
Asegúrate de que estás en el directorio correcto:
pwd
Ejemplo de salida:
/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
Resolución
Copia el archivo de 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, a continuación, vuelve a ejecutar los gráficos de Helm.