UDCA 포드 오류

증상

Apigee Hybrid를 업그레이드한 후 범용 데이터 수집 에이전트 (UDCA) 및 Connect 에이전트 포드에서 권한 문제 오류가 발생합니다.

오류 메시지

UDCA 포드에서 로그에 다음 오류가 발생합니다.

Permission 'apigee.runtimeconfigs.get' denied on resource 
'organizations/org-example/runtimeConfig' (or it may not 
exist)\\\",\\n  \\\"status\\\": \\\"PERMISSION_DENIED\\

또한 런타임 (MART) 포드의 관리 API에서 Connect Agent에 관한 다음 오류가 발생합니다.

Permission 'apigeeconnect.endpoints.connect' denied on resource 
'//apigeeconnect.googleapis.com/projects/org-example/endpoints/APIGEE_MART' 
(or it may not exist).

일반적인 진단 단계

클러스터에서 Apigee Hybrid 수집 필요 스크립트와 클러스터의 overrides.yaml 파일을 수집합니다.

가능한 원인

원인 설명
잘못된 사용자 인증 정보 overrides.yaml 파일에 잘못된 사용자 인증 정보를 입력했을 수 있습니다.
잘못된 디렉터리에 있는 SA 파일 서비스 계정 (SA) 파일이 $APIGEE_HELM_CHARTS_HOME 디렉터리 외부에 있을 수 있습니다.

원인 1: 잘못된 사용자 인증 정보

UDCA, MART, Connect 에이전트 포드의 overrides.yaml 파일에 사용된 serviceAccountPath 또는 serviceAccountRef가 잘못되었습니다. 이는 Terraform을 사용하는 등 자동화 또는 맞춤 스크립트를 통해 overrides.yaml 파일이 생성되었기 때문일 수 있습니다.

진단

  1. 사용하는 서비스 계정에 할당된 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 프로젝트입니다.
  2. 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 차트를 다시 실행합니다.

서비스 계정 설정