고객 관리 암호화 키 사용

이 가이드에서는 Dataform에 CMEK를 사용하는 방법을 설명하고 Dataform 저장소의 CMEK 암호화를 사용 설정하는 방법을 안내합니다.

기본적으로 Dataform은 저장 중 고객 콘텐츠를 암호화합니다. Dataform은 사용자 측의 추가 작업 없이 자동으로 암호화를 처리합니다. 이 옵션을 Google 기본 암호화라고 부릅니다.

암호화 키를 제어하려면 Dataform을 포함한 CMEK 통합 서비스와 함께 Cloud KMS에서 고객 관리 암호화 키(CMEK)를 사용하면 됩니다. Cloud KMS 키를 사용하면 보호 수준, 위치, 순환 일정, 사용 및 액세스 권한, 암호화 경계를 관리할 수 있습니다. Cloud KMS를 사용하면 키 사용을 추적하고, 감사 로그를 보고, 키 수명 주기를 제어할 수도 있습니다. Google에서 데이터를 보호하는 대칭 키 암호화 키(KEK)를 소유하고 관리하는 대신 사용자가 Cloud KMS에서 이러한 키를 제어하고 관리할 수 있습니다.

CMEK로 리소스를 설정한 후 Dataform 리소스에 액세스하는 환경은 Google 기본 암호화를 사용하는 것과 유사합니다. 암호화 옵션에 대한 자세한 내용은 고객 관리 암호화 키(CMEK)를 참조하세요.

저장소 데이터의 CMEK 암호화

Dataform 저장소에 CMEK 암호화를 적용하면 해당 저장소의 모든 Dataform 관리 고객 데이터는 저장소에 설정된 CMEK 보호 키를 사용하여 저장 상태에서 암호화됩니다. 이 데이터에는 다음이 포함됩니다.

  • Dataform 저장소 및 작업공간의 Git 저장소 콘텐츠
  • 컴파일된 SQL 쿼리 및 컴파일 오류
  • 워크플로 작업의 저장된 SQL 쿼리
  • 실행된 워크플로 작업의 오류 세부정보

Dataform은 다음 시나리오에서 CMEK 보호 키를 사용합니다.

  • 저장된 고객 데이터의 복호화가 필요한 모든 작업 중. 이러한 작업에는 다음이 포함되며 이에 국한되지 않습니다.
  • 고객 저장 데이터(customer data at rest)를 저장해야 하는 모든 작업 중. 이 작업에는 다음이 포함되며 이에 국한되지 않습니다.

Dataform은 Dataform 리소스에만 연결된 고객 데이터의 암호화를 관리합니다. Dataform은 Dataform 워크플로 실행을 통해 BigQuery에서 생성된 고객 데이터의 암호화를 관리하지 않습니다. BigQuery에서 생성되고 저장된 데이터를 암호화하려면 BigQuery용 CMEK를 구성합니다.

지원되는 키

Dataform은 다음 유형의 CMEK 키를 지원합니다.

키 가용성은 키 유형 및 리전에 따라 다릅니다. CMEK 키의 지리적 가용성에 대한 자세한 내용은 Cloud KMS 위치를 참조하세요.

제한사항

