고객 관리 암호화 키 사용

이 페이지에서는 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의 암호화 옵션을 참조하세요.

시작하기 전에

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

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

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

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

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

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

    1. Cloud KMS API를 사용 설정합니다.
    2. 대칭 키 만들기의 설명대로 키링과 키를 만듭니다. Cloud KMS와 Dataflow는 모두 지역화된 서비스입니다. Dataflow의 CMEK 리전과 리전 엔드포인트가 동일해야 합니다.

암호화/복호화 권한 부여

  1. Cloud KMS CryptoKey Encrypter/Decrypter 역할Dataflow 서비스 계정에 할당합니다. 이렇게 하면 지정한 CMEK로 암호화하고 복호화할 수 있는 권한이 Dataflow 서비스 계정에 부여됩니다. Google Cloud 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를 실행 중인 Google Cloud 프로젝트의 ID로 바꾸고 PROJECT_NUMBER를 Dataflow 리소스를 실행 중인 Google Cloud 프로젝트의 프로젝트 번호(프로젝트 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를 실행 중인 Google Cloud 프로젝트의 ID로 바꾸고 PROJECT_NUMBER를 Compute Engine 리소스를 실행 중인 Google Cloud 프로젝트의 프로젝트 번호(프로젝트 ID 아님)로 바꿉니다.

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

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

명령줄 인터페이스

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

자바

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

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

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

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

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

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

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

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

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

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

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

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

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

Cloud KMS 키 사용 확인

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

Console

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

CLI

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

gcloud dataflow jobs describe JOB_ID

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

Pub/Sub, Cloud Storage, BigQuery 등의 소스 및 싱크의 도구와 Cloud Console 페이지를 사용하여 소스 및 싱크를 암호화하는 Cloud KMS 키 사용을 확인할 수 있습니다. Cloud KMS 감사 로그를 보고 Cloud KMS 키 사용을 확인할 수도 있습니다.

감사 로깅 Cloud KMS 키 사용

Dataflow를 사용하면 Cloud KMS가 암호화 및 복호화 등 키 작업 로깅에 Cloud 감사 로그를 사용할 수 있습니다. Dataflow는 작업 ID를 Cloud KMS 호출자의 컨텍스트로 제공합니다. 이를 통해 Dataflow 작업에 특정 Cloud KMS 키가 사용되는 각 인스턴스를 추적할 수 있습니다.

Cloud 감사 로그는 Google Cloud 프로젝트, 폴더, 조직마다 감사 로그를 유지합니다. 여러 가지 방법으로 Cloud KMS 감사 로그를 볼 수 있습니다.

Cloud KMS는 CMEK 암호화를 사용하여 Dataflow 작업의 Admin Activity 감사 로그를 기록합니다. 이러한 로그는 리소스의 구성 또는 메타데이터를 수정하는 작업을 기록합니다. 관리자 활동 감사 로그는 사용 중지할 수 없습니다.

명시적으로 사용 설정한 경우 Cloud KMS는 CMEK 암호화를 사용하여 Dataflow 작업의 데이터 액세스 감사 로그를 작성합니다. 데이터 액세스 감사 로그에는 리소스의 구성 또는 메타데이터를 읽는 API 호출뿐만 아니라 사용자가 제공한 리소스 데이터를 생성, 수정 또는 읽는 사용자 주도 API 호출도 포함됩니다. 데이터 액세스 감사 로그의 일부 또는 전부를 사용 설정하는 방법은 데이터 액세스 로그 구성을 참조하세요.

Cloud KMS 키에 대한 Dataflow의 액세스 권한 제거

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

  1. Cloud Console 또는 gcloud 도구를 사용하여 Dataflow 서비스 계정에 대한 Cloud KMS CryptoKey Encrypter/Decrypter 역할을 취소합니다.
  2. Cloud Console 또는 gcloud 도구를 사용하여 Compute Engine 서비스 계정에 대한 Cloud KMS CryptoKey Encrypter/Decrypter 역할을 취소합니다.
  3. 선택적으로 Dataflow 및 기타 서비스가 파이프라인 상태에 액세스하는 것을 방지하기 위해 키 버전 자료를 폐기할 수도 있습니다.

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

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

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

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

Google Cloud 또는 Amazon S3(Simple Storage Service)에서 호스팅되는 Confluent Kafka와 같이 Cloud KMS에서 관리하는 CMEK를 지원하지 않는 Dataflow 파이프라인 소스 및 싱크의 경우 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
  • 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 저장소에서 예시를 찾을 수 있습니다.

Pub/Sub

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

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

가격 책정

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

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

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