고객 관리 암호화 키(CMEK) 사용

개요

이 페이지에서는 Datastream에서 고객 관리 암호화 키(CMEK)가 작동하는 방식을 설명합니다.

CMEK가 적합한가요?

CMEK는 암호화 키를 관리해야 하는 민감한 데이터 또는 규제 대상 데이터가 있는 조직을 위한 것입니다.

Google 관리 암호화와 고객 관리 암호화 비교

CMEK 기능을 사용하면 Datastream의 저장 데이터에 자체 암호화 키를 사용할 수 있습니다. CMEK를 추가한 후 API 호출이 있을 때마다 Datastream은 고객의 키를 사용하여 데이터에 액세스합니다.

Datastream은 Google 관리 데이터 암호화 키(DEK)와 키 암호화 키(KEK)를 사용하여 Datastream을 암호화합니다. 암호화에는 두 가지 수준이 있습니다.

  1. DEK는 데이터를 암호화합니다.
  2. KEK는 DEK를 암호화합니다.

DataStream은 암호화된 데이터와 함께 암호화된 DEK를 저장하고 Google은 Google KEK를 관리합니다. CMEK를 사용하면 Google KEK를 래핑하는 키를 만들 수 있습니다. CMEK를 사용하면 KEK를 만들고 취소하고 삭제할 수 있습니다.

소프트웨어, 하드웨어, 외부 키를 포함한 CMEK는 모두 Cloud Key Management Service(KMS) API를 통해 관리됩니다.

CMEK가 사용 설정된 Datastream 스트림을 지원하는 위치는 어디인가요?

CMEK는 모든 Datastream 위치에서 사용할 수 있습니다.

서비스 계정 이해

Datastream 스트림에 CMEK가 사용 설정된 경우 서비스 계정을 사용하여 Cloud Key Management Service에서 키 액세스를 요청해야 합니다.

프로젝트에서 CMEK를 사용하려면 서비스 계정이 있어야 하며 서비스 계정에 키 액세스 권한을 부여해야 합니다. 서비스 계정은 프로젝트 내에 있어야 합니다. 모든 리전에서 서비스 계정을 볼 수 있습니다.

Console을 사용하여 스트림을 만드는 경우 고객 관리 키 옵션을 처음 선택하면 Datastream이 서비스 계정을 자동으로 만듭니다(서비스 계정이 아직 없는 경우). Datastream에서 서비스 계정을 자동으로 만들 때 사용자 계정에 대한 특별한 권한은 필요 없습니다.

키 이해

Cloud Key Management Service에서 위치가 설정된 암호화 키를 사용하여 키링을 만들어야 합니다. Datastream에서 새 스트림을 만들 때 이 키를 선택하여 암호화합니다.

CMEK를 사용하는 새 스트림을 만들 때는 키 ID와 키 리전을 알아야 합니다. 스트림과 연결된 CMEK와 동일한 리전에 새 스트림을 배치해야 합니다. 키와 스트림 모두에 대해 하나의 프로젝트를 만들거나 각각에 대해 서로 다른 프로젝트를 만들 수 있습니다.

CMEK는 다음 형식을 사용합니다.

projects/[CMEK_ENABLED_PROJECT]/locations/[REGION]/keyRings/[RING_NAME]/cryptoKeys/[KEYNAME]

Datastream이 키에 액세스할 수 없는 경우(예: 키 버전을 사용 중지한 경우) Datastream이 스트림 상태를 FAILED로 변경하고 관련 오류 메시지가 표시됩니다. 키에 다시 액세스할 수 있도록 오류 메시지와 관련된 문제를 해결한 후 Datastream에서 자동으로 스트림을 재개합니다.

외부 키 관리자

Fortanix, Ionic, Thales와 같은 외부 키 관리자에 저장된 키를 CMEK로 사용할 수 있습니다. Cloud Key Management Service에서 외부 키를 사용하는 방법은 Cloud 외부 키 관리자를 참고하세요.

CMEK로 암호화된 데이터를 영구적으로 액세스할 수 없도록 하려면 어떻게 해야 하나요?

CMEK로 암호화된 데이터를 영구적으로 폐기하려는 경우가 있을 수 있습니다. 이렇게 하려면 CMEK 버전을 삭제합니다. 키링이나 키를 삭제할 수 없지만 키의 키 버전을 삭제할 수 있습니다.

제한사항

CMEK를 사용할 때는 다음 제한사항이 적용됩니다.

  • 실행 중인 스트림에서는 CMEK를 업데이트할 수 없습니다.

  • CMEK를 사용하여 소스 데이터베이스의 행을 암호화할 수 있지만 이러한 키를 사용하여 스트림 ID, 소스 데이터베이스의 IP 주소, 소스 데이터베이스 테이블 이름과 같은 스트림 메타데이터를 암호화할 수 없습니다.

CMEK 사용

이제 CMEK에 대해 이해했으므로 CMEK용 서비스 계정 및 키를 설정할 수 있습니다. 또한 CMEK를 사용하도록 Datastream을 설정하는 방법도 알아봅니다. CMEK에 대한 자세한 내용은 개요를 참조하세요.

시작하기 전에

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  6. Cloud SDK를 설치하고 초기화합니다.
  7. Datastream 관리자 역할이 사용자 계정에 할당되었는지 확인합니다.

    IAM 페이지로 이동

  8. Enable the Cloud Key Management Service API.

    Enable the API

  9. Datastream API를 사용 설정합니다.

    API 사용 설정

