고객 관리 암호화 키 사용

이 페이지에서는 Cloud Dataflow와 함께 Cloud Key Management Service(Cloud KMS) 암호화 키를 사용하는 방법을 설명합니다. 고객 관리 암호화 키(CMEK)를 사용하면 Cloud KMS를 통해 제어할 수 있는 키로 저장 데이터를 암호화할 수 있습니다. CMEK로 보호되는 일괄 또는 스트리밍 파이프라인을 만들거나 소스 및 싱크에서 CMEK로 보호되는 데이터에 액세스할 수 있습니다.

또한 클라우드에 호스팅되는 하드웨어 보안 모듈(HSM) 서비스인 Cloud HSM을 사용하여 FIPS 140-2 Level 3 인증 HSM 클러스터에서 암호화 키를 호스팅하고 암호화 작업을 수행할 수 있습니다. Cloud HSM의 추가 할당량에 대한 자세한 내용은 Cloud KMS 할당량을 참조하세요.

자세한 내용은 Google Cloud Platform의 암호화 옵션을 참조하세요.

시작하기 전에

  1. 자바용 Apache Beam SDK 2.13.0 이상 또는 Python용 Apache Beam SDK 2.13.0 이상인지 확인합니다.

    자세한 내용은 Apache Beam SDK 설치를 참조하세요.

  2. Cloud Dataflow와 Cloud KMS를 동일한 Google Cloud Platform(GCP) 프로젝트에서 실행할지 아니면 다른 프로젝트에서 실행할지 결정합니다. 이 페이지에서는 다음 규칙을 사용합니다.

    • PROJECT_ID는 Cloud Dataflow를 실행 중인 프로젝트의 프로젝트 ID입니다.
    • PROJECT_NUMBER는 Cloud Dataflow를 실행 중인 프로젝트의 프로젝트 번호입니다.
    • KMS_PROJECT_ID는 Cloud KMS를 실행 중인 프로젝트의 프로젝트 ID입니다.

    GCP 프로젝트 ID와 프로젝트 번호에 대한 자세한 내용은 프로젝트 식별을 참조하세요.

  3. Cloud KMS를 실행하려는 GCP 프로젝트에서 다음을 수행합니다.

    1. Cloud KMS API를 사용 설정합니다.
    2. 대칭 키 만들기의 설명대로 키링과 키를 만듭니다. Cloud KMS와 Cloud Dataflow는 모두 지역화된 서비스입니다. Cloud Dataflow 작업자 인스턴스의 위치와 일치하는 위치에 키링을 만듭니다.

      • region으로 지정된 Cloud Dataflow 작업의 경우 동일한 리전에서 사용할 키를 선택합니다.
      • zone으로 지정된 Cloud Dataflow 작업의 경우 동일한 리전에서 사용할 키를 선택합니다.

암호화/복호화 권한 부여

  1. Cloud KMS CryptoKey Encrypter/Decrypter 역할Cloud Dataflow 서비스 계정에 할당합니다. 이렇게 하면 지정한 CMEK로 암호화하고 복호화할 수 있는 권한이 Cloud Dataflow 서비스 계정에 부여됩니다. Google Cloud Platform Console과 템플릿에서 작업 만들기 페이지를 사용하는 경우 이 권한이 자동으로 부여되며 이 단계를 건너뛸 수 있습니다.

    gcloud 명령줄 도구를 사용하여 역할을 할당합니다.

    gcloud projects add-iam-policy-binding KMS_PROJECT_ID \
    --member serviceAccount:service-PROJECT_NUMBER@dataflow-service-producer-prod.iam.gserviceaccount.com \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    KMS_PROJECT_ID는 Cloud KMS를 실행하는 GCP 프로젝트의 ID로 바꾸고, PROJECT_NUMBER는 Cloud Dataflow 리소스를 실행하는 GCP 프로젝트의 프로젝트 번호(프로젝트 ID 아님)로 바꾸세요.

  2. Cloud KMS CryptoKey Encrypter/Decrypter 역할Compute Engine 서비스 계정에 할당합니다. 이렇게 하면 지정한 CMEK로 암호화하고 복호화할 수 있는 권한이 Compute Engine 서비스 계정에 부여됩니다.

    gcloud 명령줄 도구를 사용하여 역할을 할당합니다.

    gcloud projects add-iam-policy-binding KMS_PROJECT_ID \
    --member serviceAccount:service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    KMS_PROJECT_ID는 Cloud KMS를 실행하는 GCP 프로젝트의 ID로 바꾸고, PROJECT_NUMBER는 Compute Engine 리소스를 실행하는 GCP 프로젝트의 프로젝트 번호(프로젝트 ID가 아님)로 바꾸세요.

