Menggunakan kunci enkripsi yang dikelola pelanggan

Topik ini menunjukkan cara melindungi image container yang di-deploy ke layanan Cloud Run menggunakan kunci enkripsi yang dikelola pelanggan (CMEK) Cloud KMS. Anda dapat menggunakan fitur ini untuk melindungi container yang diimpor oleh Cloud Run dengan kunci CMEK dalam penyimpanan.

Anda harus memperhatikan hal-hal berikut:

  • Metadata file, seperti jalur file, tidak dienkripsi.
  • Metadata layanan Cloud Run, seperti variabel nama atau lingkungan, tidak dienkripsi menggunakan kunci yang disediakan, tetapi dengan kunci yang dikelola Google.
  • Saat runtime, memori dan konten file tidak dienkripsi.
  • Jika kunci CMEK dinonaktifkan, instance baru dari revisi Cloud Run yang ada menggunakan kunci tersebut tidak akan dimulai.
  • Jika CMEK dinonaktifkan, men-deploy revisi Cloud Run yang baru akan gagal, kecuali kunci baru yang valid digunakan.

Karena kunci CMEK berada dalam kendali Anda dan tidak dikendalikan oleh Google, tidak seorang pun, termasuk Google, dapat mengakses data yang dilindungi oleh kunci enkripsi ini bahkan saat kunci dinonaktifkan atau dihancurkan.

Penggunaan CMEK akan menghasilkan log audit. Lihat Memahami log audit dan pesan error untuk mengetahui detailnya.

Kuota Cloud KMS dan Cloud Run

Anda dapat menetapkan CMEK Anda ke salah satu tingkat perlindungan yang tersedia untuk menunjukkan cara operasi kriptografi dilakukan. Saat Anda menggunakan CMEK di Cloud Run, project Anda dapat memakai kuota permintaan kriptografis Cloud KMS. Misalnya, repositori yang dienkripsi CMEK dapat memakai kuota ini untuk setiap unggahan atau unduhan.

Operasi enkripsi dan dekripsi yang menggunakan kunci CMEK memengaruhi kuota Cloud KMS dengan cara berikut:

  • Untuk kunci software CMEK yang dihasilkan di Cloud KMS, tidak ada kuota Cloud KMS yang digunakan.
  • Untuk kunci hardware CMEK—terkadang disebut kunci Cloud HSM —operasi enkripsi dan dekripsi akan mengurangi kuota Cloud HSM dalam project yang berisi kunci tersebut.
  • Untuk kunci eksternal CMEK—terkadang disebut kunci Cloud EKM —operasi enkripsi dan dekripsi akan mengurangi kuota Cloud EKM dalam project yang berisi kunci tersebut.

Untuk informasi selengkapnya, lihat kuota Cloud KMS.

Perilaku penskalaan otomatis terpengaruh oleh CMEK

Penskalaan otomatis yang diharapkan untuk layanan Cloud Run Anda dapat terpengaruh saat Anda menggunakan kunci enkripsi yang dikelola pelanggan. Misalnya, latensi untuk memulai instance baru dapat meningkat karena penundaan dalam menghubungi pengelolaan kunci eksternal selama operasi kunci.

Tabel berikut menunjukkan kemungkinan perubahan perilaku karena penggunaan kunci CMEK:

Operasi terkait CMEK Perilaku penskalaan otomatis
Kunci dinonaktifkan/dihancurkan/dicabut Instance baru tidak akan dimulai.
Pengelola kunci eksternal tidak dapat dihubungi Jika permintaan kunci dapat dicoba lagi, tidak ada instance yang dihentikan selama percobaan ulang dan tidak ada instance baru yang akan dimulai. Penyebaran skala dapat terlihat lebih lambat dari yang diperkirakan.
Jika permintaan kunci tidak dapat dicoba lagi, tidak ada instance baru yang dimulai, dan instance yang sedang berjalan akan dihentikan setelah masa tunggu.
Kuota KMS terlampaui Jika kuota ini terlampaui, RESOURCE_EXHAUSTED error akan dicatat di dalam log, dan instance baru tidak akan dimulai. Anda dapat meminta kuota tambahan untuk memperbaiki ini.

