Topik ini menunjukkan salah satu cara menggunakan Cloud Key Management Service untuk mengenkripsi data aplikasi secara langsung di klien, sebelum mengirimkannya melalui jaringan.
Dalam contoh ini, data terenkripsi dikirim ke Google Cloud dan disimpan dalam 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 multi-bahasa dan lintas platform yang menyediakan API sederhana dan tahan penyalahgunaan untuk tugas kriptografi umum. Tink dapat digunakan untuk mengenkripsi data sebelum masuk ke penyimpanan data Google Cloud, serta mendukung Java, Python, C++, Go, Objective-C, dan bahasa lainnya, serta layanan penyimpanan objek dan database relasional.
Dalam panduan ini, Anda akan mengenkripsi file menggunakan Cloud KMS sebelum menguploadnya ke bucket. Selanjutnya, Anda mendownload dan mendekripsi data yang sama sehingga Anda dapat membacanya di klien.
Jika Anda mengikuti petunjuk ini, kunci dan semua operasi kriptografis Anda akan tetap berada di Google Cloud dan Anda harus menggunakan Cloud KMS untuk dekripsi. Enkripsi simetris mentah memungkinkan Anda mengenkripsi atau mendekripsi data secara lokal di lokasi atau memindahkan data terenkripsi antar-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 ini. 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, serta mendekripsinya sesuai kebutuhan.
Buat project
Anda membuat project di konsol Google Cloud. Untuk petunjuk langkah demi langkah, lihat Panduan memulai Identity and Access Management.
Dalam organisasi:
Buat project Google Cloud untuk menampung bucket Cloud Storage yang digunakan untuk menyimpan secret. Secret akan disimpan sebagai objek di bucket. Pada langkah-langkah di bawah, 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 secret. Pada langkah-langkah di bawah, 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 di Panduan Memulai Cloud KMS.
Buat pengguna
Anda membuat pengguna dan memberi mereka peran di konsol Google Cloud. Untuk petunjuk langkah demi langkah, lihat panduan memulai Identity and Access Management.
Prosedur ini membuat dua pengguna. key-admin mengelola kunci enkripsi, dan key-user dapat mengenkripsi dan mendekripsi data menggunakan kunci tersebut.
Lakukan prosedur ini di project my-kms-project.
Buat pengguna
key-admin
. Untuk membuat pengguna, Anda memerlukan peranroles/resourcemanager.organizationAdmin
untuk project my-kms-project.Berikan peran Identity and Access Management
roles/cloudkms.admin
kepadakey-admin
.key-admin
dapat membuat dan mengelola kunci.Buat pengguna
key-user
.Berikan peran IAM
roles/cloudkms.cryptoKeyEncrypterDecrypter
kepadakey-user
.key-user
dapat menggunakan kunci untuk mengenkripsi dan mendekripsi data.
Membuat bucket penyimpanan
Lakukan prosedur ini di project
my-storage-project
.
- Buat bucket penyimpanan bernama
my-bucket
. - Berikan peran
roles/storage.objectAdmin
kepada key-user 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 bersifat unik untuk project. Key ring tidak dapat diganti namanya atau dihapus. Gunakan Google Cloud CLI untuk membuat ring kunci.
gcloud kms keyrings create storage \ --location global
Buat kunci bernama my-key di key ring storage, untuk tujuan enkripsi. Nama kunci bersifat 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 secret
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 dalam project my-storage-project. Anda dapat menggunakan perintah gcloud CLI berikut:
gcloud storage 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 dienkripsi.
Bucket penyimpanan my-storage-bucket kini berisi file my-secret.txt.encrypted, yang dienkripsi menggunakan kunci my-key,
Mendekripsi file yang berisi secret
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 gcloud CLI berikut:
gcloud storage 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 file ini bukan file teks biasa.Dekripsi my-secret.txt.encrypted dan simpan data yang didekripsi ke file teks biasa baru yang disebut 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 identik 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 mesin lokal.
Pembersihan
Untuk membersihkan, hapus semua file yang Anda buat di komputer lokal, lalu hapus
project [MY_KMS_PROJECT]
dan
[MY_STORAGE_PROJECT]
.
Langkah selanjutnya
- Baca selengkapnya tentang pengelolaan secret.
- Pelajari pemisahan tugas.
- Pelajari cara memberikan, mengubah, dan mencabut akses ke resource.
- Pelajari cara membuat akun layanan.