고객 관리 암호화 키로 암호화 구성

Cloud Composer 1 | Cloud Composer 2

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

시작하기 전에

  • CMEK는 환경을 만들 때만 구성할 수 있습니다. 기존 환경에 CMEK를 사용 설정하는 것은 불가능합니다.

  • Cloud Composer는 외부 키 관리자에 저장된 키를 사용하여 CMEK 암호화를 지원합니다.

  • 환경이 위치한 리전과 동일한 리전에 CMEK 키를 만들어야 합니다. 멀티 리전이나 전역 키는 사용할 수 없습니다.

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

  • Artifact Registry API를 사용 설정하세요.

    Console

    Artifact Registry API 사용 설정

    API 사용 설정

    gcloud

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

    gcloud services enable artifactregistry.googleapis.com

CMEK 암호화로 보호되지 않는 사용자 정보

Cloud Monitoring에서는 CMEK 암호화를 지원하지 않습니다. 환경 이름과 DAG 이름은 Google 관리 암호화 키를 사용하여 암호화된 형식으로 Monitoring 데이터베이스에 저장됩니다.

Cloud Composer는 고객 관리 키가 아닌 Google 관리 키로 보호되는 다음 정보를 저장합니다.

  • 환경 이름
  • Airflow 구성 재정의
  • 환경 변수
  • 허용 IP 범위 설명
  • IP 범위
  • 라벨
  • Cloud Composer에서 저장한 일부 매개변수 이름에는 환경 이름의 하위 문자열이 포함될 수 있습니다.

환경에 고객 관리 암호화 키 사용

1단계: 고객 관리 암호화 키 만들기

대칭 암호화 키 만들기에 설명된 단계를 수행하여 환경이 있는 리전에 키를 만듭니다.

2단계: 서비스 에이전트에 역할 부여

Console

이 단계는 건너뜁니다. 환경에 키를 지정할 때 서비스 에이전트에 권한을 부여합니다.

gcloud

다음 서비스 에이전트에는 개발자 환경에 사용하는 키에 대한 Cloud KMS CryptoKey 암호화/복호화 역할이 있어야 합니다.

PROJECT_NUMBER프로젝트 번호로 바꿉니다.

