Melindungi data Anda dengan CMEK

Secara default, fungsi Cloud Run mengenkripsi konten pelanggan dalam penyimpanan. Fungsi 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 terintegrasi CMEK, termasuk fungsi 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 fungsi Cloud Run Anda mirip dengan menggunakan enkripsi default Google. Untuk mengetahui informasi selengkapnya tentang opsi enkripsi Anda, lihat Kunci enkripsi yang dikelola pelanggan (CMEK).

Jenis data fungsi Cloud Run berikut dienkripsi saat menggunakan CMEK:

  • Kode sumber fungsi yang diupload untuk penerapan dan disimpan oleh Google di Cloud Storage, yang digunakan dalam proses build.
  • Hasil proses build fungsi, termasuk:
    • Image container yang dibuat dari kode sumber fungsi Anda.
    • Setiap instance fungsi yang di-deploy.

Proses build fungsi itu sendiri dilindungi oleh kunci efemeral yang dibuat secara unik untuk setiap build. Lihat Kepatuhan CMEK di Cloud Build untuk mengetahui informasi selengkapnya. Selain itu, perhatikan hal-hal berikut:

  • Metadata file, seperti jalur sistem file atau stempel waktu modifikasi, tidak dienkripsi.

  • Jika kunci dinonaktifkan, image container tidak dapat di-deploy dan instance baru tidak dapat dimulai.

  • Perlindungan CMEK fungsi Cloud Run hanya berlaku untuk resource fungsi Cloud Run yang dikelola Google; Anda bertanggung jawab untuk melindungi data dan resource yang dikelola oleh Anda, seperti repositori kode sumber, saluran peristiwa yang ada di project pelanggan, atau layanan apa pun yang digunakan oleh fungsi Anda.

Menyiapkan CMEK untuk fungsi Cloud Run memerlukan hal-hal berikut:

  • Memberi akun layanan yang diperlukan akses ke kunci:

    • Untuk semua fungsi, Anda perlu memberi fungsi Cloud Run, Artifact Registry, dan akun layanan Cloud Storage akses ke kunci.

    • Untuk fungsi Cloud Run berbasis peristiwa, Anda juga harus menyelesaikan penyiapan CMEK untuk Cloud Run dan Eventarc.

  • Membuat repositori Artifact Registry yang dilindungi CMEK untuk menyimpan image fungsi Anda.

  • Mengaktifkan CMEK di fungsi Anda.

  • Secara opsional, aktifkan kebijakan organisasi CMEK untuk menerapkan semua fungsi baru agar mematuhi CMEK.

Langkah-langkah ini dijelaskan secara lebih mendetail di bawah.

Sebelum memulai

  1. Buat kunci region tunggal untuk mengenkripsi fungsi Anda. Untuk mempelajari cara membuat kunci, lihat Membuat kunci enkripsi simetris.

  2. Buat repositori Artifact Registry yang telah mengaktifkan CMEK. Anda harus menggunakan kunci yang sama untuk repositori Artifact Registry seperti yang Anda gunakan saat mengaktifkan CMEK untuk suatu fungsi.

  3. Untuk fungsi berbasis peristiwa, ikuti langkah-langkah penyiapan tambahan yang diuraikan dalam Mengaktifkan CMEK untuk saluran Google.

Memberi akun layanan akses ke kunci

Untuk semua fungsi, Anda harus memberi akun layanan berikut akses ke kunci:

  • Agen layanan fungsi Cloud Run (service-PROJECT_NUMBER@gcf-admin-robot.)

  • Agen layanan Artifact Registry (service-PROJECT_NUMBER@gcp-sa-artifactregistry.)

  • Agen layanan Cloud Storage (service-PROJECT_NUMBER@gs-project-accounts.)

Anda juga harus memberi akun layanan berikut akses ke kunci tersebut:

  • Agen layanan Cloud Run (service-PROJECT_NUMBER@serverless-robot-prod.)

  • Agen layanan Eventarc (service-PROJECT_NUMBER@gcp-sa-eventarc.)

Untuk memberi akun layanan ini akses ke kunci tersebut, tambahkan setiap akun layanan sebagai akun utama dari kunci tersebut, lalu berikan peran Cloud KMS CryptoKey Encrypter/Decrypter kepada akun layanan tersebut:

Konsol

  1. Buka halaman Cloud Key Management Service di konsol Google Cloud:
    Buka halaman Cloud KMS

  2. Klik nama key ring yang berisi kunci yang dipilih.

  3. Klik nama kunci untuk melihat detail kunci.

  4. Di tab Izin, klik Berikan akses.

  5. Di kolom New principals, masukkan alamat email ketiga akun layanan yang telah dibahas sebelumnya untuk menetapkan izin ke ketiga akun tersebut sekaligus.

  6. Di menu Select a role, pilih Cloud KMS CryptoKey Encrypter/Decrypter.

  7. Klik Simpan.

