Mengenkripsi data aplikasi

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:

  1. 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.

  2. 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.

  3. 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.

  1. Buat pengguna key-admin. Untuk membuat pengguna, Anda memerlukan peran roles/resourcemanager.organizationAdmin untuk project my-kms-project.

  2. Berikan peran Identity and Access Management roles/cloudkms.admin kepada key-admin. key-admin dapat membuat dan mengelola kunci.

  3. Buat pengguna key-user.

  4. Berikan peran IAM roles/cloudkms.cryptoKeyEncrypterDecrypter kepada key-user. key-user dapat menggunakan kunci untuk mengenkripsi dan mendekripsi data.

Membuat bucket penyimpanan

Lakukan prosedur ini di project my-storage-project.

  1. Buat bucket penyimpanan bernama my-bucket.
  2. 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.

  1. 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
    
  2. 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.

  1. Di komputer lokal, buat file bernama my-secret.txt, yang berisi teks "This is my secret".

    echo "This is my secret" > my-secret.txt
    
  2. 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.

  3. 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.

  4. [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.

  1. 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.

  2. Coba baca file menggunakan perintah seperti less atau editor teks. Perhatikan bahwa file ini bukan file teks biasa.

  3. 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.

  4. 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.
  5. [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