Cloud KMS adalah key management service yang dihosting di cloud yang memungkinkan Anda mengelola kunci kriptografis untuk layanan cloud seperti saat Anda mengelolanya di lokal. Layanan ini mencakup dukungan untuk enkripsi, dekripsi, penandatanganan, dan verifikasi menggunakan berbagai jenis dan sumber kunci, termasuk Cloud HSM untuk kunci yang didukung hardware.
Dalam tutorial ini, Anda akan mempelajari cara menggunakan fitur lanjutan dari API Privasi dan Keamanan Cloud, termasuk:
- Menyiapkan bucket Cloud Storage yang aman
- Mengelola kunci dan data terenkripsi menggunakan Cloud KMS
- Melihat log audit Cloud Storage
Anda akan mengambil data ringkas dari Enron Corpus, mengenkripsinya, dan memuatnya ke Cloud Storage.
Anda akan mempelajari
- Cara mengenkripsi data dan mengelola kunci enkripsi menggunakan Key Management Service (KMS)
Anda akan menggunakan
- Cloud KMS
- Cloud Storage
- Cloud SDK
Penyiapan lingkungan mandiri
Jika belum memiliki Akun Google (Gmail atau Google Apps), Anda harus membuatnya. Login ke Google Cloud Platform console (console.cloud.google.com) dan buat project baru:
Ingat project ID, nama unik di semua project Google Cloud (maaf, nama di atas telah digunakan dan tidak akan berfungsi untuk Anda!) Project ID tersebut selanjutnya akan dirujuk di codelab ini sebagai PROJECT_ID
.
Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource Google Cloud.
Menjalankan melalui codelab ini tidak akan menghabiskan biaya lebih dari beberapa dolar, tetapi bisa lebih jika Anda memutuskan untuk menggunakan lebih banyak resource atau jika Anda membiarkannya berjalan (lihat bagian "pembersihan" di akhir dokumen ini).
Pengguna baru Google Cloud Platform memenuhi syarat untuk mendapatkan uji coba gratis senilai$300.
Mulai Cloud Shell
Dalam codelab ini, Anda akan menggunakan Cloud Shell, lingkungan virtual gratis yang berjalan di Google Cloud. Dari Konsol GCP, klik ikon Cloud Shell di toolbar kanan atas:
Hanya perlu waktu beberapa saat untuk penyediaan dan terhubung ke lingkungan. Jika sudah selesai, Anda akan melihat tampilan seperti ini:
Mesin virtual ini berisi semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Kecuali jika diinstruksikan lain, jalankan semua perintah dari shell ini.
Untuk menyimpan data dalam tutorial ini, buat bucket Cloud Storage. Karena nama bucket Cloud Storage harus unik secara global, tambahkan awalan nama bucket dengan project ID Anda:
$ export BUCKET_NAME=${GOOGLE_CLOUD_PROJECT}_enron_emails
Kemudian, buat bucket:
$ gsutil mb gs://${BUCKET_NAME}
Enron Corpus adalah database besar berisikan lebih dari 600.000 email yang dihasilkan oleh 158 karyawan Enron Corporation. Data ini telah disalin ke bucket Cloud Storage bernama gs://enron_emails/
.
Download salah satu file email secara lokal:
$ gsutil cp gs://enron_emails/allen-p/inbox/1. . # <-- don't forget the dot!
Periksa file yang didownload untuk memverifikasi bahwa file tersebut memang merupakan email:
$ tail 1.
Email tersebut akan berisi pesan seperti:
Attached is the Delta position for 1/18... # ...
Selain email, bucket juga berisi gambar. Tutorial ini menggunakan email dan gambar teks biasa.
Sebelum dapat menggunakan Cloud KMS, Anda harus mengaktifkan layanan ini di project Anda terlebih dahulu. Tindakan ini hanya perlu dilakukan sekali per project. Untuk mengaktifkan layanan Cloud KMS, jalankan perintah berikut:
$ gcloud services enable cloudkms.googleapis.com \ --project "${GOOGLE_CLOUD_PROJECT}"
Proses pengaktifan dapat memerlukan waktu hingga satu menit. Perintah akan melaporkan keberhasilan saat selesai.
Buat Key Ring Cloud KMS. Di Cloud KMS, Key Ring adalah kumpulan logis kunci kriptografis. Key Ring berisi metadata tentang kunci seperti lokasinya. Buat Key Ring bernama my-keyring
di region global
:
$ gcloud kms keyrings create "my-keyring" \ --location "global"
Sekarang buat Kunci Kripto bernama enron-emails
dengan tujuan encryption
di dalam Key Ring yang baru saja Anda buat.
$ gcloud kms keys create "enron-emails" \ --location "global" \ --keyring "my-keyring" \ --purpose "encryption"
Buka UI Web Kunci Kriptografis dan lihat resource yang baru dibuat. Opsi ini tersedia di bagian IAM & Admin di menu utama.
Anda dapat melihat dan mengelola Key Ring dan Crypto Key di Konsol Cloud.
Enkripsi isi email yang kita download sebelumnya menggunakan Cloud KMS. Tutorial ini menggunakan alat command line gcloud
, tetapi Anda juga dapat mengenkripsi data menggunakan Cloud KMS API.
$ gcloud kms encrypt \ --location "global" \ --keyring "my-keyring" \ --key "enron-emails" \ --plaintext-file ./1. \ --ciphertext-file ./1.enc
Tindakan ini akan membuat file baru di disk 1.enc
, yang berisi konten file terenkripsi. Setelah data dienkripsi dengan Cloud KMS, upload file terenkripsi ke bucket Cloud Storage.
$ gsutil cp ./1.enc gs://${BUCKET_NAME}
Cloud KMS terintegrasi dengan Identity and Access Management (IAM) Google Cloud. Peran IAM Cloud KMS sebagian besar dibagi menjadi dua kategori:
- Izin untuk mengelola kunci
- Izin untuk menggunakan kunci
Misalnya, peran roles/cloudkms.admin
memungkinkan pemegangnya membuat Key Ring, Crypto Key, menetapkan kebijakan IAM, dan melakukan operasi terkait pengelolaan. roles/cloudkms.cryptoKeyEncrypterDecrypter
memberikan izin kepada pemegangnya untuk mengenkripsi dan mendekripsi data, tetapi tidak mencakup izin pengelolaan.
Peran IAM diwarisi oleh resource induknya. Jika seseorang memiliki peran roles/cloudkms.admin
di project Google Cloud, dia adalah admin semua kunci dalam project tersebut. Jika mereka memiliki roles/cloudkms.admin
di Key Ring, mereka adalah admin semua kunci di Key Ring tersebut. Jika memiliki roles/cloudkms.admin
pada satu Kunci Kripto, mereka hanya menjadi admin kunci tersebut.
Untuk latihan ini, gunakan identitas Anda:
$ export MY_IDENTITY=you@gmail.com # or you@example.com
Beri identitas kemampuan untuk mengelola resource Cloud KMS di Key Ring yang dibuat di atas menggunakan alat command line gcloud
:
$ gcloud kms keyrings add-iam-policy-binding "my-keyring" \ --location "global" \ --member "user:${MY_IDENTITY}" \ --role "roles/cloudkms.admin"
Peran roles/cloudkms.admin
tidak mencakup izin untuk menggunakan kunci, hanya untuk mengelolanya. Untuk memberikan kemampuan kepada identitas Anda untuk mengenkripsi dan mendekripsi data menggunakan Kunci Kriptografi enron-emails
:
$ gcloud kms keys add-iam-policy-binding "enron-emails" \ --location "global" \ --keyring "my-keyring" \ --member "user:${MY_IDENTITY}" \ --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
Perhatikan bahwa perintah pertama memberikan peran roles/cloudkms.admin
di Key Ring, yang akan mencakup semua resource Crypto Key turunan. Perintah kedua memberikan roles/cloudkms.cryptoKeyEncrypterDecrypter
, tetapi hanya pada Kunci Kriptografi enron-emails
.
Anda juga dapat melihat dan menetapkan peran di UI Cloud KMS di Cloud Console.
Selain mengenkripsi satu file, Anda juga dapat mengenkripsi kumpulan file dengan beberapa skrip. Contoh ini melakukan streaming semua email untuk allen-p, mengenkripsinya, lalu mengupload nilai terenkripsi yang dihasilkan ke bucket Cloud Storage:
DIR="gs://enron_emails/allen-p" for file in $(gsutil ls ${DIR}/**); do ENC_NAME="$(basename ${file}).enc" gsutil cat ${file} \ | \ gcloud kms encrypt \ --location "global" \ --keyring "my-keyring" \ --key "enron-emails" \ --plaintext-file - \ --ciphertext-file - \ | \ gsutil -q cp - gs://${BUCKET_NAME}/${ENC_NAME} echo "Copied ${ENC_NAME}" done
Skrip ini melakukan iterasi pada semua file dalam direktori tertentu di bucket Cloud Storage contoh, mengenkripsinya menggunakan Cloud KMS, dan menguploadnya ke Google Cloud Storage Anda.
Setelah skrip selesai, Anda dapat melihat file yang dienkripsi di UI Cloud Storage. Anda akan melihat sesuatu seperti ini:
Cloud Audit Logging memiliki dua stream log – Log Aktivitas Admin dan Log Akses Data – yang dihasilkan oleh layanan Google Cloud untuk membantu Anda menjawab pertanyaan "siapa melakukan apa, di mana, dan kapan?" dalam project Google Cloud Platform Anda.
Untuk melihat aktivitas pada resource apa pun di KMS, klik key ring, lalu pilih Lihat Aktivitas. Anda akan diarahkan ke UI Aktivitas Cloud, di mana Anda akan melihat kreasi dan semua modifikasi yang dibuat pada KeyRing.
Anda telah berhasil mengenkripsi data menggunakan Cloud KMS dan menyimpan data terenkripsi di Cloud Storage.
Pembersihan
Lepaskan resource yang dibuat selama tutorial ini. Hapus bucket Cloud Storage yang dibuat sebelumnya:
$ gsutil rm -r gs://${BUCKET_NAME}
Resource Cloud KMS tidak dapat dihapus. Namun, Anda dapat menghancurkan materi kunci sehingga tidak dapat digunakan lagi:
$ gcloud kms keys versions destroy "1" \ --location "global" \ --key "enron-emails" \ --keyring "my-keyring"
Kita telah membahas
- Menggunakan Cloud IAM untuk mengelola izin Cloud KMS
- Menggunakan Cloud KMS untuk mengenkripsi data
- Menggunakan Cloud Storage untuk menyimpan data yang telah dienkripsi
- Menggunakan Cloud Audit Logging untuk melihat semua aktivitas pada kunci dan key ring
Langkah berikutnya
- Gunakan Cloud KMS untuk mengenkripsi kolom dalam database seperti BigQuery
- Menetapkan jadwal rotasi otomatis pada kunci Cloud KMS Anda
Pelajari lebih lanjut
- Pelajari cara merotasi kunci enkripsi lebih lanjut
- Baca tentang enkripsi envelope
- Baca tentang Enkripsi Sisi Server untuk bucket Cloud Storage
- Posting pertanyaan dan temukan jawaban di Stack Overflow dengan tag google-cloud-kms
Lisensi
Karya ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0.