Google Cloud Apache Spark용 서버리스 서비스 계정

Apache Spark용 서버리스 일괄 워크로드 및 대화형 세션은 최종 사용자 또는 서비스 계정 사용자 인증 정보로 실행됩니다. 서비스 계정 사용자 인증 정보가 사용되는 경우 일괄 워크로드 또는 대화형 세션을 실행하는 데 사용되는 서비스 계정은 일괄 또는 세션 런타임 버전에 따라 달라집니다.

3.0 이전 런타임 서비스 계정

서비스 계정 사용자 인증 정보가 있는 3.0 이전 Spark 런타임 버전은 Compute Engine 기본 서비스 계정 또는 사용자가 지정한 커스텀 서비스 계정을 사용하여 배치 워크로드를 제출하거나 대화형 세션을 만듭니다.

3.0 이상 런타임 서비스 계정

서비스 계정 사용자 인증 정보가 있는 Spark 런타임 버전 3.0 이상에서는 사용자가 지정한 맞춤 서비스 계정을 사용하여 일괄 워크로드를 제출하거나 대화형 세션을 만듭니다.

Apache Spark 3.0 이상 런타임용 서버리스는 Dataproc 사용자 Google Cloud 프로젝트에 Dataproc 리소스 관리자 노드 서비스 에이전트 역할을 가진 Dataproc 리소스 관리자 노드 서비스 에이전트 서비스 계정 service-project-number@gcp-sa-dataprocrmnode.iam.gserviceaccount.com를 만듭니다. 이 서비스 계정은 워크로드가 생성된 프로젝트에 있는 Apache Spark용 서버리스 리소스에 대해 다음 시스템 작업을 실행합니다.

  • Cloud Logging 및 Cloud Monitoring
  • get, heartbeat, mintOAuthToken와 같은 Dataproc Resource Manager 노드 기본 작업

IAM 서비스 계정 역할 보기 및 관리

일괄 워크로드 또는 세션 서비스 계정에 부여된 역할을 보고 관리하려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 IAM 페이지로 이동합니다.

    IAM으로 이동'

  2. Google 제공 역할 부여 포함을 클릭합니다.

  3. 일괄 워크로드 또는 세션 기본값 또는 커스텀 서비스 기본값 또는 커스텀 서비스 계정에 나열된 역할을 확인합니다.

    다음 이미지는 Apache Spark용 서버리스에서 기본적으로 워크로드 또는 세션 서비스 계정으로 사용하는 Compute Engine 기본 서비스 계정(project_number-compute@developer.gserviceaccount.com)에 나열된 필수 Dataproc 작업자 역할을 보여줍니다.

    IAM 콘솔의 Compute Engine 기본 서비스 계정에 대한 Dataproc 작업자 역할
    Google Cloud 콘솔의 IAM 섹션에 있는 Compute Engine 기본 서비스 계정에 할당된 Dataproc 작업자 역할
  4. 서비스 계정 행에 표시된 연필 아이콘을 클릭하여 서비스 계정 역할을 부여하거나 삭제할 수 있습니다.

교차 프로젝트 서비스 계정 사용 방법

일괄 워크로드 프로젝트(일괄이 제출된 프로젝트)와 다른 프로젝트의 서비스 계정을 사용하는 일괄 워크로드를 제출할 수 있습니다. 이 섹션에서 서비스 계정이 있는 프로젝트를 service account project라고 하고 일괄 처리가 제출된 프로젝트를 batch project라고 합니다.

교차 프로젝트 서비스 계정을 사용하여 일괄 워크로드를 실행하는 이유는 무엇인가요? 한 가지 가능한 이유는 다른 프로젝트의 서비스 계정에 해당 프로젝트의 리소스에 대한 세분화된 액세스 권한을 제공하는 IAM 역할 역할이 할당되었기 때문입니다.

설정 단계

