고객 관리 암호화 키 사용

이 페이지에서는 고객 관리 암호화 키(CMEK)를 사용하여 Cloud Composer 환경을 보호하는 방법을 설명합니다. CMEK를 사용 설정하면 환경 데이터를 암호화/복호화하는 자체 암호화 키를 제공할 수 있습니다.

리소스 위치 제한이 지원되지 않는 리전

Cloud Composer는 바르샤바(europe-central2) 리전에서 리소스 위치 제한을 지원하지 않습니다.

기본 요건

  1. Artifact Registry API를 사용 설정합니다.

        gcloud services enable artifactregistry.googleapis.com
      

  2. 환경을 VPC 서비스 제어 경계 내에서 실행하려면 Cloud Key Management Service 및 Artifact Registry API를 경계에 추가해야 합니다.

Cloud Composer의 CMEK 지원 구성

Console

환경을 만드는 동안 Cloud Console에서 CMEK 암호화를 구성하려면 다음 단계를 따르세요.

  1. Cloud Console에서 환경 만들기 페이지로 이동합니다. 환경 만들기 페이지 열기

  2. 네트워킹, Airflow 구성 재정의, 추가 기능 섹션을 펼칩니다.

  3. 데이터 암호화에서 고객 관리 키를 선택합니다.

  4. 고객 관리 키 선택 아래의 드롭다운 메뉴에서 키를 선택합니다.

  5. 추가 설정이 필요한 경우 이를 알리는 메시지가 표시됩니다. 그런 다음 과정을 안내하는 마법사를 열 수 있는 옵션이 제공됩니다.

환경이 생성되면 암호화 구성을 확인할 수 있습니다.

  1. 환경 목록 페이지로 이동합니다. 환경 목록 페이지 열기

  2. 페이지 오른쪽 상단에 있는 '새로고침' 버튼 아래에서 열 표시 옵션 버튼을 클릭합니다.

  3. 열 표시 옵션 드롭다운 메뉴에서 데이터 암호화를 선택합니다.

  4. 이제 각 환경의 데이터 암호화를 'Google 관리 키' 또는 '고객 관리 키'로 표시하는 새 열이 표시됩니다.

  5. 고객 관리 키가 사용 가능한지 확인하려면 목록에서 새 환경을 선택하여 환경 세부정보 페이지로 이동합니다. 환경 구성 탭을 선택하고 데이터 암호화 행을 찾습니다.

gcloud

Cloud Console을 열고 아래 명령어를 사용하여 Cloud Composer의 CMEK 암호화를 구성합니다.

  1. 프로젝트 변수를 설정합니다.

    export environmentName=ENVIRONMENT_NAME
    export project=PROJECT_ID
    export location=LOCATION
    export keyRing=KEY_RING
    export keyName=KEY_NAME
    export keyProject=${project} # Change if you are using a key from another project.
    export projectNumber=$(gcloud projects describe ${project} | grep projectNumber | cut -f2 -d" " | sed "s/'//g" )
    
  2. KMS에 CMEK 키를 만듭니다(아직 없는 경우).

    gcloud config set project ${project}
    gcloud kms keyrings create ${keyRing} --location=${location} --project ${keyProject}
    gcloud kms keys create ${keyName} --location=${location} \
    --keyring=${keyRing} --purpose=encryption --project ${keyProject}
    

    환경이 위치하게 될 동일한 리전에 CMEK 키를 만들어야 합니다.

  3. Composer 서비스 에이전트 서비스 계정에 권한을 부여합니다.

    gcloud kms keys add-iam-policy-binding ${keyName} \
      --location ${location} \
      --keyring ${keyRing} \
      --member=serviceAccount:$(gcloud beta services identity create \
      --service=composer.googleapis.com 2>&1 | awk '{print $4}') \
      --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
      --project ${keyProject}
    
  4. Artifact Registry 서비스 계정에 권한을 부여합니다.

    gcloud kms keys add-iam-policy-binding ${keyName} \
      --location ${location} \
      --keyring ${keyRing} \
      --member=serviceAccount:$(gcloud beta services \
    identity create --service=artifactregistry.googleapis.com 2>&1 | awk \
    '{print $4}') --role=roles/cloudkms.cryptoKeyEncrypterDecrypter
    
  5. GKE 서비스 계정에 권한을 부여합니다.

    gcloud kms keys add-iam-policy-binding ${keyName} \
      --location ${location} --keyring ${keyRing} \
      --member=serviceAccount:$(gcloud beta services identity create \
      --service=container.googleapis.com 2>&1 | awk '{print $4}') \
      --role=roles/cloudkms.cryptoKeyEncrypterDecrypter
    
  6. Pub/Sub 서비스 계정에 권한을 부여합니다.

    gcloud kms keys add-iam-policy-binding ${keyName} \
      --location ${location} \
      --keyring ${keyRing} \
      --member=serviceAccount:$(gcloud beta services identity create \
      --service=pubsub.googleapis.com 2>&1 | awk '{print $4}') \
      --role=roles/cloudkms.cryptoKeyEncrypterDecrypter
    
  7. Cloud Storage 서비스 계정에 권한을 부여합니다.

    gsutil kms authorize -k projects/${keyProject}/locations/${location}/keyRings/${keyRing}/cryptoKeys/${keyName}
    
  8. Compute Engine 서비스 계정에 권한을 부여합니다.

    gcloud kms keys add-iam-policy-binding ${keyName} \
      --location ${location} \
      --keyring ${keyRing} \
      --member=serviceAccount:service-${projectNumber}@compute-system.iam.gserviceaccount.com \
      --role=roles/cloudkms.cryptoKeyEncrypterDecrypter
    
  9. Cloud Composer 환경을 만듭니다.

    gcloud composer environments create ${environmentName} \
      --location=${location} \
      --kms-key projects/${keyProject}/locations/${location}/keyRings/${keyRing}/cryptoKeys/${keyName}
    