Dataform은 다음 제한사항이 있는 CMEK를 지원합니다.

  • CMEK 암호화 저장소의 최대 크기는 512MB입니다.
  • CMEK 암호화 저장소의 워크스페이스 최대 크기는 512MB입니다.
  • 저장소를 만든 후에는 저장소에 CMEK 보호 키를 적용할 수 없습니다. 저장소를 만드는 동안에만 CMEK 암호화를 적용할 수 있습니다.
  • 저장소에서 CMEK 보호 키를 삭제할 수 없습니다.
  • 저장소의 CMEK 보호 키는 변경할 수 없습니다.
  • Google Cloud 프로젝트에 기본 Dataform CMEK 키를 설정하면 Google Cloud 프로젝트 위치에 생성된 모든 새 저장소를 CMEK로 암호화해야 합니다. Google Cloud 프로젝트 위치에 새 저장소를 만들 때는 기본 Dataform CMEK 키 또는 다른 CMEK 키를 적용할 수 있지만 기본 저장 데이터 암호화는 적용할 수 없습니다.
  • 기본 Dataform CMEK 키의 값을 변경하면 이전 값은 기존 저장소에 적용되고 업데이트된 값은 변경 후에 생성된 저장소에 적용됩니다.
  • Google Cloud 프로젝트 저장소 위치당 하나의 기본 Dataform CMEK 키만 설정할 수 있습니다.
  • CMEK 조직 정책을 사용할 수 없습니다.
  • 가용성에 따라 Cloud HSM 및 Cloud EKM 키 사용이 결정됩니다. 위치 간 키 가용성에 대한 자세한 내용은 Cloud KMS 위치를 참조하세요.

Cloud KMS 할당량 및 Dataform

Dataform에서 Cloud HSM 키와 Cloud EKM 키를 사용할 수 있습니다. Dataform에서 CMEK를 사용하는 경우 프로젝트에서 Cloud KMS 암호화 요청 할당량을 사용할 수 있습니다. 예를 들어 CMEK로 암호화된 Dataform 저장소는 저장소 콘텐츠가 변경될 때마다 이 할당량을 사용할 수 있습니다. CMEK 키를 사용하는 암호화 및 복호화 작업은 하드웨어(Cloud HSM) 또는 외부(Cloud EKM) 키를 사용하는 경우에만 Cloud KMS 할당량에 영향을 미칩니다. 자세한 내용은 Cloud KMS 할당량을 참조하세요.

키 관리

모든 키 관리 작업에 Cloud KMS를 사용합니다. Dataform은 Cloud KMS에서 전파될 때까지 어떤 키 변경사항도 감지하거나 대응할 수 없습니다. 키 사용 중지 또는 삭제와 같은 일부 작업은 전파되는 데 최대 3시간까지 걸릴 수 있습니다. 권한 변경사항은 일반적으로 훨씬 더 빠르게 전파됩니다.

저장소를 만든 후 Dataform은 Cloud KMS를 호출하여 암호화된 저장소 데이터에 대한 각 작업 중에 키가 여전히 유효한지 확인합니다.

Dataform에서 Cloud KMS 키가 사용 중지되었거나 삭제된 것으로 감지되면 해당 저장소에 저장된 모든 데이터에 액세스할 수 없게 됩니다.

Dataform을 통한 Cloud KMS 호출로 이전에 사용 중지된 키가 다시 사용 설정된 것으로 확인되면 Dataform이 자동으로 액세스를 복원합니다.

Cloud EKM에서 외부 키 사용

Cloud KMS에 있는 키를 사용하는 대신 지원되는 외부 키 관리 파트너에 있는 키를 사용할 수 있습니다. 이렇게 하려면 Cloud 외부 키 관리자(Cloud EKM)를 사용하여 Google Cloud 외부에 있는 키에 대한 포인터인 외부 키를 만들고 관리합니다. 자세한 내용은 Cloud 외부 키 관리자를 참조하세요.

Cloud EKM으로 외부 키를 만든 후 저장소를 만들 때 해당 키의 ID를 제공하여 새 Dataform 저장소에 적용할 수 있습니다. 이 절차는 새 저장소에 Cloud KMS 키를 적용하는 것과 동일합니다.

Dataform 기본 CMEK 키 사용

동일한 CMEK 키로 여러 Dataform 저장소를 암호화하려면 Google Cloud 프로젝트에 기본 Dataform CMEK 키를 설정하면 됩니다. 기본 Dataform CMEK 키의 Google Cloud 프로젝트 위치를 지정해야 합니다. Google Cloud 프로젝트당 기본 CMEK 키를 하나만 설정할 수 있습니다.

