이 페이지에서는 서비스 계정 및 VM 액세스 범위에 대해 설명하고, Managed Service for Apache Spark에서 서비스 계정을 사용하는 방법에 대해 알아봅니다.
2020년 8월 3일부터 보안 요구사항: Managed Service for Apache Spark 사용자는 클러스터를 만들고 작업을 제출하는 등 Managed Service for Apache Spark 리소스를 배포하려면 서비스 계정 ActAs 권한이 있어야 합니다. 서비스 계정 사용자 역할에 이 권한이 포함되어 있습니다. 필요한 Managed Service for Apache Spark 역할에 대한 자세한 내용은 서비스 계정 인증 역할을 참고하세요.
기존 Managed Service for Apache Spark 사용자의 선택: 기존 2020년 8월 3일 기준으로 기존의 Managed Service for Apache Spark 사용자는 이 보안 요구사항을 선택할 수 있습니다 (Managed Service for Apache Spark, Dataflow, Cloud Data Fusion 보호 참고).
서비스 계정이란 무엇인가요?
서비스 계정은 Compute Engine 가상 머신(VM) 인스턴스에서 실행되는 서비스와 애플리케이션이 다른 Google Cloud API와 상호작용하기 위해 사용할 수 있는 특수 계정입니다. 애플리케이션은 서비스 계정 사용자 인증 정보를 사용하여 API 집합에 자체적으로 승인하고 서비스 계정에 부여된 권한 내에서 VM에서의 작업을 수행할 수 있습니다.
Managed Service for Apache Spark 클러스터 서비스 계정
다음 서비스 계정에는 클러스터가 있는 프로젝트에서 Managed Service for Apache Spark 작업을 수행하는 데 필요한 권한이 있어야 합니다.
Managed Service for Apache Spark VM 서비스 계정
Managed Service for Apache Spark 클러스터의 VM은 Managed Service for Apache Spark 데이터 플레인 작업을 위한 서비스 계정을 사용합니다.
클러스터를 만들 때 커스텀 서비스 계정을 지정하지 않으면 Compute Engine 기본 서비스 계정인 project_number-compute@developer.gserviceaccount.com이 VM 서비스 계정으로 사용됩니다. VM 서비스 계정에는 Managed Service for Apache Spark 데이터 영역 작업에 필요한 권한이 포함된 Managed Service for Apache Spark 작업자 역할이 있어야 합니다. 자세한 내용은 Managed Service for Apache Spark 역할을 참고하세요.
VM 서비스 계정 역할 보기
Managed Service for Apache Spark VM 서비스 계정에 부여된 역할을 보려면 다음 단계를 따르세요.
Google Cloud 콘솔에서 IAM 페이지로 이동합니다.
Google 제공 역할 부여 포함을 클릭합니다.
VM 서비스 계정에 나열된 역할을 확인합니다. 다음 이미지는 Managed Service for Apache Spark에서 기본적으로 VM 서비스 계정으로 사용하는 Compute Engine 기본 서비스 계정 (
project_number-compute@developer.gserviceaccount.com)에 나열된 필수 Dataproc 작업자 역할을 보여줍니다.
서비스 계정 행에 표시된 연필 아이콘을 클릭하여 서비스 계정 역할을 부여하거나 삭제할 수 있습니다.
Managed Service for Apache Spark 서비스 에이전트 서비스 계정
Managed Service for Apache Spark는 서비스 에이전트 서비스 계정(service-project_number@dataproc-accounts.iam.gserviceaccount.com)을 만들고 서비스 계정에 Google Cloud 프로젝트의 Managed Service for Apache Spark 서비스 에이전트 역할을 부여합니다. 이 서비스 계정은 클러스터 VM 생성, 업데이트, 삭제와 같은 Managed Service for Apache Spark 컨트롤 플레인 작업을 수행합니다. 클러스터를 만들 때 이 서비스 계정을 커스텀 VM 서비스 계정으로 바꿀 수 없습니다.
공유 VPC 네트워크의 서비스 에이전트 서비스 계정에 부여된 역할
Managed Service for Apache Spark 클러스터가 공유 VPC 네트워크를 사용하는 경우 공유 VPC 관리자가 Managed Service for Apache Spark 서비스 에이전트 서비스 계정에 공유 VPC 호스트 프로젝트에 대한 네트워크 사용자 역할을 부여해야 합니다. 자세한 내용은 다음을 참조하세요.
커스텀 VM 서비스 계정으로 클러스터 만들기
클러스터를 만들 때 클러스터에서 기본 VM 서비스 계정 대신 Managed Service for Apache Spark 데이터 영역 작업에 사용할 커스텀 VM 서비스 계정을 지정할 수 있습니다(클러스터가 생성된 후에는 VM 서비스 계정을 변경할 수 없음). IAM 역할이 할당된 VM 서비스 계정을 사용하면 프로젝트 리소스에 대한 세분화된 액세스 권한을 클러스터에 부여할 수 있습니다.
예비 단계
클러스터가 만들어질 프로젝트 안에 커스텀 VM 서비스 계정을 만드세요.
커스텀 VM 서비스 계정에 프로젝트에 대한 Managed Service for Apache Spark 작업자 역할 및 작업에 필요한 추가 역할(예: BigQuery 리더 및 작성자 역할)을 부여합니다(Managed Service for Apache Spark 역할 참고).
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 작업자 역할 (
roles/dataproc.worker)을 서비스 계정에 부여하는 대신 작업자 역할 권한이 포함되지만storage.objects.*권한은 제한된 커스텀 역할을 서비스 계정에 부여할 수 있습니다.- 커스텀 역할은 최소한 VM 서비스 계정에 Apache Spark용 관리 서비스 스테이징 및 임시 버킷 및 클러스터에서 실행되는 작업에 필요한 모든 추가 버킷의 객체에 대한
storage.objects.create,storage.objects.get,storage.objects.update권한을 부여해야 합니다.
- 커스텀 역할은 최소한 VM 서비스 계정에 Apache Spark용 관리 서비스 스테이징 및 임시 버킷 및 클러스터에서 실행되는 작업에 필요한 모든 추가 버킷의 객체에 대한
클러스터 만들기
- 프로젝트에 클러스터를 만듭니다.
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 콘솔에서 Managed Service for Apache Spark VM 서비스 계정을 설정하는 것은 지원되지 않습니다. Google Cloud 콘솔의 Managed Service for Apache Spark 클러스터 만들기 페이지에 있는 보안 관리 패널의 프로젝트 액세스 섹션에서 '이 클러스터에 cloud-platform 범위 사용 설정'을 클릭하여 클러스터를 만들 때 클러스터 VM에 cloud-platform
액세스 범위를 설정할 수 있습니다.
다른 프로젝트의 커스텀 VM 서비스 계정으로 클러스터 만들기
클러스터를 만들 때 클러스터에서 기본 VM 서비스 계정을 사용하는 대신 Managed Service for Apache Spark 데이터 영역 작업에 사용할 커스텀 VM 서비스 계정을 지정할 수 있습니다(클러스터가 생성된 후에는 VM 서비스 계정을 지정할 수 없음). IAM 역할이 할당된 커스텀 VM 서비스 계정을 사용하면 프로젝트 리소스에 대한 세분화된 액세스 권한을 클러스터에 부여할 수 있습니다.
예비 단계
서비스 계정 프로젝트(커스텀 VM 서비스 계정이 있는 프로젝트)에서 다음을 수행합니다.
Dataproc API를 사용 설정합니다.
API 사용 설정에 필요한 역할
API를 사용 설정하려면
serviceusage.services.enable권한이 포함된 서비스 사용량 관리자 IAM 역할(roles/serviceusage.serviceUsageAdmin)이 필요합니다. 역할 부여 방법 알아보기
이메일 계정(클러스터를 만드는 사용자)에 서비스 계정 프로젝트 또는 서비스 계정 프로젝트의 커스텀 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 서비스 계정에 클러스터 프로젝트에 대한 Managed Service for Apache Spark 작업자 역할을 부여합니다.
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"
클러스터 프로젝트의 Managed Service for Apache Spark 서비스 에이전트 서비스 계정에 서비스 계정 프로젝트 또는 서비스 계정 프로젝트의 커스텀 VM 서비스 계정(더욱 세밀하게 제어하려는 경우)에 대한 서비스 계정 사용자 및 서비스 계정 토큰 생성자 역할을 부여합니다. 이렇게 하면 클러스터 프로젝트의 Dataproc 서비스 에이전트 서비스 계정이 서비스 계정 프로젝트의 커스텀 Dataproc VM 서비스 계정에 대한 토큰을 만들 수 있습니다.
자세한 내용은 프로젝트 수준에서 역할을 부여하려면 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하고, 서비스 계정 수준에서 역할을 부여하려면 서비스 계정에 대한 액세스 관리를 참조합니다.
gcloud CLI 예시:
- 다음 샘플 명령어는 클러스터 프로젝트의 Managed Service for Apache Spark 서비스 에이전트 서비스 계정에 프로젝트 수준의 서비스 계정 사용자 및 서비스 계정 토큰 생성자 역할을 부여합니다.
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"
- 다음 샘플 명령어는 클러스터 프로젝트의 Managed Service for Apache Spark 서비스 에이전트 서비스 계정에 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"
클러스터 프로젝트의 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"
클러스터 만들기
다음 단계
- 서비스 계정
- Managed Service for Apache Spark 권한 및 IAM 역할
- Managed Service for Apache Spark 보안 주체 및 역할
- Managed Service for Apache Spark 서비스 계정 기반 보안 멀티테넌시
- Managed Service for Apache Spark 개인 클러스터 인증
- Managed Service for Apache Spark 세부 IAM