Cloud Composer 로그의 CMEK

로그에 민감한 데이터가 포함될 수 있다고 예상하는 경우 Cloud Composer 로그를 로그 라우터를 통해 CMEK 암호화 Cloud Storage 버킷으로 리디렉션하도록 선택할 수 있습니다. 이렇게 하면 로그가 Monitoring으로 전송되지 않습니다. Google Cloud 지원의 지원이 필요한 경우 Google 지원 엔지니어에게 Cloud Storage에 저장된 Cloud Composer 로그에 대한 액세스 권한을 부여해야 합니다.

gcloud

  1. 새 Cloud Storage 버킷(예: composer-logs-${location}-${environmentName})을 만듭니다.

    gsutil mb -l ${location} gs://${bucket_name}
    
  2. CMEK 키로 암호화합니다.

    gsutil kms encryption -k projects/${project}/locations/${location}/keyRings/${keyRing}/cryptoKeys/${keyName} gs://${bucket_name}
    
  3. 새 로그 싱크를 만듭니다.

    gcloud logging sinks create composer-log-sink-${environmentName} storage.googleapis.com/${bucket_name}
      --log-filter "resource.type=cloud_composer_environment AND resource.labels.environment_name=${envname} AND resource.labels.location=${location}"
    
  4. 이전 명령어 결과에 표시된 이 버킷의 서비스 계정에 적절한 역할을 부여합니다.

    gcloud projects add-iam-policy-binding ${project} --member="serviceAccount:${serviceAccountNumber}@gcp-sa-logging.iam.gserviceaccount.com" --role='roles/storage.objectCreator' --condition=None
    
  5. Monitoring에서 새 환경의 로그를 제외합니다.

    gcloud beta logging sinks update _Default --add-exclusion name=${environmentName}-exclusion,filter="resource.type=cloud_composer_environment AND resource.labels.environment_name=${envname} AND resource.labels.location=${location}"
    
  6. 로그 라우터에 조직 수준의 CMEK 암호화를 추가합니다.

    gcloud beta logging cmek-settings describe --organization=[ORGANIZATION_ID]
    gcloud kms keys add-iam-policy-binding \
      --project=[KMS_PROJECT_ID] \
      --member [SERVICE_ACCOUNT_ID]@gcp-sa-logging.iam.gserviceaccount.com \
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
      --location=[KMS_KEY_LOCATION] \
      --keyring=[KMS_KEY_RING] \
      [KMS_KEY]
    gcloud beta logging cmek-settings update \
      --organization=[ORGANIZATION_ID] --kms-key-name=[KMS_KEY_NAME]
    

Google 제공 암호화 키로 보호되는 Cloud Composer 데이터

Cloud Monitoring은 CMEK 암호화를 지원하지 않습니다. 즉, Cloud Composer 환경 및 DAG의 이름은 Google 암호화 키를 사용하여 암호화된 형식으로 Monitoring 데이터베이스에 저장됩니다.

또한 Cloud Composer 백엔드 데이터베이스는 Google 암호화 키를 사용하여 암호화된 형식으로 환경 메타데이터를 저장합니다.