워크로드 ID가있는 Google Cloud Java SDK?

Oct 08 2020

GKE 클러스터 내에서 Storage API로 인증하는 방법을 알아 내려고합니다.

암호:

Storage storage = StorageOptions.newBuilder()
  .setCredentials(ServiceAccountCredentials.getApplicationDefault())
  .setProjectId(gcpProjectId)
  .build().getService();

getApplicationDefault() 다음 수단을 사용하여 API로 인증하도록 문서화되어 있습니다.

  1. {@code GOOGLE_APPLICATION_CREDENTIALS} 환경 변수가 가리키는 사용자 인증 정보 파일
  2. Google Cloud SDK {@code gcloud auth application-default login} 명령어에서 제공하는 사용자 인증 정보
  3. Google App Engine 기본 제공 자격 증명
  4. Google Cloud Shell 기본 제공 사용자 인증 정보
  5. Google Compute Engine 기본 제공 사용자 인증 정보

애플리케이션은 GCP 워크로드 ID 기능을 사용하므로 애플리케이션 (클러스터 내) 서비스 계정에 다음 주석이 추가됩니다.

serviceAccount.annotations.iam.gke.io/gcp-service-account: [email protected]

이제 스토리지 계정에 대한 호출이 다음 오류와 함께 실패합니다.

{
  "code" : 403,
  "errors" : [ {
    "domain" : "global",
    "message" : "Primary: /namespaces/my-project.svc.id.goog with additional claims does not have storage.objects.create access to the Google Cloud Storage object.",
    "reason" : "forbidden"
  } ],
  "message" : "Primary: /namespaces/my-project.svc.id.goog with additional claims does not have storage.objects.create access to the Google Cloud Storage object."
}

이로 인해 워크로드 ID가 올바르게 작동하지 않는다고 생각합니다. 주석이 추가 된 서비스 계정에 대해 기본 계정이 아닌 오류 메시지를받을 것으로 예상합니다.

내가해야 할 일이 더 있습니까?

답변

MoritzSchmitzv.Hülst Oct 09 2020 at 15:47

주석이 잘못되었습니다. 대신에:

serviceAccount.annotations.iam.gke.io/gcp-service-account: [email protected]

그것은 틀림 없다

iam.gke.io/gcp-service-account: [email protected]

이제 오류 메시지는 앱이 워크로드 ID를 사용하고 있음을 보여줍니다.

java.io.IOException: Unexpected Error code 403 trying to get security access token from Compute Engine metadata for the default service account: Unable to generate access token; IAM returned 403 Forbidden: The caller does not have permission
This error could be caused by a missing IAM policy binding on the target IAM service account.
For more information, refer to the Workload Identity documentation:
    https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity#creating_a_relationship_between_ksas_and_gsas