Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
このページでは、顧客管理の暗号鍵(CMEK)を使用して Cloud Composer 環境を保護する方法について説明します。顧客管理の暗号鍵は、環境内のユーザーデータを暗号化 / 復号するために使用されます。
始める前に
CMEK を構成できるのは、環境を作成するときのみです。既存の環境で CMEK を有効にすることはできません。
Cloud Composer は、外部鍵マネージャーに保存されている鍵を使用した CMEK 暗号化をサポートしています。
環境が配置されているのと同じリージョンに CMEK 鍵を作成する必要があります。マルチリージョンキーまたはグローバルキーは使用できません。
VPC Service Controls の境界内で環境を実行する場合は、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 Encrypter/Decrypter のロールが必要です。
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 暗号鍵の暗号化/復号のロールを持っている必要があるサービス エージェントのリストを表示します。
必要なロールと権限を付与するには、[付与] をクリックします。
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 Console で [環境] ページに移動します。
環境のリストで、ご利用の環境の名前をクリックします。[環境の詳細] ページが開きます。
[環境の設定] タブに移動します。
暗号化の詳細は、[データ暗号鍵] アイテムに一覧表示されます。
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 ストレージ データを保護する鍵を管理するで概説している手順に沿って操作してください。
CMEK で暗号化された Cloud Storage バケットに Cloud Composer ログをリダイレクトする
ログにセンシティブ データが含まれる可能性がある場合に、ログルーターを使用して CMEK で暗号化された Cloud Storage バケットに Cloud Composer ログをリダイレクトすることができます。無効にすると、ログが Monitoring に送信されないようにできます。
Cloud カスタマーケアによるサポートが必要な場合は、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"
このバケットのサービス アカウントに Storage オブジェクト作成者ロールを付与します。サービス アカウントは前のコマンドの結果に表示されます。
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 で暗号化された他のすべてのデータ オブジェクト。