Sebelum memulai

Mengizinkan Cloud Run mengakses kunci

Agar dapat menggunakan CMEK untuk Cloud Run, lakukan langkah-langkah berikut:

  1. Gunakan kunci simetris Cloud KMS yang ada atau buat kunci simetris yang baru.

  2. Untuk mengizinkan Cloud Run mengakses kunci tersebut, berikan peran Cloud KMS CryptoKey Encrypter/Decrypter kepada agen layanan Cloud Run:

    Konsol

    1. Buka halaman Kunci kriptografis

    2. Klik key ring pada kunci Anda guna membuka halaman daftar kuncinya.

    3. Pilih kunci, lalu di tab Permissions di sisi kanan, klik Add principal.

    4. Di kolom New principals, salin email agen layanan Cloud Run. Kode ini memiliki akhiran berikut:

      @serverless-robot-prod.iam.gserviceaccount.com.

    5. Di kolom Select a role, pilih Cloud KMS CryptoKey Encrypter/Decrypter.

    gcloud

    Gunakan perintah gcloud kms berikut:

    gcloud kms keys add-iam-policy-binding KEY_NAME \
    --keyring=KEYRING \
    --location=LOCATION) \
    --member=MEMBER \
    --role='roles/cloudkms.cryptoKeyEncrypterDecrypter'

    Ganti

    • KEY_NAME dengan nama kunci Anda.
    • KEYRING dengan nama key ring Anda.
    • LOCATION dengan nama wilayah Anda.
    • MEMBER dengan email agen layanan Cloud Run. Class ini memiliki akhiran @serverless-robot-prod.iam.gserviceaccount.com.

    Anda memerlukan izin untuk mengelola resource Cloud KMS di project Google Cloud untuk memberikan peran IAM roles/cloudkms.cryptoKeyEncrypterDecrypter. Hanya anggota IAM dengan peran Pemilik atau (roles/owner) Admin Cloud KMS (roles/cloudkms.admin) yang dapat memberikan atau mencabut akses ke resource Cloud KMS.

Mengonfigurasi CMEK untuk layanan Cloud Run

Setiap perubahan konfigurasi akan menghasilkan revisi baru. Revisi berikutnya akan otomatis mendapatkan setelan konfigurasi ini, kecuali Anda melakukan pembaruan yang eksplisit untuk mengubahnya.

Konsol

  1. Di konsol Google Cloud, buka Cloud Run:

    Buka Cloud Run

  2. Klik Buat Layanan jika Anda mengonfigurasi layanan baru yang akan di-deploy. Jika Anda mengonfigurasi layanan yang ada, klik layanan, lalu klik Edit and deploy new revision.

  3. Jika Anda mengonfigurasi layanan baru, isi halaman setelan layanan awal sesuai keinginan, kemudian klik Container, vo;ume, jejaring, sekuritas untuk memperluas halaman konfigurasi layanan.

  4. Klik tab Keamanan.

    gambar

    • Di bagian Enkripsi:
      1. Pilih Kunci enkripsi yang dikelola pelanggan (CMEK).
      2. Dari menu Select a customer-managed key, pilih salah satu opsi berikut:
        • Pilih Switch project jika Anda perlu menggunakan kunci dari project yang berbeda. Anda dapat mereferensikan kunci dari project lain jika akun layanan project Anda dapat mengakses kunci untuk operasi enkripsi dan dekripsi.

        • Pilih Masukkan kunci secara manual untuk memasukkan rahasia dari project, dengan menggunakan format berikut: projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME.

        Untuk menyalin dan menempelkan nama resource dari project lain yang dapat Anda akses:

        • Buka halaman Kunci kriptografis.
        • Klik key ring
        • Pilih nama key ring yang dipilih, lalu klik Tindakan.
        • Pilih Copy resource name dari menu dan tempel di kolom Key resource name dari langkah sebelumnya.

      3. Dari menu Tindakan pencabutan kunci, pilih salah satu opsi berikut:
        • Cegah instance penampung baru: tidak ada instance baru yang dimulai setelah pencabutan kunci CMEK.

        • Nonaktifkan sesegera mungkin: tidak ada instance baru yang dimulai dan instance yang ada akan dihentikan setelah pencabutan kunci CMEK.

        • Penundaan penonaktifan kustom: menentukan jumlah jam sebelum layanan dimatikan.

  5. Klik Buat atau Deploy.

