이 페이지에서는 서비스 계정 및 VM 액세스 범위에 대해 설명하고, Dataproc에서 서비스 계정을 사용하는 방법에 대해 알아봅니다.
서비스 계정이란 무엇인가요?
서비스 계정은 Compute Engine 가상 머신(VM) 인스턴스에서 실행되는 서비스와 애플리케이션이 다른 Google Cloud API와 상호작용하기 위해 사용할 수 있는 특수 계정입니다 애플리케이션은 서비스 계정 사용자 인증 정보를 사용하여 API 집합에 자체적으로 승인하고 서비스 계정에 부여된 권한 내에서 VM에서의 작업을 수행할 수 있습니다.
Dataproc 서비스 계정
다음 서비스 계정에는 클러스터가 있는 프로젝트에서 Dataproc 작업을 수행하는 데 필요한 권한이 부여됩니다.
Dataproc VM 서비스 계정: Dataproc 클러스터의 VM은 Dataproc 데이터 영역 작업에 이 서비스 계정을 사용합니다. 클러스터를 만들 때 VM 서비스 계정을 지정하지 않으면 Compute Engine 기본 서비스 계정인
[project-number]-compute@developer.gserviceaccount.com
이 Dataproc VM 서비스 계정으로 사용됩니다. 기본적으로 Compute Engine 기본 서비스 계정에는 Dataproc 데이터 영역 작업을 수행하는 데 필요한 권한을 포함하여 대부분의 Google Cloud 서비스에 대한 리소스를 만들고 삭제할 수 있는 권한이 포함된 프로젝트 편집자 역할이 부여됩니다.커스텀 서비스 계정: 클러스터를 만들 때 커스텀 서비스 계정을 지정하면 해당 커스텀 서비스 계정에 Dataproc 데이터 영역 작업에 필요한 권한을 부여해야 합니다. 이렇게 하려면 서비스 계정에 Dataproc 작업자 역할을 할당하면 됩니다. 이 역할에는 Dataproc 데이터 영역 작업에 필요한 최소 권한이 포함되어 있기 때문입니다. BigQuery에서 데이터 읽기 및 쓰기와 같은 다른 작업에 대한 권한을 부여하려면 추가 역할이 필요합니다.
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 서비스 계정을 사용하면 프로젝트 리소스에 대한 세분화된 액세스 권한을 클러스터에 제공할 수 있습니다.
사전 단계
클러스터가 만들어질 프로젝트 안에 커스텀 VM 서비스 계정을 만드세요.
커스텀 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
권한을 부여해야 합니다.
- 커스텀 역할은 최소한 VM 서비스 계정에 Dataproc 스테이징 및 임시 버킷 및 클러스터에서 실행되는 작업에 필요한 모든 추가 버킷의 객체에 대한
클러스터 만들기
- 프로젝트에 클러스터를 만듭니다.
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
를 완료할 때 다음 필드를 설정합니다.
serviceAccount
: 다른 프로젝트의 VM 서비스 계정을 사용하지 않는다면 클러스터가 생성될 프로젝트에 서비스 계정이 배치됩니다.serviceAccountScopes
: 클러스터 VM 인스턴스를 위한 액세스 범위를 지정합니다(예:https://www.googleapis.com/auth/cloud-platform
).
콘솔
Google Cloud 콘솔에서 Dataproc VM 서비스 계정을 설정하는 것은 지원되지 않습니다. Google Cloud 콘솔에서 Dataproc 클러스터 만들기 페이지의 보안 관리 패널에 있는 프로젝트 액세스 섹션에서 '이 클러스터에 클라우드 플랫폼 범위 사용 설정'을 클릭하여 클러스터를 만들 때 클러스터 VM에 대한 cloud-platform
액세스 범위를 설정할 수 있습니다.
다른 프로젝트의 커스텀 VM 서비스 계정으로 클러스터 만들기
클러스터를 만들 때 클러스터에서 기본 VM 서비스 계정을 사용하는 대신 Dataproc 데이터 영역 작업에 사용할 커스텀 VM 서비스 계정을 지정할 수 있습니다(클러스터가 생성된 후에는 VM 서비스 계정을 지정할 수 없음). IAM 역할이 할당된 커스텀 VM 서비스 계정을 사용하면 프로젝트 리소스에 대한 세분화된 액세스 권한을 클러스터에 부여할 수 있습니다.
사전 단계
서비스 계정 프로젝트(커스텀 VM 서비스 계정이 있는 프로젝트)에서 다음을 수행합니다.
Enable the Dataproc API.
이메일 계정(클러스터를 만드는 사용자)에 서비스 계정 프로젝트 또는 서비스 계정 프로젝트의 커스텀 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
형식으로 제공합니다.커스텀 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"
클러스터 프로젝트의 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 서비스 에이전트 서비스 계정에 프로젝트 수준의 서비스 계정 사용자 및 서비스 계정 토큰 생성자 역할을 부여합니다.
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"
클러스터 프로젝트의 Google API 서비스 에이전트 서비스 계정에 서비스 계정 프로젝트 또는 서비스 계정 프로젝트의 커스텀 VM 서비스 계정(더욱 세밀하게 제어하려는 경우)에 대한 서비스 계정 토큰 생성자 역할을 부여합니다. 이렇게 하면 클러스터 프로젝트의 Google API 서비스 에이전트 서비스 계정에 서비스 계정 프로젝트의 커스텀 Dataproc VM 서비스 계정에 대한 토큰을 만들 수 있는 권한이 부여됩니다.
자세한 내용은 프로젝트 수준에서 역할을 부여하려면 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하고, 서비스 계정 수준에서 역할을 부여하려면 서비스 계정에 대한 액세스 관리를 참조합니다.
gcloud CLI 예시:
- 다음 샘플 명령어는 클러스터 프로젝트의 Google API 서비스 에이전트 서비스 계정에 프로젝트 수준의 서비스 계정 토큰 생성자 역할을 부여합니다.
gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member=serviceAccount:CLUSTER_PROJECT_NUMBER@cloudservices.gserviceaccount.com \ --role="roles/iam.serviceAccountTokenCreator"
- 다음 샘플 명령어는 클러스터 프로젝트의 Google API 서비스 에이전트 서비스 계정에 VM 서비스 계정 수준의 서비스 계정 토큰 생성자 역할을 부여합니다.
gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \ --member=serviceAccount:CLUSTER_PROJECT_NUMBER@cloudservices.gserviceaccount.com \ --role="roles/iam.serviceAccountTokenCreator"
클러스터 프로젝트의 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"
클러스터 만들기
다음 단계
- 서비스 계정
- Dataproc 권한 및 IAM 역할
- Dataproc 주 구성원 및 역할
- Dataproc 서비스 계정 기반 보안 멀티테넌시
- Dataproc 개인 클러스터 인증
- Dataproc 세분화된 IAM