Mengonfigurasi enkripsi dengan kunci enkripsi yang dikelola pelanggan

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

Halaman ini menjelaskan cara menggunakan Kunci Enkripsi yang Dikelola Pelanggan (CMEK) untuk melindungi lingkungan Cloud Composer. Kunci enkripsi yang dikelola pelanggan digunakan untuk mengenkripsi/mendekripsi data pengguna di lingkungan.

Sebelum memulai

  • Anda hanya dapat mengonfigurasi CMEK saat membuat lingkungan. Anda tidak dapat mengaktifkan CMEK untuk lingkungan yang ada.

  • Cloud Composer mendukung enkripsi CMEK menggunakan kunci yang disimpan di External Key Manager.

  • Anda harus membuat kunci CMEK di region yang sama dengan tempat lingkungan Anda berada. Anda tidak dapat menggunakan kunci multi-regional atau global.

  • Jika ingin lingkungan Anda berjalan di dalam perimeter Kontrol Layanan VPC, Anda harus menambahkan Cloud Key Management Service API dan Artifact Registry API ke perimeter.

  • Aktifkan Artifact Registry API.

    Konsol

    Enable the Artifact Registry API.

    Enable the API

    gcloud

    Enable the Artifact Registry API:

    gcloud services enable artifactregistry.googleapis.com

Informasi pengguna tidak dilindungi dengan enkripsi CMEK

Cloud Monitoring tidak mendukung enkripsi CMEK. Nama lingkungan dan nama DAG Anda disimpan dalam database Monitoring dalam bentuk terenkripsi menggunakan kunci milik dan dikelola Google.

Cloud Composer menyimpan informasi berikut yang dilindungi dengan kunci milik dan dikelola Google, bukan kunci yang dikelola pelanggan:

  • Nama lingkungan
  • Penggantian konfigurasi Airflow
  • Variabel lingkungan
  • Deskripsi rentang IP yang diizinkan
  • Rentang IP
  • Label
  • Nama beberapa parameter yang disimpan oleh Cloud Composer dapat menyertakan sub-string nama lingkungan.

Menggunakan kunci enkripsi yang dikelola pelanggan untuk lingkungan Anda

Langkah 1. Membuat kunci enkripsi yang dikelola pelanggan

Ikuti langkah-langkah yang diuraikan dalam Membuat kunci enkripsi simetris untuk membuat kunci di region tempat lingkungan Anda berada.

Langkah 2. Memberikan peran ke agen layanan

Konsol

Lewati langkah ini. Anda memberikan izin ke agen layanan saat menentukan kunci untuk lingkungan Anda.

gcloud

Agen layanan berikut harus memiliki peran Pengenkripsi/Pendekripsi CryptoKey Cloud KMS pada kunci yang Anda gunakan untuk lingkungan Anda.

Ganti PROJECT_NUMBER dengan nomor project Anda.

Nama agen layanan Email akun layanan Nama layanan API
Cloud Composer Service Agent service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com composer.googleapis.com
Agen Layanan Artifact Registry service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com artifactregistry.googleapis.com
Kubernetes Engine Service Agent service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com container.googleapis.com
Pub/Sub Service Agent service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com pubsub.googleapis.com
Agen Layanan Compute Engine service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com compute.googleapis.com
Cloud Storage Service Agent service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com Memberikan izin enkripsi/dekripsi dengan gcloud storage service-agent --authorize-cmek
  1. (Jika diperlukan) Jika beberapa akun layanan ini tidak ada dalam project Anda, berarti identitas untuk layanan ini belum dibuat. Hal ini dapat terjadi, misalnya, jika Anda belum membuat lingkungan Cloud Composer di project.

    Untuk menambahkan akun layanan ini, buat identitas untuk layanan yang tercantum dengan perintah berikut:

    gcloud beta services identity create \
      --service=API_SERVICE_NAME
    

    Ganti API_SERVICE_NAME dengan nama layanan API layanan yang tidak memiliki akun layanan di project Anda.

    Contoh:

    gcloud beta services identity create \
      --service=composer.googleapis.com
    
  2. Berikan izin ke agen layanan:

    1. Berikan peran ke Agen Layanan 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. Berikan peran ke Agen Layanan 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. Berikan peran ke Agen Layanan 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. Berikan peran ke Agen Layanan 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. Berikan peran ke Agen Layanan 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. Berikan izin enkripsi/dekripsi ke Agen Layanan Cloud Storage. Anda dapat melewati langkah ini jika menggunakan bucket lingkungan kustom.

      gcloud storage service-agent \
        --authorize-cmek=projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
      

    Ganti:

    • PROJECT_ID dengan ID project Anda.
    • KEY_PROJECT_ID dengan ID project yang menyimpan kunci yang dikelola pelanggan Anda. Jika Anda menggunakan kunci dari project lain, nilai ini akan berbeda dengan ID project Anda. Jika Anda menggunakan kunci dari project yang sama, nilai ini adalah ID project Anda.
    • PROJECT_NUMBER dengan nomor project Anda.
    • KEY_LOCATION dengan lokasi kunci yang dikelola pelanggan. Lokasi ini harus sama dengan lokasi lingkungan Anda.
    • KEY_NAME dengan nama kunci yang dikelola pelanggan.
    • KEY_RING_NAME dengan ring kunci yang menyimpan kunci yang dikelola pelanggan.

    Untuk mendapatkan nilai ini, Anda dapat menjalankan perintah gcloud projects describe, gcloud kms keyrings list, dan gcloud kms keys describe.

