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:
Konfigurasi Artifact Registry untuk menggunakan CMEK.
Menggunakan Panduan Memulai Docker Artifact Registry sebagai referensi, buat repositori Docker yang mengirimkan image ke dalamnya.
Gunakan kunci simetris Cloud KMS yang ada atau buat kunci simetris yang baru.
Untuk mengizinkan Cloud Run mengakses kunci tersebut, berikan izin agen layanan Cloud Run. Peran Cloud KMS CryptoKey Encrypter/Decrypter:
Konsol
Klik key ring pada kunci Anda guna membuka halaman daftar kuncinya.
Pilih kunci dan di sisi kanan tab Izin, klik Tambahkan akun utama.
Di kolom New principals, salin email agen layanan Cloud Run. Kolom ini memiliki akhiran berikut:
PROJECT_NUMBER@serverless-robot-prod..
Di kolom Pilih peran, pilih Pengenkripsi/Pendekripsi CryptoKey Cloud KMS.
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
Di konsol Google Cloud, buka Cloud Run:
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.
Jika Anda mengonfigurasi layanan baru, isi layanan awal halaman setelan, lalu klik Container, volume, networking, security untuk meluaskan konfigurasi layanan Google Cloud.
Klik tab Keamanan.
- Di bagian Enkripsi:
- Pilih Kunci enkripsi yang dikelola pelanggan (CMEK).
- 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
.- 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.
- 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.
Untuk menyalin dan menempelkan nama resource dari project lain yang Anda miliki akses ke:
- Di bagian Enkripsi:
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 bentukLOCATION-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
atauprevent-new
, bergantung pada preferensi pencabutan kunci Anda. - SHUTDOWN_HOURS dengan jumlah jam penundaan sebelum layanan dimatikan setelah pencabutan.
YAML
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
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
atauprevent-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 dengan
SERVICE-
- Hanya berisi huruf kecil, angka, dan
-
- Tidak diakhiri dengan
-
- Tidak melebihi 63 karakter
- Dimulai dengan
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
Di konsol Google Cloud, buka Cloud Run:
Klik layanan yang Anda minati untuk membuka Detail layanan kami.
Klik tab Revisi.
Di panel detail sebelah kanan, setelan keamanan dicantumkan pada tab Keamanan.
gcloud
Gunakan perintah berikut:
gcloud run services describe SERVICE
Temukan setelan keamanan di konfigurasi yang ditampilkan.
Uji pencabutan CMEK
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:.
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.
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
- Pelajari lebih lanjut tentang Izin dan peran di Cloud KMS.
- Buat kunci.
- Log audit