Mengonfigurasi enkripsi dengan kunci enkripsi yang dikelola pelanggan

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

Halaman ini menjelaskan cara menggunakan Kunci Enkripsi yang Dikelola Pelanggan (CMEK) untuk melindungi lingkungan Cloud Composer.

Data yang dilindungi dengan enkripsi CMEK

Cloud Composer melindungi data berikut dengan enkripsi CMEK:

  • Konten dan skema database Airflow
  • Log tugas Airflow dan lingkungan di Cloud Logging
  • Isi bucket lingkungan
  • Secret yang disimpan di cluster lingkungan
  • Persistent disk yang digunakan oleh antrean tugas
  • Image container komponen lingkungan yang disimpan di repositori Artifact Registry

Untuk mengetahui detail spesifik tentang cara data dienkripsi, lihat:

Data yang 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 Google-owned and Google-managed encryption keys.

Cloud Composer menyimpan informasi berikut yang dilindungi dengan Google-owned and Google-managed encryption keys, 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.

Rotasi kunci CMEK untuk Cloud Composer

Setelah mengonfigurasi enkripsi di lingkungan Anda menggunakan kunci CMEK, Anda mungkin juga ingin mempertimbangkan untuk merotasi kunci ini secara rutin 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 Enkripsi ulang data.

Secara khusus, hal ini berlaku untuk:

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

Menggunakan kunci enkripsi yang dikelola pelanggan untuk lingkungan Anda

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.

  • 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

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 Anda menentukan kunci untuk lingkungan Anda.

gcloud

Agen layanan berikut harus memiliki peran Cloud KMS CryptoKey Encrypter/Decrypter 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
Agen Layanan Cloud Storage 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 di 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 dari layanan yang tidak memiliki akun layanan di project Anda.

    Contoh:

    gcloud beta services identity create \
      --service=composer.googleapis.com
    
  2. Memberikan izin kepada 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 kepada Agen Layanan Cloud Storage.

      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 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, Airflow config overrides, and additional features. Di bagian Enkripsi data, pilih Kunci Cloud Key Management Service.

  2. Di menu drop-down Pilih kunci Cloud Key Management Service, pilih kunci Anda.

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

    1. Klik Buka wizard.

    2. Dalam dialog Siapkan 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 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-1.20.12-airflow-1.10.15 \
  --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 Google Cloud console, buka halaman Environments.

    Buka Lingkungan

  2. Dalam 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 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.

Mengarahkan ulang log Cloud Composer ke bucket Cloud Storage yang dienkripsi CMEK

Jika Anda memperkirakan log Anda berisi data sensitif, Anda mungkin ingin mengalihkan 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 kepada engineer dukungan Google ke log Cloud Composer yang disimpan di Cloud Storage.

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 berada.
    • BUCKET_NAME dengan nama 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 keyring yang menyimpan kunci yang dikelola pelanggan Anda.
    • KEY_NAME dengan nama kunci yang dikelola pelanggan Anda.
    • 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 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. Tambahkan 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 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.

Langkah berikutnya