Langkah 3. Membuat lingkungan dengan CMEK

Setelah membuat kunci enkripsi yang dikelola pelanggan, Anda dapat menggunakannya untuk membuat lingkungan Cloud Composer.

Konsol

Saat Anda membuat lingkungan:

  1. Di bagian Data encryption, pilih Customer-managed encryption key (CMEK).

  2. Di menu drop-down Pilih kunci yang dikelola pelanggan, pilih kunci Anda.

  3. Jika diperlukan penyiapan tambahan, pesan akan muncul untuk memberi tahu Anda. Dalam hal ini:

    1. Klik Buka wizard.

    2. Di dialog Menyiapkan kunci CMEK untuk digunakan di Cloud Composer, lihat daftar agen layanan yang harus memiliki peran Pengenkripsi/Pendekripsi CryptoKey Cloud KMS pada kunci.

    3. Untuk memberikan peran dan izin yang diperlukan, klik Berikan.

gcloud

Argumen --kms-key menentukan kunci enkripsi yang dikelola pelanggan untuk lingkungan Anda.

Untuk mengetahui informasi selengkapnya tentang cara membuat lingkungan, lihat Membuat lingkungan. Misalnya, Anda mungkin ingin menentukan parameter lain untuk lingkungan Anda.

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

Ganti:

  • ENVIRONMENT_NAME dengan nama lingkungan.
  • IMAGE_VERSION dengan nama image Cloud Composer.
  • KEY_PROJECT_ID dengan ID project tempat kunci berada. Jika Anda menggunakan kunci dari project lain, nilai ini berbeda dengan project ID Anda. Jika Anda menggunakan kunci dari project yang sama, nilai ini adalah ID project Anda.
  • LOCATION dengan region tempat lingkungan tersebut berada.
  • KEY_LOCATION dengan lokasi kunci yang dikelola pelanggan Anda. Lokasi ini harus sama dengan lokasi lingkungan Anda.
  • KEY_NAME dengan nama kunci yang dikelola pelanggan.
  • KEY_RING_NAME dengan ring kunci yang menyimpan kunci yang dikelola pelanggan.

Contoh:

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

Melihat konfigurasi enkripsi lingkungan

Anda dapat melihat konfigurasi enkripsi untuk lingkungan yang ada:

Konsol

  1. Di konsol Google Cloud, buka halaman Environments.

    Buka Lingkungan

  2. Di daftar lingkungan, klik nama lingkungan Anda. Halaman Environment details akan terbuka.

  3. Buka tab Konfigurasi lingkungan.

  4. Detail tentang enkripsi tercantum dalam item Kunci enkripsi data.

gcloud

Jalankan perintah gcloud berikut untuk melihat konfigurasi enkripsi

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

Ganti:

  • ENVIRONMENT_NAME dengan nama lingkungan.
  • LOCATION dengan region tempat lingkungan tersebut berada.

Contoh:

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

Menggunakan CMEK untuk log Cloud Composer

Cloud Logging mendukung enkripsi penyimpanan Log dengan kunci CMEK. Sebaiknya gunakan prosedur CMEK standar untuk mengenkripsi log dengan kunci CMEK.

Untuk mengenkripsi log dengan kunci CMEK, ikuti petunjuk yang diuraikan dalam Mengelola kunci yang melindungi data penyimpanan Logging.

