GKE 기반 Dataproc IAM 역할 및 ID

데이터 영역 ID

GKE 기반 Dataproc은 GKE 워크로드 아이덴티티를 사용하여 GKE 기반 Dataproc 클러스터 내의 포드가 기본 Dataproc VM 서비스 계정(데이터 영역 ID) 권한으로 작동하도록 허용합니다. GKE 기반 Dataproc 가상 클러스터에서 사용하는 GSA의 IAM 정책을 업데이트하려면 워크로드 아이덴티티에 다음 권한이 필요합니다.

  • compute.projects.get
  • iam.serviceAccounts.getIamPolicy
  • iam.serviceAccounts.setIamPolicy

GKE 워크로드 아이덴티티는 다음 GKE 서비스 계정(KSA)을 Dataproc VM 서비스 계정에 연결합니다.

  1. agent KSA(Dataproc 제어 영역과 상호작용):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]
  2. spark-driver KSA(Spark 드라이버 실행):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-driver]
  3. spark-executor KSA(Spark 실행자 실행):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-executor]

역할 지정

spark-driverspark-executor가 프로젝트 리소스, 데이터 소스, 데이터 싱크 및 워크로드에 필요한 기타 서비스에 액세스할 수 있도록 Dataproc VM 서비스 계정에 권한을 부여합니다.

예:

다음 명령어는 GKE 기반 Dataproc 클러스터 VM에서 실행되는 Spark 워크로드가 프로젝트의 Cloud Storage 버킷 및 BigQuery 데이터에 액세스할 수 있도록 기본 Dataproc VM 서비스 계정에 역할을 할당합니다.

gcloud projects add-iam-policy-binding \
    --role=roles/storage.objectAdmin \
    --role=roles/bigquery.dataEditor \
    --member="project-number-compute@developer.gserviceaccount.com" \
    "${PROJECT}"

커스텀 IAM 구성

GKE 기반 Dataproc은 GKE 워크로드 아이덴티티를 사용하여 기본 Dataproc VM 서비스 계정(데이터 영역 ID)을 3개의 GKE 서비스 계정(KSA)에 연결합니다.

다른 Google 서비스 계정(GSA)을 만들어 KSA에 연결하려면 다음 안내를 따르세요.

  1. GSA를 만듭니다(서비스 계정 생성 및 관리 참조).

    gcloud CLI 예시:

    gcloud iam service-accounts create "dataproc-${USER}" \
        --description "Used by Dataproc on GKE workloads."
    
    참고:

    • 이 예시에서는 GSA 이름을 'dataproc-${USER}'로 설정하지만 다른 이름을 사용할 수 있습니다.
  2. 환경 변수를 설정합니다.

    PROJECT=project-id \
      DPGKE_GSA="dataproc-${USER}@${PROJECT}.iam.gserviceaccount.com"
      DPGKE_NAMESPACE=GKE namespace
    
    참고:

    • DPGKE_GSA: 이 예시에서는 GSA의 이메일 주소가 포함된 변수의 이름으로 DPGKE_GSA를 설정하여 사용합니다. 다른 변수 이름을 설정하여 사용해도 됩니다.
    • DPGKE_NAMESPACE: 기본 GKE 네임스페이스는 GKE 기반 Dataproc 클러스터의 이름입니다.
  3. GKE 기반 Dataproc 클러스터를 만들 때 기본 GSA 대신 GSA를 사용하려면 Dataproc에 다음 속성을 추가합니다.

    --properties "dataproc:dataproc.gke.agent.google-service-account=${DPGKE_GSA}" \
    --properties "dataproc:dataproc.gke.spark.driver.google-service-account=${DPGKE_GSA}" \
    --properties "dataproc:dataproc.gke.spark.executor.google-service-account=${DPGKE_GSA}" \

  4. 다음 명령어를 실행하여 필요한 워크로드 아이덴티티 권한을 서비스 계정에 할당합니다.

    1. 에이전트 역할을 하도록 GSA에 dataproc.worker 역할을 할당합니다.
      gcloud projects add-iam-policy-binding \
          --role=roles/dataproc.worker \
          --member="serviceAccount:${DPGKE_GSA}" \
          "${PROJECT}"
      
    2. GSA 역할을 하도록 agent KSA에 iam.workloadIdentityUser 역할을 할당합니다.

      gcloud iam service-accounts add-iam-policy-binding \
          --role=roles/iam.workloadIdentityUser \
          --member="serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]" \
          "${DPGKE_GSA}"
      

    3. GSA 역할을 하도록 spark-driver KSA에 iam.workloadIdentityUser 역할을 부여합니다.

      gcloud iam service-accounts add-iam-policy-binding \
          --role=roles/iam.workloadIdentityUser \
          --member="serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-driver]" \
          "${DPGKE_GSA}"
      

    4. GSA 역할을 하도록 spark-executor KSA에 iam.workloadIdentityUser 역할을 부여합니다.

      gcloud iam service-accounts add-iam-policy-binding \
          --role=roles/iam.workloadIdentityUser \
          --member="serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-executor]" \
          "${DPGKE_GSA}"