Mengonfigurasi enkripsi dengan kunci enkripsi yang dikelola pelanggan

Cloud Composer 1 | Cloud Composer 2

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. CMEK tidak dapat diaktifkan untuk lingkungan yang sudah ada.

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

  • Anda harus membuat kunci CMEK di region yang sama dengan lokasi lingkungan Anda. 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 tersebut.

  • 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 di database Monitoring dalam bentuk terenkripsi menggunakan kunci enkripsi yang dikelola Google.

Cloud Composer menyimpan informasi berikut yang dilindungi dengan kunci yang 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 kepada agen layanan saat menentukan kunci untuk lingkungan Anda.

gcloud

Agen layanan berikut harus memiliki peran Encrypter/Decrypter Cloud KMS Encrypter pada kunci yang digunakan untuk lingkungan Anda.

Ganti PROJECT_NUMBER dengan nomor project Anda.

Nama agen layanan Email akun layanan Nama layanan API
Agen Layanan Cloud Composer 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
Agen Layanan Pub/Sub 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
Agen Layanan Cloud Storage service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com Memberikan izin enkripsi/dekripsi dengan gsutil kms authorize
  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 Anda.

    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 Artifact Registry Service Agent:

      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. Memberikan izin enkripsi/dekripsi ke Agen Layanan Cloud Storage.

      gsutil kms authorize -k \
        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 Anda. Lokasi ini harus sama dengan lokasi lingkungan Anda.
    • KEY_NAME dengan nama kunci yang dikelola pelanggan Anda.
    • KEY_RING_NAME dengan keyring yang menyimpan kunci yang dikelola pelanggan Anda.

    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. Luaskan bagian Networking, penggantian konfigurasi Airflow, dan fitur tambahan. Di bagian Enkripsi data, pilih Kunci enkripsi yang dikelola pelanggan (CMEK).

  2. Pada menu drop-down Select a customer-managed key, pilih kunci Anda.

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

    1. Klik Open wizard.

    2. Dalam dialog Prepare CMEK key for usage in Cloud Composer, lihat daftar service agent yang harus memiliki peran Cloud KMS CryptoKey Encrypter/Decrypter pada kunci tersebut.

    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 akan berbeda dengan ID project Anda. Jika Anda menggunakan kunci dari project yang sama, nilai ini adalah ID project Anda.
  • LOCATION dengan region tempat lingkungan 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 Anda.
  • KEY_RING_NAME dengan keyring yang menyimpan kunci yang dikelola pelanggan Anda.

Contoh:

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

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. Pada daftar lingkungan, klik nama lingkungan Anda. Halaman Detail lingkungan akan terbuka.

  3. Buka tab Konfigurasi lingkungan.

  4. Detail tentang enkripsi tercantum di 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 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 memperkirakan log berisi data sensitif, Anda dapat mengalihkan log Cloud Composer ke bucket Cloud Storage yang dienkripsi CMEK menggunakan Router Log. Tindakan ini akan mencegah log Anda dikirim ke Monitoring.

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

gcloud

  1. Membuat bucket Cloud Storage baru untuk menyimpan log.

    gsutil mb -l LOCATION gs://BUCKET_NAME
    

    Ganti:

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

    Contoh:

    gsutil mb -l us-central1 gs://composer-logs-us-central1-example-environment
    
  2. Enkripsi bucket dengan kunci CMEK Anda.

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

    Ganti:

    • KEY_PROJECT_ID dengan ID project tempat kunci berada. 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.
    • KEY_LOCATION dengan lokasi kunci yang dikelola pelanggan Anda. Lokasi ini harus sama dengan lokasi lingkungan Anda.
    • KEY_RING_NAME dengan keyring yang menyimpan kunci yang dikelola pelanggan Anda.
    • KEY_NAME dengan nama kunci yang dikelola pelanggan Anda.
    • BUCKET_NAME dengan nama bucket.

    Contoh:

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

    Ganti:

    • ENVIRONMENT_NAME dengan nama lingkungan.
    • LOCATION dengan region tempat lingkungan 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 Router Log.

    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 akan berbeda dengan ID project Anda. Jika Anda menggunakan kunci dari project yang sama, nilai ini adalah ID project Anda.
    • KEY_RING_NAME dengan keyring yang menyimpan kunci yang dikelola pelanggan Anda.
    • 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 Anda.

Rotasi kunci CMEK untuk Cloud Composer

Setelah mengonfigurasi enkripsi di lingkungan menggunakan kunci CMEK, Anda juga harus 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 secara otomatis akan dienkripsi ulang dengan versi kunci baru. Di sini Anda dapat mempelajari lebih lanjut cara mengenkripsi ulang data. Secara khusus, hal ini berlaku untuk:

  • objek yang disimpan di bucket lingkungan

  • data yang tersimpan di Database Metadata Airflow

  • image container yang disimpan di repositori Artifact Registry

dan semua objek data lainnya yang dienkripsi dengan CMEK dalam lingkungan Cloud Composer.

Langkah selanjutnya