CMEK를 사용하여 Datastream에서 스트림을 만드는 워크플로

  1. gcloud 및 API 사용자만 해당: CMEK가 필요한 각 프로젝트에 서비스 계정이 있는지 확인합니다. 서비스 계정이 없는 경우 서비스 계정을 만드는 방법을 참고하세요.
  2. 키링과 키를 만들고 각 키의 위치를 설정합니다. 위치는 Google Cloud 리전입니다.
  3. gcloud 및 API 사용자만 해당: 서비스 계정에 키 액세스 권한을 부여합니다.
  4. 키에 대한 키 ID(KMS_KEY_ID) 및 위치와 키링의 ID(KMS_KEYRING_ID)를 복사하거나 기록해 둡니다. 서비스 계정에 키 액세스 권한을 부여할 때 이 정보가 필요합니다.
  5. 프로젝트로 이동하여 다음 옵션으로 Datastream에서 스트림을 만듭니다.
    1. CMEK와 동일한 위치
    2. CMEK 구성
    3. CMEK ID

이제 Datastream의 스트림이 CMEK로 사용 설정되었습니다.

서비스 계정 만들기

CMEK가 필요한 각 프로젝트에 서비스 계정을 만들어야 합니다.

사용자가 서비스 계정을 관리할 수 있도록 다음 역할 중 하나를 부여합니다.

  • 서비스 계정 사용자(roles/iam.serviceAccountUser): 서비스 계정을 나열하고, 서비스 계정 세부정보를 가져오고, 서비스 계정을 가장할 수 있는 권한을 포함합니다.
  • 서비스 계정 관리자(roles/iam.serviceAccountAdmin): 서비스 계정을 나열하고 서비스 계정 세부정보를 가져올 수 있는 권한을 포함합니다. 서비스 계정을 생성, 업데이트, 삭제하고, 서비스 계정에서 Datastream 정책을 보거나 변경할 수 있는 권한을 포함합니다.

현재는 gcloud 명령어만 사용하여 CMEK에 필요한 서비스 계정 유형을 만들 수 있습니다. 콘솔을 사용하는 경우 Datastream에서 이 서비스 계정을 자동으로 만듭니다.

gcloud로 서비스 계정을 만들려면 다음 명령어를 실행합니다.

gcloud beta services identity create \
--service=datastream.googleapis.com \
--project=PROJECT_ID

이전 명령어는 서비스 계정 이름을 반환합니다. 이 서비스 계정 이름은 서비스 계정에 키 액세스 권한 부여의 절차를 진행하면서 사용합니다.

키 만들기

Datastream의 스트림과 동일한 Google Cloud 프로젝트 또는 별도의 사용자 프로젝트에서 키를 만들 수 있습니다. Cloud KMS 키링 위치는 스트림을 만들려는 리전과 일치해야 합니다. 멀티 리전 또는 전역 리전 키는 작동하지 않습니다. 리전이 일치하지 않으면 스트림을 만들 수 없습니다.

Cloud KMS 키를 만들려면 다음 안내를 따르세요.

콘솔

  1. Google Cloud 콘솔에서 암호화 키 페이지로 이동합니다.
  2. 키링 만들기를 클릭합니다.
  3. 키링 이름을 추가합니다. 서비스 계정에 키 액세스 권한을 부여할 때 필요하므로 이 이름을 기록해 둡니다.
  4. 키링 위치를 추가합니다.
  5. 만들기를 클릭합니다. 키 만들기 페이지가 열립니다.
  6. 키 이름을 추가합니다.
  7. 용도를 선택합니다(대칭 또는 비대칭).
  8. 순환 기간시작 날짜를 선택합니다.
  9. 만들기를 클릭합니다.
  10. 표에서 마지막 열에 있는 3개의 점을 클릭하고 리소스 ID 복사를 선택하거나 기록해 둡니다. 이는 KMS_KEY_ID이며 서비스 계정에 키 액세스 권한을 부여할 때 KMS_KEY_ID가 필요합니다.

gcloud

  1. 새 키링을 만듭니다.
    gcloud kms keyrings create KMS_KEYRING_ID \
    --location=GCP_REGION
      
    서비스 계정에 키 액세스 권한을 부여할 때 필요하므로 이 이름을 기록해 둡니다.
  2. 키링에 키를 만듭니다.
    gcloud kms keys create KMS_KEY_ID \
    --location=GCP_REGION \
    --keyring=KMS_KEYRING_ID \
    --purpose=encryption
      
    서비스 계정에 키 액세스 권한을 부여할 때 필요하므로 이 이름을 기록해 둡니다.

서비스 계정에 키 액세스 권한 부여

이 절차는 gcloud 또는 API를 사용하는 경우에만 수행하면 됩니다.

서비스 계정에 액세스 권한을 부여하려면 다음 코드를 사용합니다.

gcloud kms keys add-iam-policy-binding KMS_KEY_ID \
--location=GCP_REGION \
--keyring=KMS_KEYRING_ID \
--member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-datastream.iam.gserviceaccount.com \
--role=roles/cloudkms.cryptoKeyEncrypterDecrypter

CMEK로 Datastream에서 스트림 만들기

Datastream에서 스트림 만들기 중에 CMEK를 사용하여 데이터 암호화를 관리할 수 있습니다.

다음 단계