Mengalihkan log Cloud Composer ke bucket Cloud Storage yang dienkripsi CMEK

Jika log Anda berisi data sensitif, sebaiknya arahkan log Cloud Composer ke bucket Cloud Storage yang dienkripsi CMEK menggunakan Log Router. Tindakan ini mencegah log Anda dikirim ke Monitoring.

Jika memerlukan dukungan dari Cloud Customer Care, Anda mungkin perlu memberikan akses ke log Cloud Composer yang disimpan di Cloud Storage kepada engineer dukungan Google.

gcloud

  1. Buat bucket Cloud Storage baru untuk menyimpan log.

    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION
    

    Ganti:

    • LOCATION dengan region tempat lingkungan tersebut berada.
    • BUCKET_NAME dengan nama untuk bucket.

    Contoh:

    gcloud storage buckets create gs://composer-logs-us-central1-example-environment --location=us-central1
    
  2. Enkripsi bucket dengan kunci CMEK Anda.

    gcloud storage buckets update gs://BUCKET_NAME \
      --default-encryption-key=projects/KEY_PROJECT_ID/locations/KEY_LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    

    Ganti:

    • KEY_PROJECT_ID dengan ID project tempat kunci berada. Jika Anda menggunakan kunci dari project lain, nilai ini berbeda dengan ID project Anda. Jika Anda menggunakan kunci dari project yang sama, nilai ini adalah ID project Anda.
    • KEY_LOCATION dengan lokasi kunci yang dikelola pelanggan Anda. Lokasi ini harus sama dengan lokasi lingkungan Anda.
    • KEY_RING_NAME dengan ring kunci yang menyimpan kunci yang dikelola pelanggan.
    • KEY_NAME dengan nama kunci yang dikelola pelanggan.
    • BUCKET_NAME dengan nama bucket.

    Contoh:

    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. Buat log sink baru.

    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"
    

    Ganti:

    • ENVIRONMENT_NAME dengan nama lingkungan.
    • LOCATION dengan region tempat lingkungan tersebut berada.
    • BUCKET_NAME dengan nama bucket.

    Contoh:

    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. Berikan peran Storage Object Creator ke akun layanan untuk bucket ini. Akun layanan ditampilkan dalam hasil perintah sebelumnya).

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

    Ganti:

    • PROJECT_ID dengan Project ID.
    • LOGGING_SERVICE_AGENT dengan akun agen layanan logging untuk bucket ini. Nama akun ini diperoleh di langkah sebelumnya.

    Contoh:

    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. Kecualikan log untuk lingkungan baru Anda dari Pemantauan.

    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"
    

    Ganti:

    • ENVIRONMENT_NAME dengan nama lingkungan.
    • LOCATION dengan region tempat lingkungan tersebut berada.

    Contoh:

    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. Menambahkan enkripsi CMEK tingkat organisasi ke Log Router.

    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
    

    Ganti:

    • ORGANIZATION_ID dengan ID organisasi Anda.
    • KEY_PROJECT_ID dengan ID project tempat kunci berada. Jika Anda menggunakan kunci dari project lain, nilai ini berbeda dengan ID project Anda. Jika Anda menggunakan kunci dari project yang sama, nilai ini adalah ID project Anda.
    • KEY_RING_NAME dengan ring kunci yang menyimpan kunci yang dikelola pelanggan.
    • KEY_LOCATION dengan lokasi kunci yang dikelola pelanggan Anda. Lokasi ini harus sama dengan lokasi lingkungan Anda.
    • KEY_NAME dengan nama kunci yang dikelola pelanggan.

Rotasi kunci CMEK untuk Cloud Composer

Setelah mengonfigurasi enkripsi di lingkungan menggunakan kunci CMEK, Anda juga dapat mempertimbangkan untuk merotasi kunci ini secara berkala seperti yang dijelaskan dalam dokumentasi KMS.

Saat Anda merotasi kunci CMEK, data yang dienkripsi dengan versi kunci sebelumnya tidak otomatis dienkripsi ulang dengan versi kunci baru. Untuk mengetahui informasi selengkapnya, lihat Mengenkripsi ulang data.

Secara khusus, hal ini berlaku untuk:

  • Objek yang disimpan di bucket lingkungan.
  • Cata yang disimpan di database Airflow.
  • Image container yang disimpan di repositori Artifact Registry.
  • Semua objek data lainnya yang dienkripsi dengan CMEK di lingkungan Cloud Composer.

Langkah selanjutnya