이 섹션의 예시는 3.0 이전 런타임 버전으로 실행되는 일괄 워크로드를 제출하는 데 적용됩니다.

  1. 서비스 계정 프로젝트에서 다음을 수행합니다.

    1. 프로젝트 간 서비스 계정 연결 사용 설정

    2. Enable the Dataproc API.

      Roles required to enable APIs

      To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

      Enable the API

    3. 이메일 계정(클러스터를 만드는 사용자)에 서비스 계정 프로젝트 또는 서비스 계정 프로젝트의 서비스 계정(더욱 세부적으로 제어하려는 경우)에 대한 서비스 계정 사용자 역할을 부여합니다.

      자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참고하여 프로젝트 수준에서 역할을 부여하고 서비스 계정에 대한 액세스 관리를 참고하여 서비스 계정 수준에서 역할을 부여하세요.

      gcloud CLI 예시:

      다음 샘플 명령어는 사용자에게 프로젝트 수준의 서비스 계정 사용자 역할을 부여합니다.

      gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
          --member=USER_EMAIL \
          --role="roles/iam.serviceAccountUser"
      

      참고:

      • USER_EMAIL: 사용자 계정 이메일 주소를 user:user-name@example.com 형식으로 제공합니다.

      다음 샘플 명령어는 사용자에게 서비스 계정 수준의 서비스 계정 사용자 역할을 부여합니다.

      gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
          --member=USER_EMAIL \
          --role="roles/iam.serviceAccountUser"
      

      참고:

      • USER_EMAIL: 사용자 계정 이메일 주소를 user:user-name@example.com 형식으로 제공합니다.
    4. 서비스 계정에 일괄 프로젝트에 대한 Dataproc 작업자 역할을 부여합니다.

      gcloud CLI 예시:

      gcloud projects add-iam-policy-binding BATCH_PROJECT_ID \
          --member=serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
          --role="roles/dataproc.worker"
      
  2. 일괄 프로젝트에서 다음을 수행합니다.

    1. Dataproc 서비스 에이전트 서비스 계정에 서비스 계정 프로젝트 또는 서비스 계정 프로젝트의 서비스 계정(더욱 세밀하게 제어하려는 경우)에 대한 서비스 계정 사용자서비스 계정 토큰 생성자 역할을 부여합니다. 이렇게 하면 일괄 프로젝트의 Dataproc 서비스 에이전트 서비스 계정이 서비스 계정 프로젝트의 서비스 계정에 대한 토큰을 만들 수 있습니다.

      자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참고하여 프로젝트 수준에서 역할을 부여하고 서비스 계정에 대한 액세스 관리를 참고하여 서비스 계정 수준에서 역할을 부여하세요.

      gcloud CLI 예시:

      다음 명령어는 배치 프로젝트의 Dataproc 서비스 에이전트 서비스 계정에 프로젝트 수준의 서비스 계정 사용자 및 서비스 계정 토큰 생성자 역할을 부여합니다.

      gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountUser"
      
      gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      

      다음 샘플 명령어는 배치 프로젝트의 Dataproc 서비스 에이전트 서비스 계정에 서비스 계정 수준의 서비스 계정 사용자 및 서비스 계정 토큰 생성자 역할을 부여합니다.

      gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountUser"
      
      gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      
    2. 일괄 프로젝트의 Compute Engine 서비스 에이전트 서비스 계정에 서비스 계정 프로젝트 또는 서비스 계정 프로젝트의 서비스 계정(더욱 세밀하게 제어하려는 경우)에 대한 서비스 계정 토큰 생성자 역할을 부여합니다. 이렇게 하면 일괄 프로젝트의 Compute Agent 서비스 에이전트 서비스 계정에 서비스 계정 프로젝트의 서비스 계정에 대한 토큰을 만들 수 있는 권한이 부여됩니다.

      자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참고하여 프로젝트 수준에서 역할을 부여하고 서비스 계정에 대한 액세스 관리를 참고하여 서비스 계정 수준에서 역할을 부여하세요.

      gcloud CLI 예시:

      다음 샘플 명령어는 배치 프로젝트의 Compute Engine 서비스 에이전트 서비스 계정에 프로젝트 수준의 서비스 계정 토큰 생성자 역할을 부여합니다.

      gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      

      다음 샘플 명령어는 클러스터 프로젝트의 Compute Engine 서비스 에이전트 서비스 계정에 서비스 계정 수준의 서비스 계정 토큰 생성자 역할을 부여합니다.

      gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      