gcloud

Untuk menyetel kunci di layanan, gunakan salah satu perintah berikut:

gcloud run deploy SERVICE \
--image IMAGE_URL \
--key KEY \
--post-key-revocation-action-type KEY_REVOCATION_ACTION
--encryption-key-shutdown-hours SHUTDOWN_HOURS
gcloud run services update SERVICE --key KEY
--post-key-revocation-action-type KEY_REVOCATION_ACTION
--encryption-key-shutdown-hours SHUTDOWN_HOURS

Ganti

  • SERVICE dengan nama layanan Anda.
  • IMAGE_URL dengan referensi ke image container, misalnya, us-docker.pkg.dev/cloudrun/container/hello:latest. Jika Anda menggunakan Artifact Registry, repositori REPO_NAME harus sudah dibuat. URL berbentuk REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  • KEY dengan nama kunci yang sepenuhnya memenuhi syarat dalam format berikut: projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME.
  • KEY_REVOCATION_ACTION dengan shut-down atau prevent-new, bergantung pada preferensi pencabutan kunci Anda.
  • SHUTDOWN_HOURS dengan jumlah jam untuk penundaan sebelum layanan dihentikan setelah pencabutan.

YAML

Anda dapat mendownload dan melihat konfigurasi layanan yang ada menggunakan perintah gcloud run services describe --format export, yang memberikan hasil yang telah diolah dalam format YAML. Kemudian, Anda dapat mengubah kolom yang dijelaskan di bawah ini dan mengunggah YAML yang telah dimodifikasi menggunakan perintah gcloud run services replace. Pastikan Anda hanya mengubah kolom seperti yang didokumentasikan.

  1. Untuk melihat dan mengunduh konfigurasi:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Update anotasi CMEK berikut ke nilai yang Anda inginkan:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/encryption-key: projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
            run.googleapis.com/post-key-revocation-action-type: KEY_REVOCATION_ACTION
            run.googleapis.com/encryption-key-shutdown-hours: SHUTDOWN_HOURS
          name: REVISION

    Ganti

    • SERVICE dengan nama layanan Cloud Run Anda.
    • PROJECT_NAME dengan nama project tempat kunci dibuat.
    • LOCATION dengan lokasi tempat kunci dibuat. Harus cocok dengan lokasi layanan Cloud Run.
    • RING_NAME dengan nama key ring.
    • KEY_NAME dengan nama kunci.
    • KEY_REVOCATION_ACTION dengan shut-down atau prevent-new, bergantung pada preferensi pencabutan kunci Anda.
    • SHUTDOWN_HOURS dengan jumlah jam untuk penundaan sebelum layanan dihentikan setelah pencabutan.
    • REVISION dengan nama revisi baru atau hapus (jika ada). Jika Anda memberikan nama revisi baru, nama tersebut harus memenuhi kriteria berikut:
      • Dimulai denganSERVICE-
      • Hanya berisi huruf kecil, angka, dan -
      • Tidak diakhiri dengan -
      • Tidak melebihi 63 karakter
  3. Ganti layanan dengan konfigurasi baru menggunakan perintah berikut:

    gcloud run services replace service.yaml

