Dataproc 서비스 계정

이 페이지에서는 서비스 계정 및 VM 액세스 범위와 Dataproc에서 서비스 계정을 사용하는 방법에 대해 설명합니다.

서비스 계정이란 무엇인가요?

서비스 계정은 Compute Engine 가상 머신(VM) 인스턴스에서 실행되는 서비스와 애플리케이션이 다른 Google Cloud API와 상호작용하기 위해 사용할 수 있는 특수 계정입니다 애플리케이션은 서비스 계정 사용자 인증 정보를 사용하여 API 집합에 자체적으로 승인하고 서비스 계정에 부여된 권한 내에서 VM에서의 작업을 수행할 수 있습니다.

Dataproc 서비스 계정

다음 서비스 계정에는 클러스터가 있는 프로젝트에서 Dataproc 작업을 수행하는 데 필요한 권한이 부여됩니다.

  • Dataproc 서비스 에이전트 서비스 계정: Dataproc은 Dataproc 서비스 에이전트 역할로 이 서비스 계정을 Dataproc 사용자의 Google Cloud 프로젝트에 만듭니다. 클러스터를 만들 때 이 서비스 계정을 커스텀 VM 서비스 계정으로 바꿀 수 없습니다. 이 서비스 에이전트 계정은 클러스터 VM 생성, 업데이트, 삭제와 같은 Dataproc 제어 영역 작업을 수행하는 데 사용됩니다(Dataproc 서비스 에이전트(제어 영역 ID) 참조).

    기본적으로 Dataproc은 service-[project-number]@dataproc-accounts.iam.gserviceaccount.com을 서비스 에이전트 계정으로 사용합니다. 서비스 계정에 권한이 없으면 Dataproc은 제어 영역 작업에 Google API 서비스 에이전트 계정[project-number]@cloudservices.gserviceaccount.com을 사용합니다.

공유 VPC 네트워크: 클러스터가 공유 VPC 네트워크를 사용하는 경우 공유 VPC 관리자가 위의 서비스 계정 둘 다에 공유 VPC 호스트 프로젝트의 네트워크 사용자 역할을 부여해야 합니다. 자세한 내용은 다음을 참고하세요.

Dataproc VM 액세스 범위

VM 액세스 범위와 IAM 역할은 함께 작동하여 VM 액세스를 Google Cloud API로 제한합니다. 예를 들어 클러스터 VM에 https://www.googleapis.com/auth/storage-full 범위만 부여된 경우, 클러스터 VM에서 실행되는 애플리케이션은 Cloud Storage API를 호출할 수 있지만 광범위한 권한이 있는 BigQuery 역할이 부여된 VM 서비스 계정으로 실행 중인 경우에도 BigQuery에 요청할 수는 없습니다.