서비스 에이전트 이름 서비스 계정 이메일 API 서비스 이름
Cloud Composer 서비스 에이전트 service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com composer.googleapis.com
Artifact Registry 서비스 에이전트 service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com artifactregistry.googleapis.com
Kubernetes Engine 서비스 에이전트 service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com container.googleapis.com
Pub/Sub 서비스 에이전트 service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com pubsub.googleapis.com
Compute Engine 서비스 에이전트 service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com compute.googleapis.com
Cloud Storage 서비스 에이전트 service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com gsutil kms authorize로 암호화/복호화 권한 부여
  1. (필요한 경우) 프로젝트에 이러한 서비스 계정 중 일부가 없는 경우 이는 이 서비스 ID가 아직 생성되지 않은 것입니다. 예를 들어 프로젝트에 아직 Cloud Composer 환경을 만들지 않았으면 이러한 상황이 발생할 수 있습니다.

    이러한 서비스 계정을 추가하려면 다음 명령어를 사용하여 나열된 서비스의 ID를 만듭니다.

    gcloud beta services identity create \
      --service=API_SERVICE_NAME
    

    API_SERVICE_NAME을 프로젝트에 서비스 계정이 없는 서비스의 API 서비스 이름으로 바꿉니다.

    예:

    gcloud beta services identity create \
      --service=composer.googleapis.com
    
  2. 서비스 에이전트에 권한을 부여합니다.

    1. Cloud Composer 서비스 에이전트에 역할을 부여합니다.

      gcloud kms keys add-iam-policy-binding KEY_NAME \
        --location KEY_LOCATION \
        --keyring KEY_RING_NAME \
        --member=serviceAccount:service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KEY_PROJECT_ID
      
    2. Artifact Registry 서비스 에이전트에 역할을 부여합니다.

      gcloud kms keys add-iam-policy-binding KEY_NAME \
        --location KEY_LOCATION \
        --keyring KEY_RING_NAME \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KEY_PROJECT_ID
      
    3. GKE 서비스 에이전트에 역할을 부여합니다.

      gcloud kms keys add-iam-policy-binding KEY_NAME \
        --location KEY_LOCATION \
        --keyring KEY_RING_NAME \
        --member=serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KEY_PROJECT_ID
      
    4. Pub/Sub 서비스 에이전트에 역할을 부여합니다.

      gcloud kms keys add-iam-policy-binding KEY_NAME \
        --location KEY_LOCATION \
        --keyring KEY_RING_NAME \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KEY_PROJECT_ID
      
    5. Compute Engine 서비스 에이전트에 역할을 부여합니다.

      gcloud kms keys add-iam-policy-binding KEY_NAME \
        --location KEY_LOCATION \
        --keyring KEY_RING_NAME \
        --member=serviceAccount:service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KEY_PROJECT_ID
      
    6. Cloud Storage 서비스 에이전트에 암호화/복호화 권한을 부여합니다. 커스텀 환경의 버킷을 사용하는 경우 이 단계를 건너뛸 수 있습니다.

      gsutil kms authorize -k \
        projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
      

    다음과 같이 바꿉니다.

    • PROJECT_ID프로젝트 ID로 바꿉니다.
    • KEY_PROJECT_ID를 고객 관리 키를 저장하는 프로젝트의 ID로 바꿉니다. 다른 프로젝트의 키를 사용하는 경우 이 값은 프로젝트 ID와 다릅니다. 같은 프로젝트의 키를 사용하는 경우 이 값은 프로젝트 ID입니다.
    • PROJECT_NUMBER프로젝트 번호로 바꿉니다.
    • KEY_LOCATION을 고객 관리 키 위치로 바꿉니다. 이 위치는 개발자 환경 위치와 동일해야 합니다.
    • KEY_NAME을 고객 관리 키 이름으로 바꿉니다.
    • KEY_RING_NAME을 고객 관리 키를 저장하는 키링으로 바꿉니다.

    이러한 값을 가져오려면 gcloud projects describe, gcloud kms keyrings list, gcloud kms keys describe 명령어를 실행하면 됩니다.

3단계: CMEK를 사용하여 환경 만들기

고객 관리 암호화 키를 만든 후에는 이를 사용하여 Cloud Composer 환경을 만들 수 있습니다.

Console

환경을 만들 때 다음을 수행합니다.

  1. 데이터 암호화 섹션에서 고객 관리 암호화 키(CMEK)를 선택합니다.

  2. 고객 관리 키 선택 드롭다운 목록에서 키를 선택합니다.

  3. 추가 설정이 필요한 경우 이를 알려주는 메시지가 표시됩니다. 이 경우 다음을 수행합니다.

    1. 마법사 열기를 클릭합니다.

    2. Cloud Composer에서 사용할 CMEK 키 준비 대화상자에서 키에 Cloud KMS CryptoKey 암호화/복호화 역할이 있어야 하는 서비스 에이전트 목록을 봅니다.

    3. 필요한 역할과 권한을 부여하려면 부여를 클릭합니다.

gcloud

--kms-key 인수는 개발자 환경의 고객 관리 암호화 키를 지정합니다.

환경 만들기에 대한 자세한 내용은 환경 만들기를 참조하세요. 예를 들어 개발자 환경에 다른 매개변수를 지정할 수 있습니다.

gcloud composer environments create ENVIRONMENT_NAME \
  --location LOCATION \
  --image-version IMAGE_VERSION \
  --kms-key projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME

다음과 같이 바꿉니다.

  • ENVIRONMENT_NAME을 환경 이름으로 바꿉니다.
  • IMAGE_VERSION을 Cloud Composer 이미지 이름으로 바꿉니다.
  • KEY_PROJECT_ID를 키가 있는 프로젝트의 ID로 바꿉니다. 다른 프로젝트의 키를 사용하는 경우 이 값은 프로젝트 ID와 다릅니다. 같은 프로젝트의 키를 사용하는 경우 이 값은 프로젝트 ID입니다.
  • LOCATION을 환경이 위치한 리전으로 바꿉니다.
  • KEY_LOCATION을 고객 관리 키 위치로 바꿉니다. 이 위치는 개발자 환경 위치와 동일해야 합니다.
  • KEY_NAME을 고객 관리 키 이름으로 바꿉니다.
  • KEY_RING_NAME을 고객 관리 키를 저장하는 키링으로 바꿉니다.