gcloud

Untuk setiap akun layanan yang telah dibahas sebelumnya, jalankan perintah berikut:

gcloud kms keys add-iam-policy-binding KEY \
--keyring KEY_RING \
--location LOCATION \
--member serviceAccount:SERVICE_AGENT_EMAIL \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter

Ganti kode berikut:

  • KEY: Nama kunci. Contoh, my-key.

  • KEY_RING: Nama key ring. Contoh, my-keyring.

  • LOCATION: Lokasi kunci. Contoh, us-central1.

  • SERVICE_AGENT_EMAIL: Alamat email akun layanan.

Mengaktifkan CMEK untuk fungsi

Setelah menyiapkan repositori Artifact Registry dengan CMEK diaktifkan dan memberi fungsi Cloud Run akses ke kunci, Anda siap mengaktifkan CMEK untuk fungsi Anda.

Untuk mengaktifkan CMEK sebuah fungsi:

Konsol

  1. Buka halaman fungsi Cloud Run di konsol Google Cloud:
    Buka halaman fungsi Cloud Run

  2. Klik nama fungsi tempat Anda ingin mengaktifkan CMEK.

  3. Klik Edit.

  4. Klik Runtime, build... untuk meluaskan opsi konfigurasi lanjutan.

  5. Pilih tab Keamanan dan repositori image.

  6. Di bagian Enkripsi, pilih Kunci enkripsi yang dikelola pelanggan (CMEK).

  7. Pilih kunci yang Anda pilih dari menu drop-down.

  8. Di bagian Lokasi container, pilih Artifact Registry yang dikelola pelanggan.

  9. Di drop-down Artifact registry, pilih repositori yang dilindungi CMEK.

  10. Klik Berikutnya.

  11. Klik Deploy.

gcloud

Jalankan perintah berikut.

gcloud functions deploy FUNCTION \
[--gen2] \
--kms-key=KEY \
--docker-repository=REPOSITORY \
--source=YOUR_SOURCE_LOCATION
FLAGS...

Ganti kode berikut:

  • FUNCTION: Nama fungsi untuk mengaktifkan CMEK. Contoh, cmek-function.

  • KEY: Nama kunci yang sepenuhnya memenuhi syarat, dalam format berikut: projects/PROJECT_NAME/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME.

  • REPOSITORY: Nama repositori Artifact Registry yang sepenuhnya memenuhi syarat, dalam format berikut: projects/PROJECT_NAME/locations/LOCATION/repositories/REPOSITORY.

  • YOUR_SOURCE_LOCATION: Saat mengaktifkan CMEK untuk fungsi yang sudah ada, pastikan kode sumber yang dimaksud di-deploy ulang dengan menentukan parameter ini secara eksplisit.

  • FLAGS...: Flag tambahan yang mungkin diperlukan untuk men-deploy fungsi Anda, terutama untuk membuat deployment. Untuk mengetahui detailnya, lihat Men-deploy fungsi Cloud Run.

CMEK diaktifkan untuk fungsi ini.

Perhatikan bahwa fungsi Cloud Run selalu menggunakan versi utama kunci untuk perlindungan CMEK. Anda tidak dapat menentukan versi kunci tertentu yang akan digunakan saat mengaktifkan CMEK untuk fungsi Anda.

Jika kunci dihancurkan atau dinonaktifkan, atau izin yang diperlukan atas kunci tersebut dicabut, instance aktif dari fungsi yang dilindungi oleh kunci tersebut tidak akan dinonaktifkan. Eksekusi fungsi yang sudah berjalan akan terus berjalan, tetapi eksekusi baru akan gagal selama fungsi Cloud Run tidak memiliki akses ke kunci.

Menguji perlindungan CMEK

Untuk memverifikasi bahwa perlindungan CMEK berfungsi, Anda dapat menonaktifkan kunci yang digunakan untuk mengaktifkan CMEK untuk suatu fungsi, lalu mencoba memicu fungsi Anda:

  1. Nonaktifkan kunci yang digunakan untuk melindungi fungsi Anda.

  2. Coba lihat kode sumber yang terkait dengan fungsi ini. Upaya tersebut akan gagal.

  3. Coba picu fungsi yang dilindungi CMEK. Upaya tersebut akan gagal.

  4. Setelah Anda memastikan bahwa perlindungan CMEK berfungsi, aktifkan kunci.

Perlindungan CMEK fungsi kini telah dikonfirmasi.

Langkah selanjutnya