기본 Dataform CMEK 키를 설정하면 Dataform은 기본적으로 Google Cloud 프로젝트 위치에 생성된 모든 새 저장소에 키를 적용합니다. 저장소를 만들 때 기본 키를 사용하거나 다른 CMEK 키를 선택할 수 있습니다.

사용할 수 없는 키 상태의 처리 방법

드문 경우지만 Cloud KMS를 사용할 수 없는 기간 중에는 Dataform이 Cloud KMS에서 키 상태를 검색하지 못할 수 있습니다.

Dataform이 Cloud KMS와 통신할 수 없게 된 시점에 사용 설정된 키로 Dataform 저장소가 보호되는 경우에는 암호화된 저장소 데이터에 액세스할 수 없게 됩니다.

Dataform이 Cloud KMS에 다시 연결할 수 있고 Cloud KMS에서 키가 활성 상태라고 응답할 때까지 암호화된 저장소 데이터가 액세스할 수 없는 상태로 유지됩니다.

반대로 Dataform이 처음으로 Cloud KMS와 통신할 수 없게 된 시점에 중지된 키로 Dataform 저장소가 보호되는 경우에는 Cloud KMS에 다시 연결할 수 있고 사용자가 키를 다시 사용 설정할 때까지 암호화된 저장소 데이터가 액세스할 수 없는 상태로 유지됩니다.

로깅

프로젝트에서 Cloud KMS API에 대해 감사 로깅을 사용 설정한 경우 Cloud Logging에서 사용자 대신 Dataform이 Cloud KMS에 전송하는 요청을 감사할 수 있습니다. 이러한 Cloud KMS 로그 항목Cloud Logging에서 확인할 수 있습니다. 자세한 내용은 로그 보기를 참조하세요.

시작하기 전에

  • Dataform과 Cloud KMS를 다른 프로젝트에서 실행할지 또는 동일한 프로젝트에서 실행할지 결정합니다. 권한을 보다 효과적으로 제어하려면 별도의 프로젝트를 사용하는 것이 좋습니다. Google Cloud 프로젝트 ID와 프로젝트 번호에 대한 자세한 내용은 프로젝트 식별을 참조하세요.

  • Cloud KMS를 실행하는 Google Cloud 프로젝트의 경우 다음을 수행합니다.

    1. Cloud Key Management Service API 사용 설정
    2. 키링 및 키 만들기의 설명대로 키링과 키를 만듭니다. Dataform 저장소의 위치와 일치하는 위치에서 키링을 만듭니다.
      • 저장소는 일치하는 리전 키를 사용해야 합니다. 예를 들어 asia-northeast3 리전의 저장소는 asia-northeast3에 있는 키링의 키로 보호해야 합니다.
      • global 리전은 Dataform과 함께 사용할 수 없습니다.
      Dataform 및 Cloud KMS가 지원하는 위치에 대한 자세한 내용은 Cloud 위치를 참조하세요.

CMEK 사용 설정

사용자가 Cloud KMS CryptoKey 암호화/복호화(roles/cloudkms.cryptoKeyEncrypterDecrypter) 역할을 기본 Dataform 서비스 계정에 부여한 후 Dataform이 사용자 대신 키에 액세스할 수 있습니다.

기본 Dataform 서비스 계정 ID의 형식은 다음과 같습니다.

service-YOUR_PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com

기본 Dataform 서비스 계정에 CryptoKey 암호화/복호화 역할을 부여하려면 다음 단계를 따르세요.