Cloud KMS로 보호되는 파이프라인 만들기

일괄 또는 스트리밍 파이프라인을 만들 때 파이프라인 상태를 암호화할 Cloud KMS 키를 선택할 수 있습니다. 파이프라인 상태는 Cloud Dataflow가 임시 스토리지에 저장하는 데이터입니다.

명령줄 인터페이스

Cloud KMS 키로 보호되는 파이프라인 상태로 새 파이프라인을 만들려면 관련 플래그를 파이프라인 매개변수에 추가합니다. 다음 예시에서는 Cloud KMS에서 단어 수 파이프라인을 실행하는 과정을 보여줍니다.

자바

Cloud Dataflow는 Cloud KMS 키를 사용할 때 임시 파일의 기본 Cloud Storage 경로 만들기를 지원하지 않습니다. gcpTempLocation을 지정해야 합니다.

mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \
  -Dexec.args="--inputFile=gs://dataflow-samples/shakespeare/kinglear.txt \
               --output=gs://STORAGE_BUCKET/counts \
               --runner=DataflowRunner --project=PROJECT_ID \
               --gcpTempLocation=gs://STORAGE_BUCKET/tmp \
               --dataflowKmsKey=KMS_KEY"
  -Pdataflow-runner

Python

Cloud Dataflow는 Cloud KMS 키를 사용할 때 임시 파일의 기본 Cloud Storage 경로 만들기를 지원하지 않습니다. temp_location을 지정해야 합니다.

python -m apache_beam.examples.wordcount \
  --input gs://dataflow-samples/shakespeare/kinglear.txt \
  --output gs://STORAGE_BUCKET/counts \
  --runner DataflowRunner \
  --project PROJECT_ID \
  --temp_location gs://STORAGE_BUCKET/tmp/ \
  --dataflow_kms_key=KMS_KEY

Cloud Console

  1. Cloud Dataflow 모니터링 UI를 엽니다.
    Cloud Dataflow 웹 UI로 이동
  2. 템플릿에서 작업 만들기를 선택합니다.
  3. 암호화 섹션에서 고객 관리 키를 선택합니다.
템플릿에서 작업 만들기 페이지에서 Google 관리 키 또는 고객 관리 키를 사용할 수 있는 암호화 옵션입니다.

특정 Cloud KMS 키를 사용하여 작업을 처음 실행하면 Compute Engine 서비스 계정 및 Cloud Dataflow 서비스 계정에 해당 키를 암호화 및 복호화할 수 있는 권한이 부여되지 않았을 수 있습니다. 이 경우 서비스 계정에 권한을 부여하라는 경고 메시지가 표시됩니다.

특정 CMEK를 사용하여 Compute Engine 및 Cloud Dataflow 서비스 계정에서 암호화 및 복호화할 수 있는 권한을 부여하라는 메시지.

파이프라인 상태 아티팩트 암호화

사용자가 키 기반 변환에 지정한 데이터 키를 제외하고 Cloud Dataflow 파이프라인이 사용자 지정 데이터 소스에서 읽는 데이터는 암호화됩니다.