예:

gcloud composer environments create example-environment \
  --location us-central1 \
  --image-version composer-2.6.6-airflow-2.6.3 \
  --kms-key projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key

환경의 암호화 구성 보기

기존 환경의 암호화 구성을 볼 수 있습니다.

Console

  1. Google Cloud 콘솔에서 환경 페이지로 이동합니다.

    환경으로 이동

  2. 환경 목록에서 환경 이름을 클릭합니다. 환경 세부정보 페이지가 열립니다.

  3. 환경 구성 탭으로 이동합니다.

  4. 암호화에 대한 세부정보는 데이터 암호화 키 항목에 나열됩니다.

gcloud

암호화 구성을 보려면 다음 gcloud 명령어를 실행합니다.

gcloud composer environments describe \
  ENVIRONMENT_NAME \
  --location LOCATION \
  --format="value(config.encryptionConfig)"

다음과 같이 바꿉니다.

  • ENVIRONMENT_NAME을 환경 이름으로 바꿉니다.
  • LOCATION을 환경이 위치한 리전으로 바꿉니다.

예:

gcloud composer environments describe \
  example-environment \
  --location us-central1 \
  --format="value(config.encryptionConfig)"

Cloud Composer 로그에 CMEK 사용

Cloud Logging에서 CMEK 키로 로그 스토리지를 암호화할 수 있습니다. 표준 CMEK 절차를 사용하여 CMEK 키로 로그를 암호화하는 것이 좋습니다.

CMEK 키로 로그를 암호화하려면 Logging 스토리지 데이터를 보호하는 키 관리의 안내를 따르세요.

Cloud Composer 로그를 CMEK로 암호화된 Cloud Storage 버킷으로 리디렉션

로그에 민감한 정보가 포함될 것으로 예상되는 경우 로그 라우터를 사용하여 Cloud Composer 로그를 CMEK로 암호화된 Cloud Storage 버킷으로 리디렉션할 수 있습니다. 이렇게 하면 로그가 Monitoring으로 전송되지 않습니다.

클라우드 고객 관리의 지원이 필요한 경우 Google 지원 엔지니어에게 Cloud Storage에 저장된 Cloud Composer 로그에 대한 액세스 권한을 부여해야 할 수 있습니다.

