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 untuk melindungi container yang diimpor oleh Cloud Run dengan kunci CMEK saat istirahat.

Anda harus memperhatikan hal-hal berikut:

  • Metadata file, seperti jalur file, tidak dienkripsi.
  • Metadata layanan Cloud Run, seperti nama atau lingkungan variabel, tidak dienkripsi menggunakan kunci yang disediakan, tetapi dengan kunci yang dimiliki dan dikelola Google.
  • Saat runtime, memori dan konten file tidak dienkripsi.
  • Jika kunci CMEK dinonaktifkan, instance baru dari Revisi Cloud Run 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

Izinkan Cloud Run mengakses sebuah kunci

Untuk menggunakan CMEK untuk Cloud Run, lakukan langkah-langkah berikut:

  1. Konfigurasi Artifact Registry untuk menggunakan CMEK.

  2. Menggunakan Panduan Memulai Docker Artifact Registry sebagai referensi, buat repositori Docker yang mengirimkan image ke dalamnya.

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

  4. Untuk mengizinkan Cloud Run mengakses kunci tersebut, berikan izin agen layanan Cloud Run. Peran Cloud KMS CryptoKey Encrypter/Decrypter:

    Konsol

    1. Buka halaman Kunci kriptografis

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

    3. Pilih kunci dan di sisi kanan tab Izin, klik Tambahkan akun utama.

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

      PROJECT_NUMBER@serverless-robot-prod..

    5. Di kolom Pilih peran, pilih Pengenkripsi/Pendekripsi CryptoKey Cloud KMS.

    6. Klik Simpan

    gcloud

    Gunakan perintah gcloud kms berikut:

    gcloud kms keys add-iam-policy-binding KEY_NAME \
    --keyring=KEYRING \
    --location=LOCATION) \
    --member serviceAccount:PROJECT_NUMBER@serverless-robot-prod. \
    --role='roles/cloudkms.cryptoKeyEncrypterDecrypter'

    Ganti

    • KEY_NAME dengan nama kunci Anda.
    • KEYRING dengan nama key ring Anda.
    • LOCATION dengan nama wilayah Anda.
    • PROJECT_NUMBER Dengan nomor project tempat Anda ingin men-deploy layanan Cloud Run.

    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 Deploy container lalu pilih Service untuk mengonfigurasi layanan baru. Jika Anda mengonfigurasi layanan yang ada, klik service, lalu klik Edit and deploy new revision.

  3. Jika Anda mengonfigurasi layanan baru, isi layanan awal halaman setelan, lalu klik Container, volume, networking, security untuk meluaskan konfigurasi layanan Google Cloud.

  4. Klik tab Keamanan.

    gambar

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

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

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

        • Buka halaman Kunci kriptografis.
        • Klik key ring
        • Pilih nama key ring yang dipilih, lalu klik Tindakan.
        • Pilih Salin nama resource dari menu dan tempelkan 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 CMEK pencabutan kunci.

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

        • Penundaan penonaktifan kustom: tentukan 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 memiliki bentuk LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  • KEY dengan nama kunci yang sepenuhnya memenuhi syarat di kolom berikut format: projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME.
  • KEY_REVOCATION_ACTION dengan shut-down atau prevent-new, bergantung pada preferensi pencabutan kunci Anda.
  • SHUTDOWN_HOURS dengan jumlah jam penundaan sebelum layanan dimatikan setelah pencabutan.

YAML

  1. Jika Anda membuat layanan baru, lewati langkah ini. Jika Anda mengupdate layanan yang sudah ada, download konfigurasi YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Perbarui 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/KEYRING_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 kunci sebelumnya dibuat di
    • LOCATION dengan lokasi tempat kunci dibuat. Harus sama dengan lokasi layanan Cloud Run.
    • KEYRING_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 penundaan sebelum layanan dimatikan 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 barunya menggunakan perintah berikut:

    gcloud run services replace service.yaml

Melihat 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 Detail layanan kami.

  3. Klik tab Revisi.

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

gcloud

  1. Gunakan perintah berikut:

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

Uji pencabutan CMEK

  1. Jalankan perintah berikut untuk mengonfirmasi bahwa layanan dapat diakses:

    curl SERVICE_URL

    Ganti SERVICE_URL dengan URL layanan. Anda dapat menemukannya di UI konsol setelah deployment: URL container ditampilkan di samping teks URL:.

  2. Menonaktifkan versi kunci

  3. Tunggu jumlah SHUTDOWN_HOURS yang Anda tentukan. Jika Anda tidak menentukan aktifkan kembali kunci Anda dan mengedit atau men-deploy ulang layanan Anda dengan nilai yang ditetapkan ke minimum satu jam.

  4. Setelah menunggu durasi SHUTDOWN_HOURS, jalankan kembali perintah berikut dan pastikan layanan tidak lagi dapat diakses:

curl SERVICE_URL

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 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 a 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 berikutnya