顧客管理の暗号鍵を使用して暗号化を構成する

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.

    Enable the 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 を使用して暗号化 / 復号の権限を付与する
  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 サービス エージェントに暗号化 / 復号の権限を付与します。

      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 describegcloud kms keyrings listgcloud kms keys describe コマンドを実行します。

ステップ 3. CMEK を使用して環境を作成する

顧客管理の暗号鍵を作成したら、作成した鍵を使用して Cloud Composer 環境を作成できます。

コンソール

環境を作成する場合:

  1. [ネットワーキング、Airflow 構成のオーバーライド、その他の機能] セクションを展開します。[データの暗号化] セクションで、[顧客管理の暗号鍵(CMEK)] を選択します。

  2. [顧客管理の暗号鍵を選択] プルダウン リストで、鍵を選択します。

  3. 追加の設定が必要な場合は、通知するメッセージが表示されます。この場合は、次のとおりです。

    1. [ウィザードを開く] をクリックします。

    2. [Cloud Composer で使用する CMEK 鍵の準備] ダイアログで、Cloud KMS 暗号鍵の暗号化/復号のロールを持っている必要があるサービス エージェントのリストを表示します。

    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-1.20.12-airflow-1.10.15 \
  --kms-key projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key

環境の暗号化構成を表示する

既存の環境の暗号化構成を表示できます。

コンソール

  1. Google Cloud Console で [環境] ページに移動します。

    [環境] に移動

  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 ストレージ データを保護する鍵を管理するで概説している手順に沿って操作してください。

CMEK で暗号化された Cloud Storage バケットに Cloud Composer ログをリダイレクトする

ログにセンシティブ データが含まれる可能性がある場合に、ログルーターを使用して CMEK で暗号化された Cloud Storage バケットに Cloud Composer ログをリダイレクトすることができます。無効にすると、ログが Monitoring に送信されないようにできます。

Cloud カスタマーケアによるサポートが必要な場合は、Google サポート エンジニアに Cloud Storage に保存されている Cloud Composer ログへのアクセス権を付与する必要があります。

gcloud

  1. ログを保存する新しい 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
    
  2. 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
    
  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. このバケットのサービス アカウントに 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
    
  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 で暗号化された他のすべてのデータ オブジェクト。

次のステップ