Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
이 페이지에서는 고객 관리 암호화 키(CMEK)를 사용하여 Cloud Composer 환경을 보호하는 방법을 설명합니다. 고객 관리 암호화 키는 환경에서 사용자 데이터를 암호화/복호화하는 데 사용됩니다.
시작하기 전에
CMEK는 환경을 만들 때만 구성할 수 있습니다. 기존 환경에 CMEK를 사용 설정하는 것은 불가능합니다.
Cloud Composer는 외부 키 관리자에 저장된 키를 사용하여 CMEK 암호화를 지원합니다.
환경이 위치한 리전과 동일한 리전에 CMEK 키를 만들어야 합니다. 멀티 리전이나 전역 키는 사용할 수 없습니다.
환경을 VPC 서비스 제어 경계 내에서 실행하려면 Cloud Key Management Service API 및 Artifact Registry API를 경계에 추가해야 합니다.
Artifact Registry API를 사용 설정하세요.
콘솔
Enable the Artifact Registry API.
gcloud
Enable the Artifact Registry API:
gcloud services enable artifactregistry.googleapis.com
CMEK 암호화로 보호되지 않는 사용자 정보
Cloud Monitoring에서는 CMEK 암호화를 지원하지 않습니다. 환경 이름과 DAG 이름은 Google 소유 및 Google 관리 키를 사용하여 암호화된 형식으로 Monitoring 데이터베이스에 저장됩니다.
Cloud Composer는 고객 관리 키가 아닌 Google 소유 및 Google 관리 키로 보호되는 다음 정보를 저장합니다.
- 환경 이름
- Airflow 구성 재정의
- 환경 변수
- 허용 IP 범위 설명
- IP 범위
- 라벨
- Cloud Composer에서 저장한 일부 매개변수 이름에는 환경 이름의 하위 문자열이 포함될 수 있습니다.
환경에 고객 관리 암호화 키 사용
1단계: 고객 관리 암호화 키 만들기
대칭 암호화 키 만들기에 설명된 단계를 수행하여 환경이 있는 리전에 키를 만듭니다.
2단계: 서비스 에이전트에 역할 부여
콘솔
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 | gcloud storage service-agent --authorize-cmek 로 암호화/복호화 권한 부여 |
(필요한 경우) 프로젝트에 이러한 서비스 계정 중 일부가 없는 경우 이는 이 서비스 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
서비스 에이전트에 권한을 부여합니다.
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
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
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
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
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
Cloud Storage 서비스 에이전트에 암호화/복호화 권한을 부여합니다.
gcloud storage service-agent \ --authorize-cmek=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 환경을 만들 수 있습니다.
콘솔
환경을 만들 때 다음을 수행합니다.
네트워킹, Airflow 구성 재정의, 추가 기능 섹션을 펼칩니다. 데이터 암호화 섹션에서 고객 관리 암호화 키(CMEK)를 선택합니다.
고객 관리 키 선택 드롭다운 목록에서 키를 선택합니다.
추가 설정이 필요한 경우 이를 알려주는 메시지가 표시됩니다. 이 경우 다음을 수행합니다.
마법사 열기를 클릭합니다.
Cloud Composer에서 사용할 CMEK 키 준비 대화상자에서 키에 Cloud KMS CryptoKey 암호화/복호화 역할이 있어야 하는 서비스 에이전트 목록을 봅니다.
필요한 역할과 권한을 부여하려면 부여를 클릭합니다.
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-1.20.12-airflow-1.10.15 \
--kms-key projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key
환경의 암호화 구성 보기
기존 환경의 암호화 구성을 볼 수 있습니다.
콘솔
Google Cloud 콘솔에서 환경 페이지로 이동합니다.
환경 목록에서 환경 이름을 클릭합니다. 환경 세부정보 페이지가 열립니다.
환경 구성 탭으로 이동합니다.
암호화에 대한 세부정보는 데이터 암호화 키 항목에 나열됩니다.
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으로 전송되지 않습니다.
Cloud Customer Care의 지원이 필요한 경우 Google 지원 엔지니어에게 Cloud Storage에 저장된 Cloud Composer 로그에 대한 액세스 권한을 부여해야 할 수 있습니다.
gcloud
로그를 저장할 새 Cloud Storage 버킷을 만듭니다.
gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION
다음과 같이 바꿉니다.
LOCATION
을 환경이 위치한 리전으로 바꿉니다.BUCKET_NAME
을 버킷 이름으로 바꿉니다.
예를 들면 다음과 같습니다.
gcloud storage buckets create gs://composer-logs-us-central1-example-environment --location=us-central1
CMEK 키로 버킷을 암호화합니다.
gcloud storage buckets update gs://BUCKET_NAME \ --default-encryption-key=projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
다음과 같이 바꿉니다.
KEY_PROJECT_ID
를 키가 있는 프로젝트의 ID로 바꿉니다. 다른 프로젝트의 키를 사용하는 경우 이 값은 프로젝트 ID와 다릅니다. 같은 프로젝트의 키를 사용하는 경우 이 값은 프로젝트 ID입니다.KEY_LOCATION
을 고객 관리 키 위치로 바꿉니다. 이 위치는 개발자 환경 위치와 동일해야 합니다.KEY_RING_NAME
을 고객 관리 키를 저장하는 키링으로 바꿉니다.KEY_NAME
을 고객 관리 키 이름으로 바꿉니다.BUCKET_NAME
을 버킷 이름으로 대체합니다.
예를 들면 다음과 같습니다.
gcloud storage buckets update gs://composer-logs-us-central1-example-environment \ --default-encryption-key=projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key
새 로그 싱크를 만듭니다.
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"
이 버킷의 서비스 계정에 스토리지 객체 생성자 역할을 부여합니다. 앞의 명령어 결과에 서비스 계정이 표시됩니다.
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
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"
로그 라우터에 조직 수준의 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로 암호화된 다른 모든 데이터 객체가 해당합니다.