Lihat setelan keamanan

Untuk melihat setelan keamanan saat ini di layanan Cloud Run Anda:

Konsol

  1. Di konsol Google Cloud, buka Cloud Run:

    Buka Cloud Run

  2. Klik layanan yang Anda minati untuk membuka halaman Detail layanan.

  3. Klik tab Revisi.

  4. Di panel detail sebelah kanan, setelan keamanan dicantumkan pada tab Keamanan.

Command line

  1. Gunakan perintah berikut:

    gcloud run services describe SERVICE
  2. Temukan setelan keamanan di konfigurasi yang ditampilkan.

Memahami log audit dan pesan error

Jika Anda bertanggung jawab untuk memantau log audit, salah satu tugas Anda mungkin adalah memverifikasi operasi CMEK di layanan Cloud Run Anda. Dalam hal ini, Anda perlu memahami log audit yang terkait.

Jika Anda bertanggung jawab untuk mengatasi dan memperbaiki error runtime untuk layanan Cloud Run, Anda mungkin perlu memecahkan masalah error terkait CMEK yang dicatat dalam log selama operasi layanan Cloud Run.

Bagian berikut memberikan informasi yang diperlukan untuk tugas sebelumnya.

Log audit

Log audit KMS menyediakan jejak audit untuk setiap operasi yang dilakukan dengan kunci. Untuk layanan Cloud Run yang mendukung CMEK, Cloud Run menambahkan pemanggil khusus Cloud Run yang menjelaskan mengapa kunci pelanggan dapat oleh sistem. Tabel berikut mencantumkan konteks yang mungkin Anda lihat di log audit:

Alasan akses kunci Deskripsi
Decrypting CMEK-encrypted layer during container clone start. Dicatat setiap kali instance baru dimulai.
Encrypting a newly created data-encryption-key w/ the customer-managed-encryption-key. Dicatat selama deployment layanan CMEK yang aktif, dengan kunci CMEK yang digabungkan dengan kunci KMS.
Decrypting an existing encrypted data-encryption-key, under the same customer-managed-encryption-key, to be used to encrypt container contents. Dicatat saat sistem instance baru dimulai, yang memerlukan dekripsi gambar.
Performing an encrypt operation on dummy data to check the customer-managed-encryption-key status and access. Dicatat setiap kali ada pemeriksaan validasi pada kunci, yang dilakukan secara berkala.
Performing an decrypt operation on dummy data to check the customer-managed-encryption-key status and access. Dicatat setiap kali ada pemeriksaan validasi pada kunci, yang dilakukan secara berkala.

Untuk mengetahui detail tentang format dan konten log audit, lihat halaman Logging audit KMS.

Pesan error

Perlu diperhatikan bahwa pesan error yang diberikan oleh pengelola kunci eksternal akan langsung diteruskan ke log Cloud Run untuk layanan Anda.

Tabel berikut mencantumkan pesan error terkait CMEK-yang mungkin Anda lihat, beserta deskripsi dan kemungkinan solusinya.

Pesan Deskripsi
User's service account does not have CMEK decrypter permission. Service account: %s Solusi: Izinkan layanan mengakses kunci
User's KMS operation quota has been exceeded. CMEK key: %s Layanan CMEK yang aktif telah melampaui kuota KMS. Solusi: Minta lebih banyak kuota KMS
User's CMEK key has been disabled. CMEK key: %s Kunci CMEK dicabut. Solusi: Ubah kunci layanan CMEK dan deploy ulang layanan.
User's CMEK key has been destroyed. CMEK key: %s Kunci CMEK telah dihapus. Solusi: Ubah kunci layanan CMEK dan deploy ulang layanan.
User's CMEK key has been scheduled for deletion. CMEK Key: %s Kunci CMEK dijadwalkan untuk dihapus. Solusi: Ubah kunci layanan CMEK dan deploy ulang layanan.

Langkah selanjutnya