問題
升級 Apigee Hybrid 後,通用資料收集代理程式 (UDCA) 和 Connect 代理程式 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 Agent 擲回這項錯誤:
Permission 'apigeeconnect.endpoints.connect' denied on resource '//apigeeconnect.googleapis.com/projects/org-example/endpoints/APIGEE_MART' (or it may not exist).
常見的診斷步驟
從叢集收集 Apigee 混合式 must-gather 指令碼,以及叢集的 overrides.yaml
檔案。
可能原因
原因 | 說明 |
---|---|
憑證不正確 | 您可能在 overrides.yaml 檔案中輸入了錯誤的憑證。 |
SA 檔案位於錯誤的目錄 | 您的服務帳戶 (SA) 檔案可能位於 $APIGEE_HELM_CHARTS_HOME 目錄外。 |
原因 1:憑證不正確
您在 UDCA、MART 和 Connect Agent Pod 的 overrides.yaml
檔案中使用的 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 政策和角色中使用的服務帳戶相符。
範例
以下是服務帳戶適用的身分與存取權管理政策範例,適用於非正式環境設定:
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 圖表。