Windowing, Grouping, Joining과 같은 키 기반 작업에 사용되는 데이터 키는 CMEK 암호화로 보호되지 않습니다. 이러한 키에 개인 식별 정보(PII)가 포함된 경우 Cloud Dataflow 파이프라인에 들어가기 전에 키를 해싱하거나 변환해야 합니다. CMEK 암호화의 키-값 쌍의 값이 범위 내에 있습니다.

작업 메타데이터는 Cloud KMS 키로 암호화되지 않습니다. 작업 메타데이터에는 다음이 포함됩니다.

  • 작업 이름, 작업 매개변수 값, 파이프라인 그래프 같은 사용자 제공 데이터
  • 작업 ID 및 작업자의 IP 주소와 같은 시스템 생성 데이터

파이프라인 상태 위치 암호화

다음 스토리지 위치는 Cloud KMS 키로 보호됩니다.

  • Cloud Dataflow 작업자에 연결되고 Persistent Disk 기반 셔플 및 스트리밍 상태 스토리지에 사용되는 Persistent Disk입니다.
  • 임시 내보내기 또는 가져오기 데이터를 저장하는 Cloud Storage 버킷입니다. Cloud Dataflow는 버킷 수준에서 사용자가 설정한 기본 키만 지원합니다.
  • 파이프라인 코드가 포함된 바이너리 파일을 저장하는 데 사용되는 Cloud Storage 버킷입니다. Cloud Dataflow는 버킷 수준에서 사용자가 설정한 기본 키만 지원합니다.

현재 Cloud Dataflow 셔플 및 스트리밍 엔진 상태는 CMEK로 보호할 수 없으며 Google 관리 키로 암호화됩니다. CMEK에서 모든 파이프라인 상태를 보호하려면 이러한 선택적 기능을 사용하지 마세요.

Cloud KMS 키 사용 확인

GCP Console 또는 gcloud 명령줄 도구를 사용하여 파이프라인이 Cloud KMS 키를 사용하는지 확인할 수 있습니다.

Console

  1. Cloud Dataflow 모니터링 UI를 엽니다.
    Cloud Dataflow 웹 UI로 이동
  2. Cloud Dataflow 작업을 선택하여 작업 세부정보를 확인합니다.
  3. 작업 요약 섹션의 키 유형은 암호화 유형 필드에 나열됩니다.
    작업 요약 섹션에는 Cloud Dataflow 작업의 세부정보가 나열됩니다.
          작업에서 사용하는 키 유형이 암호화 유형 필드에 나열됩니다.

CLI

gcloud 도구를 사용하여 describe 명령어를 실행합니다.

gcloud dataflow jobs describe JOB_ID

serviceKmsKeyName이 포함된 줄을 검색합니다. 이 정보는 Cloud KMS 키가 Cloud Dataflow 파이프라인 상태 암호화에 사용되었음을 보여줍니다.

Cloud Storage와 BigQuery GCP Console 페이지 및 도구를 사용하거나 Cloud KMS 감사 로그를 통해 암호화 소스 및 싱크에 대한 Cloud KMS 키 사용을 확인할 수 있습니다.

Cloud Dataflow의 Cloud KMS 키 액세스 권한 삭제

다음 단계에 따라 Cloud Dataflow의 Cloud KMS 키 액세스 권한을 삭제할 수 있습니다.

  1. GCP Console을 사용하거나 프로그래매틱 방식으로 Cloud KMS CryptoKey Encrypter/Decrypter 역할Cloud Dataflow 서비스 계정에서 취소합니다.
  2. GCP Console을 사용하거나 프로그래매틱 방식으로 Cloud KMS CryptoKey Encrypter/Decrypter 역할Compute Engine 서비스 계정에서 취소합니다.
  3. 선택적으로 Cloud Dataflow 및 기타 서비스에서 파이프라인 상태에 액세스하지 못하도록 키 버전 자료를 폐기할 수도 있습니다.

