Mengenkripsi data aplikasi

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:

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

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

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

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

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

  3. Buat pengguna key-user.

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

Membuat bucket penyimpanan

Jalankan prosedur ini di project my-storage-project.

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

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

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

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

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

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

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

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