Melindungi data Anda dengan CMEK

Anda dapat menggunakan kunci enkripsi yang dikelola pelanggan (CMEK) Cloud Key Management Service untuk melindungi Cloud Functions dan data dalam penyimpanan terkait. Kunci tersebut dibuat dan dikelola melalui Cloud KMS dan disimpan sebagai kunci software, dalam cluster HSM, atau secara eksternal.

Men-deploy fungsi dengan CMEK akan melindungi data yang terkait dengannya menggunakan kunci enkripsi yang ada dalam kendali penuh Anda. Jenis enkripsi ini memungkinkan Anda memenuhi persyaratan kepatuhan di industri tertentu, seperti jasa keuangan. Karena kunci tersebut dimiliki oleh Anda dan tidak dikontrol oleh Google, tidak seorang pun (termasuk Anda) yang dapat mengakses data yang dilindungi oleh kunci enkripsi ini saat kunci tersebut dinonaktifkan atau dihancurkan.

Jenis data Cloud Functions 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.
  • Data dalam penyimpanan untuk saluran transportasi peristiwa internal (khusus generasi ke-1).

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 Cloud Functions hanya berlaku untuk resource Cloud Functions yang dikelola Google; Anda bertanggung jawab untuk melindungi data dan resource yang Anda kelola, seperti repositori kode sumber, saluran peristiwa yang ada dalam project pelanggan (khusus generasi ke-2), atau layanan apa pun yang digunakan oleh fungsi Anda.

Menyiapkan CMEK untuk Cloud Functions memerlukan hal-hal berikut:

  • Memberi akun layanan yang diperlukan akses ke kunci:

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

    • Khusus untuk Cloud Functions generasi ke-2 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 generasi ke-2 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 Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com)

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

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

Khusus untuk generasi ke-2, Anda juga harus memberi akun layanan berikut akses ke kunci tersebut:

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

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

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 diinginkan.

  3. Klik nama kunci untuk melihat detail kunci.

  4. Di tab Izin, klik Berikan akses.

  5. Di kolom Akun utama baru, masukkan alamat email ketiga akun layanan di atas untuk menetapkan izin ke ketiga akun tersebut sekaligus.

  6. Di menu drop-down Pilih peran, pilih Cloud KMS CryptoKey Encrypter/Decrypter.

  7. Klik Simpan.

gcloud

Untuk setiap akun layanan di atas, 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 Cloud Functions akses ke kunci, Anda siap mengaktifkan CMEK untuk fungsi Anda.

Untuk mengaktifkan CMEK sebuah fungsi:

Konsol

  1. Buka halaman Cloud Functions di konsol Google Cloud:
    Buka halaman Cloud Functions

  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 Next.

  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 Cloud Function.

CMEK diaktifkan untuk fungsi ini.

Perhatikan bahwa Cloud Functions 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 Cloud Functions 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