고객 관리 암호화 키(CMEK)

Dataproc을 사용하면 클러스터 및 작업 데이터가 클러스터 및 Cloud Storage 스테이징 버킷의 Compute Engine VM과 연결된 영구 디스크에 저장됩니다. 이 영구 디스크 및 버킷 데이터는 Google에서 생성한 데이터 암호화 키(DEK)와 키 암호화 키(KEK)를 사용하여 암호화됩니다.

CMEK 기능을 사용하면 키 암호화 키(KEK)를 만들고 사용하고 취소할 수 있습니다. 데이터 암호화 키(DEK)는 Google에서 계속 관리합니다. Google 데이터 암호화 키에 대한 자세한 내용은 저장 데이터 암호화를 참조하세요.

클러스터 데이터에 CMEK 사용

고객 관리 암호화 키(CMEK)를 사용하여 다음 클러스터 데이터를 암호화할 수 있습니다.

  • Dataproc 클러스터의 VM에 연결된 영구 디스크의 데이터
  • Spark SQL 작업과 함께 제출된 쿼리 문자열과 같이 클러스터에 제출된 작업 인수 데이터
  • 클러스터 메타데이터, 작업 드라이버 출력, 사용자가 만든 Dataproc 스테이징 버킷에 기록된 기타 데이터

클러스터 데이터 암호화에 CMEK를 사용하려면 다음 안내를 따르세요.

  1. Cloud Key Management Service를 사용하여 하나 이상의 키를 만듭니다. 다음 단계에서 사용하는 키의 리소스 ID라고도 하는 리소스 이름은 다음과 같이 구성됩니다.
    projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    
  2. 다음 서비스 계정에 다음 역할을 할당합니다.

    1. Compute Engine→Cloud KMS 키로 리소스 보호→시작하기 전에의 5번 항목을 따라 Cloud KMS CryptoKey 암호화/복호화 역할을 Compute Engine 서비스 에이전트 서비스 계정에 할당합니다.
    2. Cloud Storage 서비스 에이전트 서비스 계정에 Cloud KMS CryptoKey 암호화/복호화 역할을 할당합니다.

    3. Dataproc 서비스 에이전트 서비스 계정에 Cloud KMS CryptoKey 암호화/복호화 역할을 할당합니다. Google Cloud 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입니다. 이 프로젝트는 Dataproc 리소스를 실행하는 프로젝트일 수도 있습니다.

      PROJECT_NUMBER: Dataproc 리소스를 실행하는 Google Cloud 프로젝트의 프로젝트 번호(프로젝트 ID 아님)입니다.

    4. Dataproc 리소스를 실행하는 프로젝트에서 Cloud KMS API를 사용 설정합니다.

    5. Dataproc 서비스 에이전트 역할Dataproc 서비스 에이전트 서비스 계정에 연결되어 있지 않은 경우 Dataproc 서비스 에이전트 서비스 계정에 연결된 커스텀 역할에 serviceusage.services.use 권한을 추가합니다. Dataproc 서비스 에이전트 역할이 Dataproc 서비스 에이전트 서비스 계정에 연결되어 있으면 이 단계를 건너뜁니다.

  3. 키의 리소스 ID를 클러스터 데이터 암호화에 사용할 Google Cloud CLI 또는 Dataproc API에 전달합니다.

    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를 참조하세요.
      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가 gcePdKmsKeyNamekmsKey에 설정됩니다.

      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-KEY_RING_NAME-name/cryptoKeys/KEY_NAME
      ...
      

    • Cloud Storage의 Dataproc 스테이징 버킷에 기록되는 클러스터 메타데이터, 작업 드라이버, 기타 출력 데이터를 암호화하려면 다음 안내를 따르세요.
      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가 gcePdKmsKeyNamekmsKey에 설정됩니다.

      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
      
    • To encrypt cluster metadata, job driver, and other output data written to your Dataproc staging bucket in Cloud Storage:
      gcloud dataproc clusters create CLUSTER_NAME \
          --region=REGION \
          --bucket=CMEK_BUCKET_NAMEt \
          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 작업의 쿼리 문자열과 같은 Dataproc 워크플로 템플릿 작업 인수 데이터는 CMEK를 사용하여 암호화할 수 있습니다. 이 섹션의 1, 2, 3단계를 수행하여 Dataproc 워크플로 템플릿에 CMEK를 사용합니다. 이 기능이 사용 설정된 경우 CMEK를 사용하여 암호화된 워크플로 템플릿 작업 유형과 인수 목록은 WorkflowTemplate.EncryptionConfig.kmsKey를 참조하세요.

  1. Cloud Key Management Service(Cloud KMS)를 사용하여 키를 만듭니다. 다음 단계에서 사용하는 키의 리소스 이름은 다음과 같이 구성됩니다.
    projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name
    
  2. Dataproc 서비스 계정이 키를 사용하도록 설정하려면 다음 안내를 따르세요.

    1. DataprocService 에이전트 서비스 계정에 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입니다. 이 프로젝트는 Dataproc 리소스를 실행하는 프로젝트일 수도 있습니다.

      PROJECT_NUMBER: Dataproc 리소스를 실행하는 Google Cloud 프로젝트의 프로젝트 번호(프로젝트 ID 아님)입니다.

    2. Dataproc 리소스를 실행하는 프로젝트에서 Cloud KMS API를 사용 설정합니다.

    3. Dataproc 서비스 에이전트 역할Dataproc 서비스 에이전트 서비스 계정에 연결되어 있지 않은 경우 Dataproc 서비스 에이전트 서비스 계정에 연결된 커스텀 역할에 serviceusage.services.use 권한을 추가합니다. Dataproc 서비스 에이전트 역할이 Dataproc 서비스 에이전트 서비스 계정에 연결되어 있으면 이 단계를 건너뜁니다.

  3. Google Cloud 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 외부 키 관리자

Cloud 외부 키 관리자(Cloud EKM)(EKM)를 사용하면 지원되는 외부 키 관리 파트너가 관리하는 키를 사용하여 Dataproc 데이터를 보호할 수 있습니다. Dataproc에서 EKM을 사용하는 단계는 CMEK 키 설정 시 사용하는 단계와 동일하지만 키가 외부 관리 키의 URI를 가리킨다는 차이가 있습니다(자세한 내용은Cloud EKM 개요 참조).

Cloud EKM 오류

Cloud EKM을 사용하는 경우 클러스터를 만들려고 시도하면 입력, Cloud EKM, 외부 키 관리 파트너 시스템 또는 EKM과 외부 시스템 간의 통신과 관련된 오류로 인해 실패할 수 있습니다. REST API 또는 Google Cloud 콘솔을 사용하는 경우 오류가 Logging에 로깅됩니다. 로그 보기 탭에서 실패한 클러스터의 오류를 조사할 수 있습니다.