키 버전 자료를 폐기할 수 있지만 키와 키링은 삭제할 수 없습니다. 키링과 키에는 청구되는 비용이나 할당량 제한이 없으므로 계속 존재해도 비용이나 프로덕션 제한이 영향을 받지 않습니다.

Cloud Dataflow 작업은 Cloud Dataflow 서비스 계정에서 지정된 Cloud KMS 키를 성공적으로 사용할 수 있는지 여부를 주기적으로 확인합니다. 암호화 또는 복호화 요청이 실패하면 Cloud Dataflow 서비스는 가능한 한 빨리 모든 데이터 수집 및 처리를 중지하고 작업에 연결된 GCP 리소스 삭제를 즉시 시작합니다.

Cloud KMS 키로 보호되는 GCP 소스 및 싱크 사용

Cloud Dataflow는 새 객체를 만들지 않는 한 소스와 싱크의 Cloud KMS 키를 지정할 필요 없이 Cloud KMS 키로 보호되는 소스와 싱크에 액세스할 수 있습니다. Cloud Dataflow 파이프라인이 싱크에서 새 객체를 만들 수 있는 경우 해당 싱크에 대한 Cloud KMS 키를 지정하는 파이프라인 매개변수를 정의하고 적절한 I/O 커넥터 메서드에 이 Cloud KMS 키를 전달해야 합니다.

GCP 또는 Amazon S3(Simple Storage Service)에서 호스팅되는 Confluent Kafka와 같이 Cloud KMS에서 관리하는 CMEK를 지원하지 않는 Cloud Dataflow 파이프라인 소스 및 싱크의 경우 Cloud Dataflow CMEK 설정은 관련이 없습니다.

Cloud KMS 키 권한

Cloud KMS 키로 보호되는 서비스에 액세스할 때 Cloud KMS CryptoKey Encrypter/Decrypter 역할을 서비스에 할당했는지 확인합니다. 계정의 형식은 다음과 같습니다.

  • Cloud Storage: service-{project_number}@gs-project-accounts.iam.gserviceaccount.com
  • BigQuery: bq-{project_number}@bigquery-encryption.iam.gserviceaccount.com
  • Cloud Pub/Sub: service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com

Cloud Storage

TempLocation/temp_locationstagingLocation/staging_location 파이프라인 매개변수로 지정한 임시 및 스테이징 버킷을 보호하려면 CMEK 보호 Cloud Storage 버킷 설정을 참조하세요.

BigQuery

자바

BigQueryIO.readTableRows(), BigQueryIO.read(), BigQueryIO.writeTableRows(), BigQueryIO.write()의 반환 값에 with_kms_key() 메서드를 사용하세요.

Apache Beam GitHub 저장소에서 예시를 찾을 수 있습니다.

Python

BigQuerySourceBigQuerySink에서 kms_key 인수를 사용하세요.

Apache Beam GitHub 저장소에서 예시를 찾을 수 있습니다.

Cloud Pub/Sub

Cloud Dataflow는 주제 CMEK 구성을 사용하여 CMEK로 보호되는 주제에 대한 액세스를 처리합니다.

CMEK로 보호되는 Cloud Pub/Sub 주제를 읽고 쓰려면 CMEK 사용을 위한 Cloud Pub/Sub 안내를 참조하세요.

가격 책정

Cloud KMS가 사용 가능한 모든 Cloud Dataflow 리전 엔드포인트에서 Cloud Dataflow와 함께 Cloud KMS 암호화 키를 사용할 수 있습니다.

이 통합은 GCP 프로젝트에 청구되는 주요 작업 이외의 추가 비용을 발생시키지 않습니다. Cloud Dataflow 서비스 계정이 Cloud KMS 키를 사용할 때마다 Cloud KMS 키 작업 속도로 작업에 비용이 청구됩니다.

자세한 내용은 Cloud KMS 가격 세부정보를 참조하세요.

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.