Managed Service for Apache Spark를 사용하면 클러스터 및 작업 데이터가 클러스터 및 Cloud Storage 스테이징 버킷의 Compute Engine VM과 연결된 영구 디스크에 저장됩니다. 기본적으로 이 영구 디스크 및 버킷 데이터는 Google에서 생성한 데이터 암호화 키 (DEK)와 키 암호화 키 (KEK)를 사용하여 암호화됩니다.
키 암호화 키 (KEK)를 제어하고 관리하려면 고객 관리 암호화 키 (CMEK)를 사용하면 됩니다 (Google은 데이터 암호화 키 (DEK)를 계속 제어함). Google 데이터 암호화 키에 대한 자세한 내용은 저장 데이터 암호화를 참조하세요.
CMEK 클러스터 데이터 암호화
고객 관리 암호화 키 (CMEK)를 사용하여 다음 클러스터 데이터를 암호화할 수 있습니다.
- Managed Service for Apache Spark 클러스터 VM에 연결된 영구 디스크의 데이터
- Spark SQL 작업과 함께 제출된 쿼리 문자열과 같이 클러스터에 제출된 작업 인수 데이터
- 클러스터 메타데이터, 작업 드라이버 출력, Managed Service for Apache Spark 클러스터 스테이징 버킷에 기록된 기타 데이터
시작하기 전에
- Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Dataproc, Cloud Key Management Service, Compute Engine, and Cloud Storage APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Google Cloud CLI를 설치합니다.
-
외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.
-
gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Dataproc, Cloud Key Management Service, Compute Engine, and Cloud Storage APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Google Cloud CLI를 설치합니다.
-
외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.
-
gcloud CLI를 초기화하려면, 다음 명령어를 실행합니다.
gcloud init
키 만들기
CMEK로 Managed Service for Apache Spark 리소스를 보호하려면 키 생성을 자동화하거나 키를 수동으로 만들면 됩니다.
자동 키 생성
Autokey를 사용하여 CMEK 프로비저닝 및 할당을 자동화합니다. Autokey는 리소스가 생성될 때 필요에 따라 키링과 키를 생성합니다. 서비스 에이전트는 암호화 및 복호화 작업에서 키를 사용합니다. 필요한 경우 Autokey는 에이전트를 만들고 필요한 Identity and Access Management(IAM) 역할을 부여합니다. 자세한 내용은 Autokey 개요를 참고하세요.
수동 키 생성
다음 단계에 따라 클러스터 데이터의 CMEK 암호화를 위한 키를 수동으로 만드세요.
Cloud KMS를 사용하여 하나 이상의 키를 만듭니다. 다음 단계에서 사용하는 키의 리소스 ID라고도 하는 리소스 이름은 다음과 같이 구성됩니다.
키 (CMEK)는 암호화된 리소스와 동일한 위치에 있어야 합니다. 예를 들어projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
us-central1리전에서 리소스를 암호화하는 데 사용된 CMEK도us-central1리전에 있어야 합니다.Compute Engine 서비스 에이전트 서비스 계정, Cloud Storage 서비스 에이전트 서비스 계정, Managed Service for Apache Spark 서비스 에이전트 서비스 계정 각각에 Cloud KMS 키를 사용하여 리소스를 보호하는 데 필요한 권한이 있는지 확인하려면 관리자에게 프로젝트에서 Compute Engine 서비스 에이전트 서비스 계정, Cloud Storage 서비스 에이전트 서비스 계정, Managed Service for Apache Spark 서비스 에이전트 서비스 계정 각각에 Cloud KMS CryptoKey 암호화/복호화 (
roles/cloudkms.cryptoKeyEncrypterDecrypter) IAM 역할을 부여해 달라고 요청하세요.Google Cloud CLI를 사용하여 Managed Service for Apache Spark 서비스 에이전트 서비스 계정에 Cloud KMS CryptoKey 암호화/복호화 역할을 할당하는 예:
gcloud projects add-iam-policy-binding KMS_PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
다음을 바꿉니다.
KMS_PROJECT_ID: Cloud KMS 키가 포함된 Google Cloud 프로젝트의 ID입니다.PROJECT_NUMBER: Managed Service for Apache Spark 리소스를 실행하는 Google Cloud 프로젝트의 프로젝트 번호 (프로젝트 ID 아님)Apache Spark용 관리형 서비스 서비스 에이전트 역할이 Apache Spark용 관리형 서비스 서비스 에이전트 서비스 계정에 연결되어 있지 않은 경우 Apache Spark용 관리형 서비스 서비스 에이전트 서비스 계정에 연결된 커스텀 역할에
serviceusage.services.use권한을 추가합니다.
CMEK로 클러스터 만들기
Apache Spark용 관리형 서비스 클러스터를 만들 때 키의 리소스 ID를 전달합니다.
gcloud CLI
- 키를 사용하여 클러스터 영구 디스크 데이터를 암호화하려면 클러스터를 만들 때 키의 리소스 ID를
--gce-pd-kms-key플래그에 전달합니다.gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --gce-pd-kms-key='projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME' \ other arguments ...gcloud명령줄 도구에서 키 설정을 확인할 수 있습니다.gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGION명령어 결과 스니펫:
... configBucket: dataproc- ... encryptionConfig: gcePdKmsKeyName: projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name ... - 키를 사용하여 클러스터 영구 디스크 데이터 및 작업 인수 데이터를 암호화하려면 클러스터를 만들 때 키의 리소스 ID를
--kms-key플래그에 전달합니다. `--kms-key` 플래그로 암호화된 작업 유형 및 인수 목록은 [Cluster.EncryptionConfig.kmsKey](/dataproc/docs/reference/rest/v1/ClusterConfig#EncryptionConfig.FIELDS.kms_key)를 참고하세요.gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --kms-key='projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME' \ other arguments ...gcloud CLI
dataproc clusters describe명령어를 사용하여 키 설정을 확인할 수 있습니다. 클러스터 영구 디스크 및 작업 인수 데이터의 암호화에 키를 사용하도록 키 리소스 ID가gcePdKmsKeyName및kmsKey에 설정됩니다.gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGION명령어 결과 스니펫:
... configBucket: dataproc- ... encryptionConfig: gcePdKmsKeyName: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME kmsKey: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME ... - Cloud Storage의 Managed Service for Apache Spark 스테이징 버킷에 기록되는 클러스터 메타데이터, 작업 드라이버, 기타 출력 데이터를 암호화하려면 다음 안내를 따르세요.
- CMEK로 자체 버킷을 만듭니다. 버킷에 키를 추가할 때 1단계에서 만든 키를 사용합니다.
- 클러스터를 만들 때 버킷 이름을
--bucket플래그에 전달합니다.
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --bucket=CMEK_BUCKET_NAME \ other arguments ...다음 `cmek-bucket` 예시와 같이 작업이 버킷 인수를 사용하는 경우 CMEK 사용 버킷을 `gcloud dataproc jobs submit` 명령어에 전달할 수도 있습니다.
gcloud dataproc jobs submit pyspark gs://cmek-bucket/wordcount.py \ --region=region \ --cluster=cluster-name \ -- gs://cmek-bucket/shakespeare.txt gs://cmek-bucket/counts
REST API
- 키를 사용하여 클러스터 VM 영구 디스크 데이터를 암호화하려면 cluster.create 요청의 일부로 ClusterConfig.EncryptionConfig.gcePdKmsKeyName 필드를 포함합니다.
gcloud CLI
dataproc clusters describe명령어를 사용하여 키 설정을 확인할 수 있습니다.gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGION명령어 결과 스니펫:
... configBucket: dataproc- ... encryptionConfig: gcePdKmsKeyName: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME ... - 키를 사용하여 클러스터 VM 영구 디스크 데이터 및 작업 인수 데이터를 암호화하려면 cluster.create 요청의 일부로
Cluster.EncryptionConfig.kmsKey필드를 포함합니다.--kms-key필드로 암호화된 작업 유형 및 인수 목록은 Cluster.EncryptionConfig.kmsKey를 참고하세요.gcloud CLI
dataproc clusters describe명령어를 사용하여 키 설정을 확인할 수 있습니다. 클러스터 영구 디스크 및 작업 인수 데이터의 암호화에 키를 사용하도록 키 리소스 ID가gcePdKmsKeyName및kmsKey에 설정됩니다.gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGION명령어 결과 스니펫:
... configBucket: dataproc- ... encryptionConfig: gcePdKmsKeyName: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME kmsKey: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME ... - Cloud Storage의 Managed Service for Apache Spark 스테이징 버킷에 기록되는 클러스터 메타데이터, 작업 드라이버, 기타 출력 데이터를 암호화하려면 다음 안내를 따르세요.
- CMEK로 자체 버킷을 만듭니다. 버킷에 키를 추가할 때 1단계에서 만든 키를 사용합니다.
- cluster.create 요청의 일부로 버킷 이름을 ClusterConfig.configBucket 필드에 전달합니다.
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --bucket=CMEK_BUCKET_NAME \ other arguments ...다음 `cmek-bucket` 예시와 같이 작업이 버킷 인수를 사용하는 경우 CMEK 사용 버킷을 `gcloud dataproc jobs submit` 명령어에 전달할 수도 있습니다.
gcloud dataproc jobs submit pyspark gs://cmek-bucket/wordcount.py \ --region=region \ --cluster=cluster-name \ -- gs://cmek-bucket/shakespeare.txt gs://cmek-bucket/counts
워크플로 템플릿 데이터에 CMEK 사용
Spark SQL 작업의 쿼리 문자열과 같은 Managed Service for Apache Spark 워크플로 템플릿 작업 인수 데이터는 CMEK를 사용하여 암호화할 수 있습니다. 이 섹션의 1, 2, 3단계를 수행하여 Managed Service for Apache Spark 워크플로 템플릿에 CMEK를 사용합니다. 이 기능이 사용 설정된 경우 CMEK를 사용하여 암호화된 워크플로 템플릿 작업 유형과 인수 목록은 WorkflowTemplate.EncryptionConfig.kmsKey를 참조하세요.
- Cloud KMS를 사용하여 키를 만듭니다.
다음 단계에서 사용하는 키의 리소스 이름은 다음과 같이 구성됩니다.
projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name
Apache Spark용 관리형 서비스 서비스 계정이 키를 사용하도록 설정하려면 다음 안내를 따르세요.
Apache Spark용 관리 서비스 에이전트 서비스 계정에 Cloud KMS
CryptoKey Encrypter/Decrypter역할을 할당합니다. gcloud CLI를 사용하여 역할을 할당할 수 있습니다.gcloud projects add-iam-policy-binding KMS_PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
다음을 바꿉니다.
KMS_PROJECT_ID: Cloud KMS를 실행하는 Google Cloud 프로젝트의 ID. 이 프로젝트는 Apache Spark용 관리형 서비스 리소스를 실행하는 프로젝트일 수도 있습니다.
PROJECT_NUMBER: Managed Service for Apache Spark 리소스를 실행하는 Google Cloud 프로젝트의 프로젝트 번호 (프로젝트 ID 아님)
Managed Service for Apache Spark 리소스를 실행하는 프로젝트에서 Cloud KMS API를 사용 설정합니다.
Managed Service for Apache Spark 서비스 에이전트 역할이 Managed Service for Apache Spark 서비스 에이전트 서비스 계정에 연결되어 있지 않은 경우 Managed Service for Apache Spark 서비스 에이전트 서비스 계정에 연결된 커스텀 역할에
serviceusage.services.use권한을 추가합니다. Managed Service for Apache Spark 서비스 에이전트 역할이 Managed Service for Apache Spark 서비스 에이전트 서비스 계정에 연결되어 있으면 이 단계를 건너뜁니다.
gcloud CLI 또는 Dataproc API를 사용하여 워크플로의 1단계에서 만든 키를 설정할 수 있습니다. 워크플로에 키가 설정되면 모든 워크플로 작업 인수 및 쿼리가 WorkflowTemplate.EncryptionConfig.kmsKey에 나열된 작업 유형 및 인수의 키를 사용하여 암호화됩니다.
gcloud CLI
gcloud dataproc workflow-templates create 명령어로 워크플로 템플릿을 만들 때 키의 리소스 ID를
--kms-key플래그에 전달합니다.예시:
gcloud dataproc workflow-templates create my-template-name \ --region=region \ --kms-key='projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name' \ other arguments ...
gcloud명령줄 도구에서 키 설정을 확인할 수 있습니다.gcloud dataproc workflow-templates describe TEMPLATE_NAME \ --region=REGION
... id: my-template-name encryptionConfig: kmsKey: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME ...
REST API
workflowTemplates.create 요청의 일부로 WorkflowTemplate.EncryptionConfig.kmsKey를 사용합니다.
workflowTemplates.get 요청을 실행하여 키 설정을 확인할 수 있습니다. 반환된 JSON에는
kmsKey가 포함됩니다.... "id": "my-template-name", "encryptionConfig": { "kmsKey": "projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name" },
Cloud External Key Manager
Cloud External Key Manager (Cloud EKM)를 사용하면 지원되는 외부 키 관리 파트너가 관리하는 키를 사용하여 Managed Service for Apache Spark 데이터를 보호할 수 있습니다. Managed Service for Apache Spark에서 Cloud EKM을 사용하는 단계는 CMEK 키 설정 시 사용하는 단계와 동일하지만 키가 외부 관리 키의 URI를 가리킨다는 차이가 있습니다 (자세한 내용은 Cloud EKM 개요 참조).
Cloud EKM 오류
Cloud EKM을 사용하는 경우 클러스터를 만들려고 시도하면 입력, Cloud EKM, 외부 키 관리 파트너 시스템 또는 Cloud EKM과 외부 시스템 간의 통신과 관련된 오류로 인해 실패할 수 있습니다. REST API 또는 Google Cloud 콘솔을 사용하는 경우 오류가 Cloud Logging에 로깅됩니다. 로그 보기 탭에서 실패한 클러스터의 오류를 조사할 수 있습니다.