콘솔

  1. Google Cloud 콘솔에서 키 관리 페이지를 엽니다.

    키 관리 페이지를 엽니다.

  2. 키가 포함된 키링의 이름을 클릭합니다.

  3. 역할을 추가할 암호화 키의 체크박스를 클릭합니다. 권한 탭이 열립니다.

  4. 구성원 추가를 클릭합니다.

  5. 서비스 계정의 이메일 주소를 입력합니다.

    • 서비스 계정이 구성원 목록에 이미 있는 경우 기존 역할이 있는 것입니다. 서비스 계정의 현재 역할 드롭다운 목록을 클릭합니다.
  6. 역할 선택 드롭다운 목록에서 Cloud KMS를 클릭한 후 Cloud KMS CryptoKey 암호화/복호화 역할을 클릭합니다.

  7. 저장을 클릭하여 서비스 계정에 역할을 적용합니다.

gcloud

Google Cloud CLI를 사용하여 역할을 할당할 수 있습니다.

gcloud kms keys add-iam-policy-binding \
    --project=KMS_PROJECT_ID \
    --member serviceAccount:SERVICE_ACCOUNT \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
    --location=KMS_KEY_LOCATION \
    --keyring=KMS_KEY_RING \
    KMS_KEY

다음을 바꿉니다.

  • KMS_PROJECT_ID: Cloud KMS를 실행하는 Google Cloud 프로젝트의 ID
  • SERVICE_ACCOUNT: 기본 Dataform 서비스 계정의 이메일 주소
  • KMS_KEY_LOCATION: Cloud KMS 키의 위치 이름
  • KMS_KEY_RING: Cloud KMS 키의 키링 이름
  • KMS_KEY: Cloud KMS 키의 키 이름

기본 Dataform CMEK 키 설정

Google Cloud 프로젝트에 기본 Dataform CMEK 키를 설정하면 동일한 CMEK 키로 여러 저장소를 암호화할 수 있습니다. 자세한 내용은 Dataform 저장소에 기본 키 사용을 참고하세요.

기본 CMEK 키를 설정하거나 수정하려면 다음 요청에서 Dataform API를 호출합니다.

curl -X PATCH \
-H "Content-Type: application/json" \
-d '{"defaultKmsKeyName":"projects/PROJECT_ID/locations/PROJECT_LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KMS_KEY"}' \
https://dataform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/PROJECT_LOCATION/config

다음을 바꿉니다.

  • KMS_KEY_RING: Cloud KMS 키의 키링 이름
  • KMS_KEY: Cloud KMS 키의 이름
  • PROJECT_ID: Google Cloud 프로젝트의 ID
  • PROJECT_LOCATION: Google Cloud 프로젝트 위치 이름

기본 Dataform CMEK 키 삭제

Google Cloud 프로젝트에서 기본 Dataform CMEK 키를 삭제하려면 다음 요청에서 Dataform API를 호출합니다.

curl -X PATCH \
-H "Content-Type: application/json" \
-d '{"defaultKmsKeyName":""}' \
https://dataform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/PROJECT_LOCATION/config

다음을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트의 ID
  • PROJECT_LOCATION: 기본 CMEK를 설정 해제하려는 Google Cloud 프로젝트의 위치 이름

기본 Dataform CMEK 키가 설정되어 있는지 확인

Google Cloud 프로젝트에 기본 Dataform CMEK 키가 설정되어 있는지 확인하려면 다음 요청에서 Dataform API를 호출하세요.

curl -X GET \
-H "Content-Type: application/json" \
https://dataform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/PROJECT_LOCATION/config

다음을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트의 ID
  • PROJECT_LOCATION: Google Cloud 프로젝트 위치 이름

저장소에 CMEK 적용

저장소를 만드는 동안 Dataform 저장소에 CMEK 보호를 적용할 수 있습니다.

Dataform 저장소에 CMEK 암호화를 적용하려면 기본 Dataform CMEK 키로 암호화를 선택하거나 저장소를 만들 때 고유한 Cloud KMS 키를 지정합니다. 자세한 내용은 저장소 만들기를 참조하세요.

저장소를 만든 후에는 Dataform 저장소의 암호화 메커니즘을 변경할 수 없습니다.

자세한 내용은 제한사항을 참조하세요.

다음 단계