gcloud

  1. 로그를 저장할 새 Cloud Storage 버킷을 만듭니다.

    gsutil mb -l LOCATION gs://BUCKET_NAME
    

    다음과 같이 바꿉니다.

    • LOCATION을 환경이 위치한 리전으로 바꿉니다.
    • BUCKET_NAME을 버킷 이름으로 바꿉니다.

    예:

    gsutil mb -l us-central1 gs://composer-logs-us-central1-example-environment
    
  2. CMEK 키로 버킷을 암호화합니다.

    gsutil kms encryption \
      -k projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME \
      gs://BUCKET_NAME
    

    다음과 같이 바꿉니다.

    • KEY_PROJECT_ID를 키가 있는 프로젝트의 ID로 바꿉니다. 다른 프로젝트의 키를 사용하는 경우 이 값은 프로젝트 ID와 다릅니다. 같은 프로젝트의 키를 사용하는 경우 이 값은 프로젝트 ID입니다.
    • KEY_LOCATION을 고객 관리 키 위치로 바꿉니다. 이 위치는 개발자 환경 위치와 동일해야 합니다.
    • KEY_RING_NAME을 고객 관리 키를 저장하는 키링으로 바꿉니다.
    • KEY_NAME을 고객 관리 키 이름으로 바꿉니다.
    • BUCKET_NAME을 버킷 이름으로 대체합니다.

    예:

    gsutil kms encryption \
      -k projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key \
      gs://composer-logs-us-central1-example-environment
    
  3. 새 로그 싱크를 만듭니다.

    gcloud logging sinks create \
    composer-log-sink-ENVIRONMENT_NAME \
    storage.googleapis.com/BUCKET_NAME \
    --log-filter "resource.type=cloud_composer_environment AND resource.labels.environment_name=ENVIRONMENT_NAME AND resource.labels.location=LOCATION"
    

    다음과 같이 바꿉니다.

    • ENVIRONMENT_NAME을 환경 이름으로 바꿉니다.
    • LOCATION을 환경이 위치한 리전으로 바꿉니다.
    • BUCKET_NAME을 버킷 이름으로 대체합니다.

    예:

    gcloud logging sinks create \
    composer-log-sink-example-environment \
    storage.googleapis.com/composer-logs-us-central1-example-environment \
    --log-filter "resource.type=cloud_composer_environment AND resource.labels.environment_name=example-environment AND resource.labels.location=us-central1"
    
  4. 이 버킷의 서비스 계정에 스토리지 객체 생성자 역할을 부여합니다. 앞의 명령어 결과에 서비스 계정이 표시됩니다.

    gcloud projects add-iam-policy-binding \
      PROJECT_ID \
      --member="serviceAccount:LOGGING_SERVICE_AGENT" \
      --role="roles/storage.objectCreator" \
      --condition=None
    

    다음과 같이 바꿉니다.

    • PROJECT_ID프로젝트 ID로 바꿉니다.
    • LOGGING_SERVICE_AGENT를 이 버킷의 Logging 서비스 에이전트 계정으로 바꿉니다. 이전 단계에서 이 계정 이름을 가져옵니다.

    예:

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

    gcloud beta logging sinks update _Default \
      --add-exclusion name=ENVIRONMENT_NAME-exclusion,filter="resource.type=cloud_composer_environment AND resource.labels.environment_name=ENVIRONMENT_NAME AND resource.labels.location=LOCATION"
    

    다음과 같이 바꿉니다.

    • ENVIRONMENT_NAME을 환경 이름으로 바꿉니다.
    • LOCATION을 환경이 위치한 리전으로 바꿉니다.

    예:

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

    gcloud logging cmek-settings describe \
      --organization=ORGANIZATION_ID
    
    gcloud kms keys add-iam-policy-binding \
          --project=KEY_PROJECT_ID \
          --member LOGGING_SERVICE_AGENT \
          --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
          --location=KEY_LOCATION \
          --keyring=KEY_RING_NAME \
          KEY_NAME
    
    gcloud logging cmek-settings update \
      --organization=ORGANIZATION_ID \
      --kms-project=KEY_PROJECT_ID \
      --kms-keyring=KEY_RING_NAME \
      --kms-location=KEY_LOCATION \
      --kms-key-name=KEY_NAME
    

    다음과 같이 바꿉니다.

    • ORGANIZATION_ID조직 ID입니다.
    • KEY_PROJECT_ID를 키가 있는 프로젝트의 ID로 바꿉니다. 다른 프로젝트의 키를 사용하는 경우 이 값은 프로젝트 ID와 다릅니다. 같은 프로젝트의 키를 사용하는 경우 이 값은 프로젝트 ID입니다.
    • KEY_RING_NAME을 고객 관리 키를 저장하는 키링으로 바꿉니다.
    • KEY_LOCATION을 고객 관리 키 위치로 바꿉니다. 이 위치는 개발자 환경 위치와 동일해야 합니다.
    • KEY_NAME을 고객 관리 키 이름으로 바꿉니다.

Cloud Composer의 CMEK 키 순환

또한 CMEK 키를 사용하여 사용자 환경에 암호화를 구성한 후 KMS 문서에 설명된 대로 정기적으로 이러한 키를 순환해야 합니다.

CMEK 키를 순환해도 이전 키 버전에서 암호화된 데이터가 새 키 버전으로 자동으로 다시 암호화되지는 않습니다. 데이터 재암호화에 대한 자세한 내용은 여기를 참조하세요. 특히 다음과 같은 대상에 적용됩니다.

  • 환경 버킷에 저장된 객체

  • Airflow 메타데이터 데이터베이스에 저장된 데이터

  • Artifact Registry 저장소에 저장된 컨테이너 이미지

그리고 Cloud Composer 환경 내에서 CMEK로 암호화된 다른 모든 데이터 객체가 해당합니다.

다음 단계