Gejala
Setelah mengupgrade Apigee hybrid, pod Universal Data Collection Agent (UDCA) dan Connect Agent Anda akan menampilkan error masalah izin.
Pesan error
Pod UDCA Anda menampilkan error ini di log:
Permission 'apigee.runtimeconfigs.get' denied on resource 'organizations/org-example/runtimeConfig' (or it may not exist)\\\",\\n \\\"status\\\": \\\"PERMISSION_DENIED\\
Selain itu, pod Management API for Runtime (MART) Anda akan menampilkan error ini terkait Connect Agent:
Permission 'apigeeconnect.endpoints.connect' denied on resource '//apigeeconnect.googleapis.com/projects/org-example/endpoints/APIGEE_MART' (or it may not exist).
Langkah-langkah diagnosis umum
Kumpulkan skrip Apigee hybrid must-gather dari cluster Anda dan file overrides.yaml
untuk cluster.
Kemungkinan penyebab
Penyebab | Deskripsi |
---|---|
Kredensial salah | Anda mungkin telah memasukkan kredensial yang salah dalam file overrides.yaml . |
File SA berada di direktori yang salah | File Akun Layanan (SA) Anda mungkin berada di luar direktori $APIGEE_HELM_CHARTS_HOME . |
Penyebab 1: Kredensial salah
serviceAccountPath
atau serviceAccountRef
yang digunakan dalam file overrides.yaml
untuk pod UDCA, MART, dan Connect Agent salah. Hal ini mungkin karena file overrides.yaml
dibuat melalui otomatisasi atau skrip kustom, seperti menggunakan Terraform.
Diagnosis
-
Verifikasi peran dan izin IAM yang ditetapkan ke akun layanan yang Anda gunakan.
gcloud iam service-accounts get-iam-policy SERVICE_ACCOUNT_EMAIL
gcloud projects get-iam-policy PROJECT_ID
Dengan:
- SERVICE_ACCOUNT_EMAIL adalah alamat email akun layanan.
- PROJECT_ID adalah project Google Cloud yang terkait dengan akun layanan.
-
Tinjau file
overrides.yaml
Anda untuk memastikan akun layanan yang dirujuk cocok dengan akun yang digunakan dalam kebijakan dan peran IAM project.
Contoh
Contoh kebijakan IAM yang berfungsi untuk akun layanan untuk penyiapan non-prod:
gcloud iam service-accounts get-iam-policy apigee-non-prod@org-example.
Contoh output:
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
Contoh memvalidasi peran:
gcloud projects get-iam-policy org-example
Contoh output:
bindings: - members: - serviceAccount:apigee-non-prod@org-example. role: roles/apigee.analyticsAgent - members: - serviceAccount:apigee-non-prod@org-example. role: roles/apigee.runtimeAgent - members: - serviceAccount:apigee-non-prod@org-example. role: roles/apigee.synchronizerManager - members: - serviceAccount:apigee-non-prod@org-example. role: roles/apigeeconnect.Agent - members: - serviceAccount:apigee-non-prod@org-example. role: roles/storage.objectAdmin
Untuk produksi, jalankan perintah yang sama terhadap akun layanan produksi untuk apigee-udca
dan periksa peran IAM yang cocok dengan bagian penginstalan.
Resolusi
Jika file akun layanan yang digunakan di overrides.yaml
Anda tidak cocok dengan akun layanan yang benar dalam binding dan peran IAM project, Anda harus menghapus dan membuat ulang akun layanan, serta memperbaiki file akun layanan yang digunakan di overrides.yaml
.
Penyebab 2: File SA berada di direktori yang salah
Masalah ini terjadi saat menyiapkan diagram helm dan membuat akun layanan.
Diagnosis
Periksa lokasi file kredensial akun layanan Anda untuk memastikan file tersebut berada di direktori diagram helm yang benar. File JSON akun layanan harus berada di direktori berikut:
$APIGEE_HELM_CHARTS_HOME/apigee-datastore
$APIGEE_HELM_CHARTS_HOME/apigee-telemetry
$APIGEE_HELM_CHARTS_HOME/apigee-org
$APIGEE_HELM_CHARTS_HOME/apigee-env
Contoh
Misalnya, periksa direktori diagram helm dengan mencantumkan direktori apigee-datastore
, dan lakukan hal yang sama untuk direktori apigee-org
, apigee-env
, dan apigee-telemetry
.
Contoh Perintah:
Pastikan Anda berada di direktori yang benar:
pwd
Contoh output:
/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
Resolusi
Salin file Akun Layanan ke dalam empat direktori (apigee-datastore
, apigee-telemetry
, apigee-org
, dan apigee-env
) sesuai lokasi hierarki contoh di atas, lalu jalankan ulang diagram helm.