Topik ini menunjukkan satu cara menggunakan Cloud Key Management Service untuk langsung mengenkripsi data aplikasi di klien, sebelum mengirimkannya melalui jaringan.
Dalam contoh ini, data terenkripsi dikirim ke Google Cloud dan disimpan di bucket Cloud Storage. Cloud Storage juga mendukung enkripsi sisi server otomatis menggunakan kunci enkripsi yang dikelola pelanggan, yang mengotomatiskan seluruh proses ini. Untuk melindungi data aplikasi sebelum mengirimkannya ke Google Cloud, sebaiknya gunakan library Tink.
Library Tink adalah library lintas platform multibahasa yang menyediakan API sederhana dan yang tahan terhadap penyalahgunaan untuk tugas kriptografi umum. Ini dapat digunakan untuk mengenkripsi data sebelum masuk ke penyimpanan data Google Cloud, dan mendukung Java, Python, C++, Go, Objective-C, dan bahasa lainnya, serta layanan penyimpanan objek dan database relasional.
Dalam panduan ini, Anda mengenkripsi file menggunakan Cloud KMS sebelum menguploadnya ke bucket. Selanjutnya, Anda mendownload dan mendekripsi data yang sama sehingga Anda dapat membacanya di klien.
Setelah mengikuti petunjuk ini, kunci dan semua operasi kriptografi Anda akan tetap berada di Google Cloud, dan Anda harus menggunakan Cloud KMS untuk melakukan dekripsi. Enkripsi simetris mentah memungkinkan Anda mengenkripsi atau mendekripsi data secara lokal di infrastruktur lokal atau memindahkan data terenkripsi antara library dan penyedia layanan yang berbeda tanpa harus mendekripsinya terlebih dahulu.
Sebelum memulai
Dalam organisasi Google Cloud, Anda memerlukan izin untuk membuat project baru, serta mengaktifkan penagihan, membuat pengguna, dan mengelola izin dalam project tersebut. Peran
roles/resourcemanager.organizationAdmin
memberikan izin ini.
Penyiapan
Sebaiknya gunakan dua project dan dua pengguna untuk memastikan pemisahan tugas. Jika Anda mengikuti langkah-langkah dalam topik ini, pengguna dan layanan yang mengelola kunci enkripsi berbeda dengan pengguna dan layanan yang menggunakannya. Satu project berisi dan mengelola kunci, dan project lainnya menyimpan data terenkripsi di bucket Cloud Storage, dan mendekripsinya sesuai kebutuhan.
Buat project
Anda membuat project di konsol Google Cloud. Untuk mengetahui petunjuk langkah demi langkah, lihat panduan memulai Pengelolaan Akses dan Identitas.
Di dalam organisasi:
Buat project Google Cloud untuk menampung bucket Cloud Storage yang digunakan untuk menyimpan secret. Rahasia akan disimpan sebagai objek di dalam bucket. Dalam langkah-langkah di bawah ini, project ini disebut sebagai my-storage-project.
Secara opsional, buat project Google Cloud kedua untuk mengelola kunci Cloud KMS yang digunakan untuk mengenkripsi dan mendekripsi rahasia. Dalam langkah-langkah di bawah ini, project ini disebut my-kms-project.
Anda dapat memilih untuk menggunakan project Google Cloud yang sama untuk my-storage-project dan my-kms-project.
Untuk setiap project, aktifkan Cloud KMS API dan aktifkan penagihan, dengan mengikuti langkah-langkah di bagian Sebelum memulai pada Panduan Memulai Cloud KMS.
Buat pengguna
Anda dapat membuat pengguna dan memberi mereka peran di konsol Google Cloud. Untuk petunjuk langkah demi langkah, lihat panduan memulai Pengelolaan Akses dan Identitas.
Prosedur ini menghasilkan dua pengguna. key-admin mengelola kunci enkripsi, dan key-user dapat mengenkripsi dan mendekripsi data menggunakan kunci tersebut.
Lakukan prosedur ini dalam project my-kms-project.
Buat pengguna
key-admin
. Untuk membuat pengguna, Anda memerlukan peranroles/resourcemanager.organizationAdmin
untuk project my-kms-project.Beri
key-admin
peranroles/cloudkms.admin
Identity and Access Management.key-admin
dapat membuat dan mengelola kunci.Buat pengguna
key-user
.Beri
key-user
peran IAMroles/cloudkms.cryptoKeyEncrypterDecrypter
.key-user
dapat menggunakan kunci untuk mengenkripsi dan mendekripsi data.
Membuat bucket penyimpanan
Jalankan prosedur ini di project my-storage-project
.
- Membuat bucket penyimpanan bernama
my-bucket
. - Beri key-user peran
roles/storage.objectAdmin
untuk bucket penyimpanan my-bucket.
Buat kunci enkripsi
Lakukan prosedur ini sebagai pengguna key-admin
dalam
project my-kms-project.
Buat key ring bernama storage. Nama key ring adalah nama unik untuk project. Key ring tidak dapat diganti namanya atau dihapus. Gunakan Google Cloud CLI untuk membuat key ring.
gcloud kms keyrings create storage \ --location global
Buat kunci bernama my-key di key ring storage, untuk tujuan enkripsi. Nama kunci unik untuk key ring. Kunci tidak dapat diganti namanya atau dihapus, tetapi versi kuncinya dapat dihancurkan. Gunakan Google Cloud CLI untuk membuat kunci. Versi kunci awal dibuat secara otomatis dan menjadi versi utama.
gcloud kms keys create my-key \ --location global \ --keyring storage \ --purpose encryption
Anda dapat mempelajari lebih lanjut cara Membuat key ring dan kunci.
Mengenkripsi file yang berisi rahasia
Lakukan prosedur ini sebagai pengguna key-user, menggunakan kedua project.
Di komputer lokal, buat file bernama my-secret.txt, yang berisi teks "This is my secret".
echo "This is my secret" > my-secret.txt
Enkripsi my-secret.txt menggunakan kunci my-key dalam project
my-kms-project
. Tulis file terenkripsi ke mysecret.txt.encrypted.gcloud kms encrypt \ --location global \ --keyring storage \ --key my-key \ --plaintext-file my-secret.txt \ --ciphertext-file my-secret.txt.encrypted
Anda dapat mempelajari lebih lanjut cara mengenkripsi data dengan mengikuti panduan memulai enkripsi data.
Sebagai gantinya, gunakan
raw-encrypt
untuk enkripsi simetris mentah.Upload file my-secret.txt.encrypted terenkripsi ke bucket penyimpanan my-bucket di project my-storage-project. Anda dapat menggunakan perintah
gsutil
.gsutil cp my-secret.txt.encrypted gs://my-storage-bucket
Anda dapat mempelajari lebih lanjut cara mengupload objek ke bucket penyimpanan.
[Opsional] Hapus file my-secret.txt teks biasa dari mesin lokal. Ini adalah praktik yang baik untuk file yang berisi data sensitif yang tidak terenkripsi.
Bucket penyimpanan my-storage-bucket kini berisi file my-secret.txt.encrypted, yang dienkripsi menggunakan kunci my-key,
Mendekripsi file yang berisi rahasia
Lakukan langkah-langkah ini sebagai pengguna key-user, menggunakan kedua project.
Download file my-secret.txt.encrypted dari bucket penyimpanan my-bucket. Anda dapat menggunakan perintah
gsutil
.gsutil cp gs://my-storage-bucket/my-secret.txt.encrypted .
Anda dapat mempelajari lebih lanjut cara mendownload objek dari bucket penyimpanan.
Coba baca file menggunakan perintah seperti
less
atau editor teks. Perhatikan bahwa ini bukan file teks biasa.Dekripsi my-secret.txt.encrypted dan simpan data yang didekripsi ke file teks biasa baru bernama my-secret.txt.decrypted, menggunakan kunci yang sama dengan yang Anda gunakan untuk mengenkripsi my-secret.txt.
gcloud kms decrypt --location global \ --keyring storage \ --key my-key \ --ciphertext-file my-secret.txt.encrypted \ --plaintext-file my-secret.txt.decrypted
Anda dapat mempelajari lebih lanjut cara mendekripsi data dengan mengikuti panduan memulai enkripsi data.
Sebagai gantinya, gunakan
raw-decrypt
untuk enkripsi simetris mentah.Baca file my-secret.txt.decrypted menggunakan perintah
cat
. Kontennya sama dengan konten asli my-secret.txt.cat my-secret.txt.decrypted
This is my secret.
[Opsional] Hapus file my-secret.txt.encrypted dan my-secret.txt.decrypted dari komputer lokal.
Pembersihan
Untuk melakukan pembersihan, hapus semua file yang Anda buat di mesin lokal, lalu hapus project [MY_KMS_PROJECT]
dan [MY_STORAGE_PROJECT]
.
Langkah selanjutnya
- Baca selengkapnya tentang pengelolaan rahasia.
- Pelajari pemisahan tugas.
- Pelajari cara memberikan, mengubah, dan mencabut akses ke resource.
- Pelajari cara membuat akun layanan.