Mulai menggunakan Cloud KMS

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:

Screenshot dari 2016-02-10 12:45:26.png

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

Lisensi

Karya ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0.