일괄 워크로드 제출

설정 단계를 완료한 후 배치 워크로드를 제출할 수 있습니다. 서비스 계정 프로젝트의 서비스 계정을 일괄 워크로드에 사용할 서비스 계정으로 지정해야 합니다.

권한 기반 오류 문제 해결

일괄 워크로드 또는 세션에서 사용하는 서비스 계정의 권한이 잘못되었거나 부족하면 '드라이버 컴퓨팅 노드가 600초 내에 일괄 처리를 위해 초기화되지 않음' 오류 메시지가 표시되는 일괄 또는 세션 생성 실패가 발생할 수 있습니다. 이 오류는 할당된 제한 시간 내에 Spark 드라이버를 시작할 수 없음을 나타내며, 이는 종종 Google Cloud 리소스에 대한 필요한 액세스 권한이 부족하기 때문입니다.

이 문제를 해결하려면 서비스 계정에 다음 최소 역할 또는 권한이 있는지 확인하세요.

  • Dataproc 작업자 역할 (roles/dataproc.worker): 이 역할은 Apache Spark용 서버리스가 Spark 워크로드와 세션을 관리하고 실행하는 데 필요한 권한을 부여합니다.
  • 스토리지 객체 뷰어 (roles/storage.objectViewer), 스토리지 객체 생성자 (roles/storage.objectCreator) 또는 스토리지 객체 관리자 (roles/storage.admin): Spark 애플리케이션이 Cloud Storage 버킷에서 읽거나 Cloud Storage 버킷에 쓰는 경우 서비스 계정에 버킷에 액세스할 수 있는 적절한 권한이 필요합니다. 예를 들어 입력 데이터가 Cloud Storage 버킷에 있는 경우 Storage Object Viewer이 필요합니다. 애플리케이션이 Cloud Storage 버킷에 출력을 쓰는 경우 Storage Object Creator 또는 Storage Object Admin가 필요합니다.
  • BigQuery 데이터 편집자 (roles/bigquery.dataEditor) 또는 BigQuery 데이터 뷰어 (roles/bigquery.dataViewer): Spark 애플리케이션이 BigQuery와 상호작용하는 경우 서비스 계정에 적절한 BigQuery 역할이 있는지 확인합니다.
  • Cloud Logging 권한: 서비스 계정에는 효과적인 디버깅을 위해 Cloud Logging에 로그를 쓸 수 있는 권한이 필요합니다. 일반적으로 Logging Writer 역할 (roles/logging.logWriter)이면 충분합니다.
  • dataproc.worker 역할 누락: 이 핵심 역할이 없으면 Apache Spark용 서버리스 인프라가 드라이버 노드를 제대로 프로비저닝하고 관리할 수 없습니다.

  • Cloud Storage 권한 부족: Spark 애플리케이션이 필요한 서비스 계정 권한 없이 Cloud Storage 버킷에서 입력 데이터를 읽거나 출력 데이터를 쓰려고 하면 중요한 리소스에 액세스할 수 없으므로 드라이버가 초기화되지 않을 수 있습니다.

  • 네트워크 또는 방화벽 문제: VPC 서비스 제어 또는 방화벽 규칙이 실수로 서비스 계정의 Google Cloud API 또는 리소스 액세스를 차단할 수 있습니다.

서비스 계정 권한을 확인하고 업데이트하려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 IAM 및 관리자 > IAM 페이지로 이동합니다.
  2. 일괄 워크로드 또는 세션에 사용되는 서비스 계정을 찾습니다.
  3. 필요한 역할이 할당되었는지 확인합니다. 그렇지 않은 경우 추가합니다.

Serverless for Apache Spark 역할 및 권한 목록은 Serverless for Apache Spark 권한 및 IAM 역할을 참고하세요.