Menggunakan kunci enkripsi yang dikelola pelanggan

Secara default, Cloud Run mengenkripsi konten pelanggan dalam penyimpanan. Cloud Run menangani enkripsi untuk Anda tanpa tindakan tambahan dari Anda. Opsi ini disebut enkripsi default Google.

Jika ingin mengontrol kunci enkripsi, Anda dapat menggunakan kunci enkripsi yang dikelola pelanggan (CMEK) di Cloud KMS dengan layanan yang terintegrasi dengan CMEK, termasuk Cloud Run. Dengan menggunakan kunci Cloud KMS, Anda dapat mengontrol tingkat perlindungan, lokasi, jadwal rotasi, izin penggunaan dan akses, serta batas kriptografisnya. Dengan menggunakan Cloud KMS, Anda juga dapat melihat log audit dan mengontrol siklus proses kunci. Alih-alih Google yang memiliki dan mengelola kunci enkripsi kunci (KEK) simetris yang melindungi data Anda, Andalah yang mengontrol dan mengelola kunci ini di Cloud KMS.

Setelah Anda menyiapkan resource dengan CMEK, pengalaman mengakses resource Cloud Run Anda mirip dengan menggunakan enkripsi default Google. Untuk mengetahui informasi selengkapnya tentang opsi enkripsi Anda, lihat Kunci enkripsi yang dikelola pelanggan (CMEK).

Anda harus memperhatikan hal-hal berikut:

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

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

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

  1. Konfigurasikan Artifact Registry untuk menggunakan CMEK.

  2. Dengan menggunakan Panduan Cepat Docker Artifact Registry sebagai referensi, buat repositori Docker yang akan mengirim image ke repositori tersebut.

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

  4. Untuk mengizinkan Cloud Run mengakses kunci, berikan peran Pengenkripsi/Pendekripsi CryptoKey Cloud KMS 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 tersebut, lalu klik Tambahkan akun utama di tab Izin sebelah kanan.

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

      PROJECT_NUMBER@serverless-robot-prod..

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

    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 dan pilih Service untuk mengonfigurasi layanan baru. Jika Anda mengonfigurasi layanan yang sudah ada, klik layanan, lalu klik Edit dan deploy revisi baru.

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

  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 project Anda dapat mengakses kunci untuk operasi enkripsi dan dekripsi.

        • Pilih Enter key manually untuk memasukkan secret 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 aksesnya Anda miliki:

        • 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 pencabutan kunci CMEK.

        • 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 dinonaktifkan.

  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 dalam format berikut: 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 dinonaktifkan setelah pencabutan.

YAML

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

    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 tempat kunci dibuat.
    • 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 dinonaktifkan 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 halaman Detail layanan.

  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.

Menguji 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 penampung 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 dengan nilai yang ditetapkan ke minimum satu jam.

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

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 di layanan Cloud Run Anda, mungkin Anda 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