이 가이드에서는 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 보호 키를 사용합니다.
- 저장된 고객 데이터의 복호화가 필요한 모든 작업 중.
이러한 작업에는 다음이 포함되며 이에 국한되지 않습니다.
- 사용자 쿼리에 대한 응답(예:
compilationResults.query
) - 이전에 만든 암호화된 저장소 데이터가 필요한 Dataform 리소스 만들기(예: 워크플로 호출)
- 원격 저장소를 업데이트하는 Git 작업(예: Git 커밋 푸시)
- 사용자 쿼리에 대한 응답(예:
- 고객 저장 데이터(customer data at rest)를 저장해야 하는 모든 작업 중.
이 작업에는 다음이 포함되며 이에 국한되지 않습니다.
- 사용자 쿼리에 대한 응답(예:
compilationResults.create
) - 작업공간에 Git 작업(예: Git 커밋 가져오기)
- 사용자 쿼리에 대한 응답(예:
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 프로젝트의 경우 다음을 수행합니다.
- Cloud Key Management Service API 사용 설정
- 키링 및 키 만들기의 설명대로 키링과 키를 만듭니다. Dataform 저장소의 위치와 일치하는 위치에서 키링을 만듭니다.
-
저장소는 일치하는 리전 키를 사용해야 합니다. 예를 들어
asia-northeast3
리전의 저장소는asia-northeast3
에 있는 키링의 키로 보호해야 합니다. -
global
리전은 Dataform과 함께 사용할 수 없습니다.
-
저장소는 일치하는 리전 키를 사용해야 합니다. 예를 들어
CMEK 사용 설정
사용자가 Cloud KMS CryptoKey 암호화/복호화(roles/cloudkms.cryptoKeyEncrypterDecrypter
) 역할을 기본 Dataform 서비스 계정에 부여한 후 Dataform이 사용자 대신 키에 액세스할 수 있습니다.
기본 Dataform 서비스 계정 ID의 형식은 다음과 같습니다.
service-YOUR_PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com
기본 Dataform 서비스 계정에 CryptoKey 암호화/복호화 역할을 부여하려면 다음 단계를 따르세요.
콘솔
Google Cloud 콘솔에서 키 관리 페이지를 엽니다.
키가 포함된 키링의 이름을 클릭합니다.
역할을 추가할 암호화 키의 체크박스를 클릭합니다. 권한 탭이 열립니다.
구성원 추가를 클릭합니다.
서비스 계정의 이메일 주소를 입력합니다.
- 서비스 계정이 구성원 목록에 이미 있는 경우 기존 역할이 있는 것입니다. 서비스 계정의 현재 역할 드롭다운 목록을 클릭합니다.
역할 선택 드롭다운 목록에서 Cloud KMS를 클릭한 후 Cloud KMS CryptoKey 암호화/복호화 역할을 클릭합니다.
저장을 클릭하여 서비스 계정에 역할을 적용합니다.
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프로젝트의 IDSERVICE_ACCOUNT
: 기본 Dataform 서비스 계정의 이메일 주소KMS_KEY_LOCATION
: Cloud KMS 키의 위치 이름KMS_KEY_RING
: Cloud KMS 키의 키링 이름KMS_KEY
: Cloud KMS 키의 키 이름
CMEK 조직 정책 적용
Dataform은 조직 전반에서 CMEK 사용을 보장하기 위해 두 가지 조직 정책 제약조건과 통합됩니다.
constraints/gcp.restrictNonCmekServices
는 CMEK 보호를 요구하기 위해 사용됩니다.constraints/gcp.restrictCmekCryptoKeyProjects
는 CMEK 보호에 사용되는 Cloud KMS 키를 제한하기 위해 사용됩니다.
이 통합을 통해 조직의 Dataform 저장소에 다음과 같은 암호화 규정 준수 요구사항을 지정할 수 있습니다.
조직 정책 적용 시 고려사항
CMEK 조직 정책을 적용하기 전에 다음 사항을 알아야 합니다.
적용 지연에 대비
조직 정책을 설정하거나 업데이트한 후 새 정책이 적용되는 데 최대 15분이 걸릴 수 있습니다.
기존 리소스 고려
기존 리소스에는 새로 만든 조직 정책이 적용되지 않습니다. 예를 들어 조직 정책은 기존 저장소에 소급 적용되지 않습니다. 이러한 리소스는 CMEK 없이도 계속 액세스할 수 있으며, 해당하는 경우 기존 키로 계속 암호화됩니다.
조직 정책을 설정하는 데 필요한 권한 확인
테스트 목적으로는 조직 정책을 설정하거나 업데이트할 수 있는 권한을 획득하기 어려울 수 있습니다. 조직 정책 관리자 역할을 부여받아야 하며, 이 역할은 프로젝트 또는 폴더 수준이 아닌 조직 수준에서만 부여할 수 있습니다.
조직 수준에서 역할을 부여받아야 하지만 특정 프로젝트나 폴더에만 적용되는 정책을 지정할 수 있습니다.
모든 새 Dataform 저장소에 CMEK 필요
constraints/gcp.restrictNonCmekServices
제약조건을 사용하여 조직의 모든 새 Dataform 저장소를 보호하는 데 CMEK가 사용되도록 요구할 수 있습니다.
이 조직 정책을 설정하면 지정된 Cloud KMS 키가 없는 모든 리소스 만들기 요청이 실패합니다.
이 정책을 설정하면 프로젝트의 새 저장소에만 적용됩니다. Cloud KMS 키가 적용되지 않은 기존 저장소도 계속 존재하며 문제 없이 액세스할 수 있습니다.
콘솔
Google Cloud 콘솔에서 조직 정책 페이지로 이동합니다.
필터를 사용하여 다음 제약 조건을 검색합니다.
constraints/gcp.restrictNonCmekServices
이름 열에서 CMEK 없이 리소스를 만들 수 있는 서비스 제한을 클릭합니다.
정책 관리를 클릭합니다.
정책 수정 페이지의 정책 소스에서 상위 정책 재정의를 선택합니다.
규칙에서 규칙 추가를 클릭합니다.
정책 값 목록에서 커스텀을 선택합니다.
정책 유형 목록에서 거부를 선택합니다.
커스텀 값 필드에 다음을 입력합니다.
is:dataform.googleapis.com
완료를 클릭한 다음 정책 설정을 클릭합니다.
gcloud
정책을 저장할
/tmp/policy.yaml
임시 파일을 만듭니다.name: projects/PROJECT_ID/policies/gcp.restrictNonCmekServices spec: rules: - values: deniedValues: - is:dataform.googleapis.com
PROJECT_ID
를 이 제약 조건을 적용하는 프로젝트의 ID로 바꿉니다.org-policies set-policy
명령어를 실행합니다.gcloud org-policies set-policy /tmp/policy.yaml
정책이 성공적으로 적용되었는지 확인하려면 프로젝트에서 Dataform 저장소를 만들어 보면 됩니다. Cloud KMS 키를 지정하지 않으면 프로세스가 실패합니다.
Dataform 프로젝트의 Cloud KMS 키 제한
constraints/gcp.restrictCmekCryptoKeyProjects
제약조건을 사용하여 Dataform 프로젝트의 저장소를 보호하는 데 사용할 수 있는 Cloud KMS 키를 제한할 수 있습니다.
예를 들어 다음과 유사한 규칙을 지정할 수 있습니다. 'projects/my-company-data-project
의 모든 Dataform 저장소에 대해 이 프로젝트에서 사용되는 Cloud KMS 키는 projects/my-company-central-keys
또는 projects/team-specific-keys
에서 가져와야 합니다.'
콘솔
Google Cloud 콘솔에서 조직 정책 페이지로 이동합니다.
필터를 사용하여 다음 제약 조건을 검색합니다.
constraints/gcp.restrictCmekCryptoKeyProjects
이름 열에서 CMEK에 KMS CryptoKey를 제공할 수 있는 프로젝트 제한을 클릭합니다.
정책 관리를 클릭합니다.
정책 수정 페이지의 정책 소스에서 상위 정책 재정의를 선택합니다.
규칙에서 규칙 추가를 클릭합니다.
정책 값 목록에서 커스텀을 선택합니다.
정책 유형 목록에서 허용을 선택합니다.
커스텀 값 필드에 다음을 입력합니다.
under:projects/KMS_PROJECT_ID
KMS_PROJECT_ID
를 사용하려는 Cloud KMS 키가 있는 프로젝트의 ID로 바꿉니다.예를 들면
under:projects/my-kms-project
입니다.완료를 클릭한 다음 정책 설정을 클릭합니다.
gcloud
정책을 저장할
/tmp/policy.yaml
임시 파일을 만듭니다.name: projects/PROJECT_ID/policies/gcp.restrictCmekCryptoKeyProjects spec: rules: - values: allowedValues: - under:projects/KMS_PROJECT_ID
다음을 바꿉니다.
PROJECT_ID
: 이 제약조건을 적용하는 프로젝트의 IDKMS_PROJECT_ID
: 사용하려는 Cloud KMS 키가 있는 프로젝트의 ID
org-policies set-policy
명령어를 실행합니다.gcloud org-policies set-policy /tmp/policy.yaml
정책이 성공적으로 적용되었는지 확인하려면 다른 프로젝트의 Cloud KMS 키를 사용하여 Dataform 저장소를 만들어 보면 됩니다. 프로세스가 실패할 것입니다.
기본 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 저장소의 암호화 메커니즘을 변경할 수 없습니다.
자세한 내용은 제한사항을 참조하세요.
다음 단계
- CMEK에 대한 자세한 내용은 CMEK 개요 참조하기
- Cloud KMS 할당량에 대한 자세한 내용은 Cloud KMS 할당량 참조하기
- Cloud KMS 가격 책정에 대한 자세한 내용은 Cloud KMS 가격 책정 참조하기
- Dataform 저장소에 대한 자세한 내용은 저장소 만들기를 참고하세요.