Dataproc 서비스 계정 기반 보안 멀티테넌시를 사용하면 클러스터를 만들 때 서비스 계정에 매핑된 사용자 계정 그룹을 사용하여 여러 사용자와 클러스터를 공유할 수 있습니다. 사용자는 격리된 사용자 환경이 있는 멀티테넌트 클러스터에서 실행되는 커널에 Jupyter 노트북과 같은 대화형 워크로드를 제출할 수 있습니다.
사용자가 멀티 테넌트 클러스터에 작업을 제출하면 다음이 발생합니다.
작업은 특정 Kerberos 주 구성원이 있는 특정 OS 사용자로 실행됩니다.
작업은 매핑된 서비스 계정을 사용하여 Google Cloud 리소스에 액세스합니다.
이 문서에서는 Dataproc 멀티 테넌트 클러스터를 만든 다음 클러스터에서 실행되는 PySpark 커널에 Jupyter 노트북을 실행하고 연결하는 방법을 보여줍니다.
고려사항 및 제한사항
멀티 테넌트 클러스터를 만들 때 다음 사항을 고려하세요.
매핑된 서비스 계정이 있는 Google 계정 사용자만 클러스터를 사용할 수 있습니다. Google 그룹은 매핑할 수 없습니다. 매핑되지 않은 사용자는 클러스터에서 작업을 실행할 수 없습니다.
Kerberos는 클러스터에서 클러스터 내 보안 통신을 위해 사용 설정되고 구성됩니다. Kerberos를 통한 최종 사용자 인증은 지원되지 않습니다.
클러스터 VM에서 시작 스크립트를 실행하는 기능과 같은 클러스터 및 Compute Engine 기능에 대한 직접 SSH 액세스가 차단됩니다. 또한
sudo
권한으로 작업을 실행할 수 없습니다.Dataproc 워크플로는 지원되지 않습니다.
멀티 테넌트 클러스터 만들기
Dataproc 클러스터를 만들 때 멀티 테넌트 기능을 사용 설정합니다.
콘솔
다음과 같이 Google Cloud 콘솔을 사용하여 Dataproc 클러스터를 만듭니다.
Google Cloud 콘솔에서 Dataproc Compute Engine에서 Dataproc 클러스터 만들기 페이지로 이동합니다. Compute Engine에서 Dataproc 클러스터 만들기
클러스터 설정 패널에서 다음을 수행합니다.
- 구성요소에서 다음을 수행합니다.
- 구성요소 게이트웨이 아래에서 구성요소 게이트웨이 사용 설정을 선택합니다.
- 선택적 구성요소에서 Jupyter 커널 게이트웨이를 선택하여 여러 사용자가 멀티 테넌트 클러스터에 Jupyter 노트북을 연결할 수 있도록 합니다.
- 구성요소에서 다음을 수행합니다.
클러스터 맞춤설정 패널에서 다음을 수행합니다.
클러스터 속성에서 다음을 수행합니다.
클러스터를 다시 만들지 않고 멀티 테넌트 사용자를 추가하거나 삭제하려면(멀티 테넌트 클러스터 사용자 업데이트 참고) 속성 추가를 클릭한 다음
dataproc
접두사와dynamic.multi.tenancy.enabled
속성을 추가하고 값을true
로 설정합니다.권장사항: YARN은 멀티 테넌트 클러스터에서 실행되는 각 노트북 커널에 상당한 클러스터 리소스를 소비하므로 Spark 및 YARN 속성을 추가하여 리소스 할당을 늘리세요.
예:
프리픽스 키 값 spark spark.driver.memory 5g spark spark.executor.memory 5g spark spark.executor.cores 2 capacity-scheduler yarn.scheduler.capacity.maximum-am-resource-percent 0.5
보안 관리 패널에서 다음을 수행합니다.
- 프로젝트 액세스에서 이 클러스터에 cloud-platform 범위 사용 설정을 선택합니다.
- 안전한 멀티 테넌시에서 다음을 수행합니다.
- 사용 설정을 선택합니다.
- 멀티테넌시 매핑에서 다음을 수행합니다.
- 멀티 테넌시 매핑 추가를 클릭하여 사용자 계정과 서비스 계정 간 매핑을 추가합니다.
다른 클러스터 설정을 확인하거나 입력합니다 ( Google Cloud 콘솔을 사용하여 Dataproc 클러스터 만들기 참고).
만들기를 클릭합니다.
gcloud
--secure-multi-tenancy-user-mapping
플래그와 함께 gcloud dataproc clusters create command
를 사용하여 사용자 계정과 서비스 계정 간 매핑 목록을 지정합니다.
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --secure-multi-tenancy-user-mapping=USER_MAPPINGS: \ --properties "dataproc:dataproc.dynamic.multi.tenancy.enabled=true" \ --service-account=CLUSTER_SERVICE_ACCOUNT@iam.gserviceaccount.com \ --scopes=https://www.googleapis.com/auth/iam \ --optional-components=JUPYTER_KERNEL_GATEWAY \ --enable-component-gateway \ other args ...
참고:
USER_MAPPINGS: 사용자 계정을 서비스 계정에 매핑하는 쉼표로 구분된 목록을 지정합니다.
YAML 매핑 파일 사용:--secure-multi-tenancy-user-mapping=UserA@my-company.com:SERVICE_ACCOUNT_FOR_USERA@iam.gserviceaccount.com,UserB@my-company.com:SERVICE_ACCOUNT_FOR_USERB@iam.gserviceaccount.com,UserC@my-company.com:SERVICE_ACCOUNT_FOR_USERC@iam.gserviceaccount.com
--secure-multi-tenancy-user-mapping
플래그를 사용하여 사용자 계정-서비스 계정 매핑을 지정하는 대신--identity-config-file
플래그를 사용하여 매핑이 포함된 로컬 또는 Cloud Storage YAML 파일을 지정할 수 있습니다. 매핑 파일의 각 행은 사용자 계정을 서비스 계정에 매핑합니다. 첫 번째 줄에는--identity-config-file=LOCAL_FILE or gs://BUCKET/FOLDER/FILENAME
user_service_account_mapping:
헤더가 포함됩니다.user_service_account_mapping: UserA@my-company.com:SERVICE_ACCOUNT_FOR_USERA@iam.gserviceaccount.com UserB@my-company.com:SERVICE_ACCOUNT_FOR_USERB@iam.gserviceaccount.com UserC@my-company.com:SERVICE_ACCOUNT_FOR_USERC@iam.gserviceaccount.com
--properties "dataproc:dataproc.dynamic.multi.tenancy.enabled=true"
: 이 속성을 사용하면 클러스터를 다시 만들지 않고도 멀티 테넌트 클러스터 사용자를 추가하거나 삭제할 수 있습니다(멀티 테넌트 클러스터 사용자 업데이트 참고).권장사항: YARN은 멀티 테넌트 클러스터에서 실행되는 각 노트북 커널에 상당한 클러스터 리소스를 소비하므로 Spark 및 YARN 속성을 추가하여 리소스 할당을 늘리세요.
예:
--properties=" \ spark:spark.driver.memory=5g,\ spark:spark.executor.memory=5g,\ spark:spark.executor.cores=200, \ capacity-scheduler:yarn.scheduler.capacity.maximum-am-resource-percent=0.5"
CLUSTER_SERVICE_ACCOUNT (선택사항):
--service-account flag
를 사용하여 클러스터의 커스텀 VM 서비스 계정을 지정할 수 있습니다. 이 플래그를 생략하면 기본 클러스터 VM 서비스 계정인PROJECT_NUMBER-compute@developer.gserviceaccount.com
이 사용됩니다.권장사항: 각 클러스터에 서로 다른 클러스터 서비스 계정을 사용하여 각 클러스터 VM 서비스 계정이 제한된 매핑된 사용자 서비스 계정 그룹만 가장할 수 있도록 합니다.
클러스터 서비스 계정이 가장을 수행하려면
--scopes=https://www.googleapis.com/auth/iam
이 필요합니다.--enable-component-gateway
및--optional-components=JUPYTER_KERNEL_GATEWAY
: Dataproc 구성요소 게이트웨이와 Jupyter 커널 게이트웨이를 사용 설정하면 여러 사용자가 Jupyter 노트북을 멀티 테넌트 클러스터에 연결할 수 있습니다.
API
SecurityConfig.IdentityConfig.userServiceAccountMapping field
를 사용하여 사용자 계정과 서비스 계정 간 매핑 목록을 지정합니다.
Identity and Access Management 권한 부여
사용자 노트북을 멀티 테넌트 클러스터에서 실행되는 노트북 커널에 연결하려면 매핑된 사용자, 매핑된 서비스 계정, 클러스터 VM 서비스 계정에 리소스에 액세스하는 데 필요한 IAM 권한이 있어야 합니다.
매핑된 사용자 권한
매핑된 각 사용자에게는 사용자가 멀티 테넌트 클러스터에서 실행되는 노트북 커널에 액세스하고 연결하는 데 필요한 dataproc.clusters.get
및 dataproc.clusters.use
권한이 있어야 합니다. 이러한 권한이 포함된 Dataproc 편집자 역할 (roles/dataproc.editor
)을 부여하거나 (단일 IAM 역할 부여 참고) 이러한 권한으로 커스텀 역할을 생성할 수 있습니다.
매핑된 서비스 계정 권한
매핑된 각 서비스 계정에는 Cloud Storage 버킷 액세스 또는 BigQuery 테이블 액세스와 같이 매핑된 사용자의 노트북 애플리케이션에 필요한 권한이 있어야 합니다(서비스 계정에 대한 액세스 관리 참고).
VM 서비스 계정 권한
멀티 테넌트 클러스터 VM 서비스 계정에는 매핑된 각 서비스 계정에 대한 iam.serviceAccounts.getAccessToken
권한이 있어야 합니다. 이 권한이 포함된 서비스 계정 토큰 생성자 역할 (roles/iam.serviceAccountTokenCreator
)을 부여하거나 이 권한이 있는 맞춤 역할을 만들 수 있습니다 (서비스 계정에 대한 액세스 관리 참고).
다른 VM 서비스 계정 역할에 대한 자세한 내용은 Dataproc VM 서비스 계정을 참고하세요.
Jupyter 노트북을 멀티 테넌트 클러스터 커널에 연결
매핑된 멀티 테넌트 클러스터 사용자는 Vertex AI Workbench 또는 사용자 관리 Jupyter 노트북을 멀티 테넌트 클러스터에 설치된 커널에 연결할 수 있습니다.
Vertex AI 노트북
Jupyter 노트북을 멀티 테넌트 클러스터에 만들어 연결하려면 다음 단계를 따르세요.
- Vertex AI Workbench 인스턴스 만들기
- Workbench 인스턴스 탭에서 인스턴스의 JupyterLab 열기 링크를 클릭합니다.
- Dataproc 클러스터 노트북에서
MULTI_TENANCY_CLUSTER_NAME
의 PySpark (YARN 클러스터) 카드를 클릭하여 새 Jupyter PySpark 노트북에 연결하고 실행합니다.
사용자 관리 노트북
사용자 관리 Jupyter 노트북을 Dataproc 멀티 테넌트 클러스터에 만들어 연결하려면 사용자 관리 VM에 JupyterLab 확장 프로그램을 설치하는 단계를 따르세요.
멀티 테넌트 클러스터 사용자 업데이트 (미리보기)
멀티 테넌트 클러스터를 만든 경우 dataproc:dataproc.dynamic.multi.tenancy.enabled
클러스터 속성을 true
로 설정하면 클러스터를 만든 후 멀티 테넌트 클러스터 사용자를 추가, 삭제 또는 교체할 수 있습니다.
사용자 추가
다음 업데이트 명령어는 --add-user-mappings
플래그를 사용하여 보안 멀티 테넌트 클러스터에 서비스 계정 매핑에 두 개의 새 사용자 계정을 추가합니다.
gcloud dataproc clusters update CLUSTER_NAME \ --region=REGION \ --add-user-mappings=new-user1@my-company.com=SERVICE_ACCOUNT_FOR_NEW_USER1@iam.gserviceaccount.com,new-user2@my-company.com=SERVICE_ACCOUNT_FOR_NEW_USER2@iam.gserviceaccount.com
사용자 삭제
다음 업데이트 명령어는 --remove-user-mappings
플래그를 사용하여 멀티 테넌트 클러스터에서 두 사용자를 삭제합니다. 이 플래그는 삭제할 사용자의 사용자 계정을 허용합니다.
gcloud dataproc clusters update CLUSTER_NAME \ --region=REGION \ --remove-user-mappings=UserB@my-company.com,UserC@my-company.com
사용자 바꾸기
--identity-config-file
플래그와 함께 업데이트 명령어를 사용하여 기존 사용자 집합을 새 집합으로 바꿀 수 있습니다. 이 플래그는 하나의 업데이트 명령어로 사용자를 추가하고 삭제하는 데 유용합니다.
gcloud dataproc clusters update CLUSTER_NAME \ --region=REGION \ --identity-config-file=identity-config.yaml
참고:
--identity-config-file
: 서비스 계정에 대한 새 사용자 계정 매핑이 포함된 로컬 또는 Cloud Storage YAML 파일을 지정합니다. 매핑 파일의 각 행은 사용자 계정을 서비스 계정에 매핑합니다. 첫 번째 줄에는--identity-config-file=LOCAL_FILE or gs://BUCKET/FOLDER/FILENAME
user_service_account_mapping:
헤더가 포함됩니다.user_service_account_mapping: new-user1@my-company.com:SERVICE_ACCOUNT_FOR_NEW_USER1@iam.gserviceaccount.com new-user2@my-company.com:SERVICE_ACCOUNT_FOR_NEW_USER2@iam.gserviceaccount.com