症状
升级 Apigee Hybrid 后,您的通用数据收集代理 (UDCA) 和 Connect Agent pod 会抛出权限问题错误。
错误消息
您的 UDCA pod 在日志中抛出以下错误:
Permission 'apigee.runtimeconfigs.get' denied on resource 'organizations/org-example/runtimeConfig' (or it may not exist)\\\",\\n \\\"status\\\": \\\"PERMISSION_DENIED\\
此外,您的 Management API for Runtime (MART) pod 会抛出以下与 Connect 代理相关的错误:
Permission 'apigeeconnect.endpoints.connect' denied on resource '//apigeeconnect.googleapis.com/projects/org-example/endpoints/APIGEE_MART' (or it may not exist).
常见诊断步骤
从集群中收集 Apigee Hybrid Must-Gather 脚本和集群的 overrides.yaml
文件。
可能的原因
原因 | 说明 |
---|---|
凭据不正确 | 您可能在 overrides.yaml 文件中输入了错误的凭据。 |
SA 文件位于错误的目录中 | 您的服务账号 (SA) 文件可能位于 $APIGEE_HELM_CHARTS_HOME 目录之外。 |
原因 1:凭据不正确
您在 overrides.yaml
文件中为 UDCA、MART 和 Connect Agent pod 使用的 serviceAccountPath
或 serviceAccountRef
不正确。这可能是因为 overrides.yaml
文件是通过自动化或自定义脚本(例如使用 Terraform)生成的。
诊断
-
验证分配给您所用服务账号的 IAM 角色和权限。
gcloud iam service-accounts get-iam-policy SERVICE_ACCOUNT_EMAIL
gcloud projects get-iam-policy PROJECT_ID
其中:
- SERVICE_ACCOUNT_EMAIL 是服务账号的电子邮件地址。
- PROJECT_ID 是与服务账号关联的 Google Cloud 项目。
-
检查您的
overrides.yaml
文件,确保所引用的服务账号与项目 IAM 政策和角色中使用的服务账号一致。
示例
以下是适用于非生产环境设置的服务账号的有效 IAM 政策示例:
gcloud iam service-accounts get-iam-policy apigee-non-prod@org-example.iam.gserviceaccount.com
示例输出:
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
验证角色的示例:
gcloud projects get-iam-policy org-example
示例输出:
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
对于生产环境,请针对生产服务账号运行相同的 apigee-udca
命令,并检查与安装部分匹配的 IAM 角色。
解决方法
如果 overrides.yaml
中使用的服务账号文件与项目 IAM 绑定和角色中的正确服务账号不匹配,您应删除并重新创建服务账号,并更正 overrides.yaml
中使用的服务账号文件。
原因 2:SA 文件位于错误的目录中
在设置 Helm 图表并创建服务账号时,会出现此问题。
诊断
检查服务账号凭据文件的位置,确保其位于正确的 Helm 图表目录中。服务账号 JSON 文件应位于以下目录中:
$APIGEE_HELM_CHARTS_HOME/apigee-datastore
$APIGEE_HELM_CHARTS_HOME/apigee-telemetry
$APIGEE_HELM_CHARTS_HOME/apigee-org
$APIGEE_HELM_CHARTS_HOME/apigee-env
示例
例如,通过列出 apigee-datastore
目录来检查 Helm 图表目录,并对 apigee-org
、apigee-env
和 apigee-telemetry
目录执行相同的操作。
示例命令:
确保您位于正确的目录中:
pwd
示例输出:
/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
解决方法
按照上面的示例树位置,将服务账号文件复制到四个目录(apigee-datastore
、apigee-telemetry
、apigee-org
和 apigee-env
)中,然后重新运行 Helm 图表。