권장사항은 광범위한 cloud-platform 범위(https://www.googleapis.com/auth/cloud-platform)를 VM에 부여한 후 특정 IAM 역할VM 서비스 계정에 부여하여 VM 액세스를 제한하는 것입니다.

기본 Dataproc VM 범위. 클러스터를 만들 때 범위를 지정하지 않으면(gcloud dataproc cluster create --scopes 참조) Dataproc VM의 기본 범위 집합은 다음과 같습니다.

https://www.googleapis.com/auth/cloud-platform (clusters created with image version 2.1+).
https://www.googleapis.com/auth/bigquery
https://www.googleapis.com/auth/bigtable.admin.table
https://www.googleapis.com/auth/bigtable.data
https://www.googleapis.com/auth/cloud.useraccounts.readonly
https://www.googleapis.com/auth/devstorage.full_control
https://www.googleapis.com/auth/devstorage.read_write
https://www.googleapis.com/auth/logging.write

클러스터를 만들 때 범위를 지정하면 지정한 범위()와 (지정하지 않더라도) 다음과 같은 최소 필수 범위 집합이 클러스터 VM에 포함됩니다.

https://www.googleapis.com/auth/cloud-platform (clusters created with image version 2.1+).
https://www.googleapis.com/auth/cloud.useraccounts.readonly
https://www.googleapis.com/auth/devstorage.read_write
https://www.googleapis.com/auth/logging.write

커스텀 VM 서비스 계정으로 클러스터 만들기

클러스터를 만들 때 클러스터에서 기본 VM 서비스 계정 대신 Dataproc 데이터 영역 작업에 사용할 커스텀 VM 서비스 계정을 지정할 수 있습니다(클러스터가 생성된 후에는 VM 서비스 계정을 변경할 수 없음). IAM 역할이 할당된 VM 서비스 계정을 사용하면 프로젝트 리소스에 대한 세분화된 액세스 권한을 클러스터에 제공할 수 있습니다.

사전 단계

  1. 클러스터가 생성될 프로젝트 내에서 커스텀 VM 서비스 계정을 만듭니다.

  2. 커스텀 VM 서비스 계정에 프로젝트에 대한 Dataproc 작업자 역할 및 작업에 필요한 추가 역할(예: BigQuery 리더 및 작성자 역할)을 부여합니다(Dataproc 권한 및 IAM 역할 참조).

    gcloud CLI 예시:

    • 다음 샘플 명령어는 클러스터 프로젝트의 커스텀 VM 서비스 계정에 프로젝트 수준의 Dataproc 작업자 역할을 부여합니다.
    gcloud projects add-iam-policy-binding CLUSTER_PROJECT_ID \
        --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role="roles/dataproc.worker"
     
    • 커스텀 역할 고려사항: 사전 정의된 Dataproc Worker 역할을 서비스 계정에 부여하는 대신 작업자 역할 권한이 포함되지만 storage.objects.* 권한은 제한된 커스텀 역할을 서비스 계정에 부여할 수 있습니다.
      • 커스텀 역할은 최소한 VM 서비스 계정에 Dataproc 스테이징 및 임시 버킷 및 클러스터에서 실행되는 작업에 필요한 모든 추가 버킷의 객체에 대한 storage.objects.create, storage.objects.get, storage.objects.update 권한을 부여해야 합니다.

클러스터 만들기

  • 프로젝트에 클러스터를 만듭니다.

gcloud 명령

gcloud dataproc clusters create 명령어를 사용하여 커스텀 VM 서비스 계정이 포함된 클러스터를 만듭니다.

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --scopes=SCOPE

다음을 바꿉니다.

  • CLUSTER_NAME: 프로젝트 내에서 고유해야 하는 클러스터 이름입니다. 이름은 소문자로 시작해야 하며, 최대 51자(영문 기준)의 소문자, 숫자, 하이픈을 포함할 수 있습니다. 하이픈으로 끝나면 안 됩니다. 삭제된 클러스터의 이름은 재사용할 수 있습니다.
  • REGION: 클러스터가 위치할 리전입니다.
  • SERVICE_ACCOUNT_NAME: 서비스 계정 이름입니다.
  • PROJECT_ID: VM 서비스 계정이 포함된 프로젝트의 Google Cloud 프로젝트 ID입니다. 클러스터가 생성될 프로젝트의 ID 또는 다른 프로젝트의 ID(다른 클러스터에서 커스텀 VM 서비스 계정이 포함된 클러스터를 만드는 경우)입니다.
  • SCOPE: 클러스터 VM 인스턴스의 액세스 범위입니다(예: https://www.googleapis.com/auth/cloud-platform).

REST API

clusters.create API 요청의 일부로 GceClusterConfig를 완료할 때 다음 필드를 설정합니다.

콘솔

Google Cloud 콘솔에서 Dataproc VM 서비스 계정을 설정하는 것은 지원되지 않습니다. Google Cloud 콘솔에서 Dataproc 클러스터 만들기 페이지의 보안 관리 패널에 있는 프로젝트 액세스 섹션에서 '이 클러스터에 클라우드 플랫폼 범위 사용 설정'을 클릭하여 클러스터를 만들 때 클러스터 VM에 대한 cloud-platform 액세스 범위를 설정할 수 있습니다.

다른 프로젝트의 커스텀 VM 서비스 계정으로 클러스터 만들기

클러스터를 만들 때 클러스터에서 기본 VM 서비스 계정을 사용하는 대신 Dataproc 데이터 영역 작업에 사용할 커스텀 VM 서비스 계정을 지정할 수 있습니다(클러스터가 생성된 후에는 VM 서비스 계정을 지정할 수 없음). IAM 역할이 할당된 커스텀 VM 서비스 계정을 사용하면 프로젝트 리소스에 대한 세분화된 액세스 권한을 클러스터에 제공할 수 있습니다.

사전 단계

  1. 서비스 계정 프로젝트(커스텀 VM 서비스 계정이 있는 프로젝트)에서 다음을 수행합니다.

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

    2. Dataproc API 사용 설정

      API 사용 설정

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

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

    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 형식으로 제공합니다.

  3. 커스텀 VM 서비스 계정에 클러스터 프로젝트에 대한 Dataproc 작업자 역할을 부여합니다.

    gcloud CLI 예시:

    gcloud projects add-iam-policy-binding CLUSTER_PROJECT_ID \
        --member=serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
        --role="roles/dataproc.worker"
     
  4. 클러스터 프로젝트의 Dataproc 서비스 에이전트 서비스 계정에 서비스 계정 프로젝트 또는 서비스 계정 프로젝트의 커스텀 VM 서비스 계정(더욱 세밀하게 제어하려는 경우)에 대한 서비스 계정 사용자서비스 계정 토큰 생성자 역할을 부여합니다. 이렇게 하면 클러스터 프로젝트의 Dataproc 서비스 에이전트 서비스 계정이 서비스 계정 프로젝트의 커스텀 Dataproc VM 서비스 계정에 대한 토큰을 만들 수 있습니다.

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

    gcloud CLI 예시:

    • 다음 샘플 명령어는 클러스터 프로젝트의 Dataproc 서비스 에이전트 서비스 계정에 프로젝트 수준의 서비스 계정 사용자 및 서비스 계정 토큰 생성자 역할을 부여합니다.
    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountUser"
     
    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountTokenCreator"
    
    • 다음 샘플 명령어는 클러스터 프로젝트의 Dataproc 서비스 에이전트 서비스 계정에 VM 서비스 계정 수준에서 서비스 계정 사용자 및 서비스 계정 토큰 생성자 역할을 부여합니다.
    gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
        --member=serviceAccount:service-CLUSTER_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-CLUSTER_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountTokenCreator"
    
  5. 클러스터 프로젝트의 Compute Engine 서비스 에이전트 서비스 계정에 서비스 계정 프로젝트 또는 서비스 계정 프로젝트의 커스텀 VM 서비스 계정(더욱 세밀하게 제어하려는 경우)에 대한 서비스 계정 토큰 생성자 역할을 부여합니다. 이렇게 하면 클러스터 프로젝트의 Compute Agent 서비스 에이전트 서비스 계정에 서비스 계정 프로젝트의 커스텀 Dataproc VM 서비스 계정에 대한 토큰을 만들 수 있는 권한이 부여됩니다.

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

    gcloud CLI 예시:

    • 다음 샘플 명령어는 클러스터 프로젝트의 Compute Engine 서비스 에이전트 서비스 계정에 프로젝트 수준의 서비스 계정 토큰 생성자 역할을 부여합니다.
    gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountTokenCreator"
     
    • 다음 샘플 명령어는 클러스터 프로젝트의 Compute Engine 서비스 에이전트 서비스 계정에 VM 서비스 계정 수준의 서비스 계정 토큰 생성자 역할을 부여합니다.
    gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
        --role="roles/iam.serviceAccountTokenCreator"
     

클러스터 만들기

다음 단계