증상
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
파일이 생성되었기 때문일 수 있습니다.
진단
-
사용하는 서비스 계정에 할당된 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 차트를 다시 실행합니다.