Halaman 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 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 multi-bahasa dan lintas platform yang menyediakan API untuk tugas kriptografi umum. Library 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 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 di antara berbagai library dan penyedia layanan 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 panduan 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.
Buat project berikut dalam organisasi Anda:
Buat project Google Cloud untuk menyimpan bucket Cloud Storage yang digunakan untuk menyimpan secret. Secret akan disimpan sebagai objek di bucket. Project ini disebut STORAGE_PROJECT_ID.
Buat project Google Cloud kedua untuk mengelola kunci Cloud KMS yang digunakan untuk mengenkripsi dan mendekripsi secret. Project ini disebut KEY_PROJECT_ID.
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. Administrator kunci mengelola kunci enkripsi, dan pengguna kunci dapat mengenkripsi dan mendekripsi data menggunakan kunci tersebut.
Lakukan prosedur ini di project KEY_PROJECT_ID.
Buat akun administrator kunci.
Berikan peran Identity and Access Management
roles/cloudkms.admin
kepada administrator kunci enkripsi. Peran ini memungkinkan administrator kunci membuat dan mengelola kunci.Buat akun pengguna kunci.
Berikan peran IAM
roles/cloudkms.cryptoKeyEncrypterDecrypter
kepada pengguna utama. Peran ini memungkinkan pengguna kunci mengenkripsi dan mendekripsi data.
Membuat bucket penyimpanan
Lakukan prosedur ini di project STORAGE_PROJECT_ID
.
- Buat bucket penyimpanan bernama
STORAGE_BUCKET
. - Berikan peran
roles/storage.objectAdmin
di bucket penyimpanan STORAGE_BUCKET ke akun pengguna utama.
Buat kunci enkripsi
Lakukan prosedur ini sebagai pengguna administrator utama dalam project KEY_PROJECT_ID.
Buat key ring. Nama key ring harus unik dalam project. Key ring tidak dapat diganti namanya atau dihapus. Gunakan Google Cloud CLI untuk membuat ring kunci.
gcloud kms keyrings create KEY_RING \ --location LOCATION
Ganti kode berikut:
KEY_RING
: nama yang akan digunakan untuk ring kunci penyimpanan—misalnya,storage
.LOCATION
: lokasi Anda ingin membuat key ring. Lokasi ini harus secara geografis dekat dengan lokasi tempat Anda ingin membuat bucket Cloud Storage.
Buat kunci enkripsi di key ring. Nama kunci harus unik dalam 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 KEY_NAME \ --location LOCATION \ --keyring KEY_RING \ --purpose encryption
Ganti kode berikut:
LOCATION
: lokasi tempat Anda membuat key ring.KEY_NAME
: nama yang akan digunakan untuk kunci penyimpanan—misalnya,storage
.KEY_RING
: nama yang Anda gunakan untuk ring kunci penyimpanan—misalnya,storage
.
Catatan: Untuk menggunakan kunci enkripsi simetris mentah, tetapkan kolom tujuan ke
raw-encryption
.
Anda dapat mempelajari lebih lanjut cara Membuat key ring dan kunci.
Mengenkripsi file yang berisi secret
Lakukan prosedur ini sebagai akun pengguna utama, yang bekerja di kedua project.
Di komputer lokal, simpan secret.
echo "SECRET_TEXT" > PATH_TO_SECRET
Ganti kode berikut:
SECRET_TEXT
: secret yang ingin Anda lindungi, dalam teks biasa—misalnya,this is a secret
.PATH_TO_SECRET
: jalur tempat Anda ingin membuat secret—misalnya,secret.txt
.
Enkripsi secret menggunakan Cloud KMS dan kunci enkripsi.
gcloud kms encrypt \ --location LOCATION \ --keyring KEY_RING \ --key KEY_NAME \ --plaintext-file PATH_TO_SECRET \ --ciphertext-file PATH_TO_ENCRYPTED_SECRET
Ganti kode berikut:
LOCATION
: lokasi tempat Anda membuat key ring.KEY_RING
: nama key ring.KEY_NAME
: nama kunci enkripsi.PATH_TO_SECRET
: jalur tempat Anda membuat secret.PATH_TO_ENCRYPTED_SECRET
: jalur tempat Anda ingin menyimpan secret terenkripsi—misalnya,secret.txt.encrypted
.
Anda dapat mempelajari lebih lanjut cara mengenkripsi data dengan mengikuti panduan memulai enkripsi data.
Gunakan
raw-encrypt
untuk enkripsi simetris mentah.Upload file secret terenkripsi ke bucket penyimpanan. Anda dapat menggunakan perintah gcloud CLI berikut:
gcloud storage cp PATH_TO_ENCRYPTED_SECRET gs://STORAGE_BUCKET
Anda dapat mempelajari lebih lanjut cara mengupload objek ke bucket penyimpanan.
Opsional: Hapus file secret teks biasa (
PATH_TO_SECRET
) dari mesin lokal. Ini adalah praktik yang baik untuk file yang berisi data sensitif yang tidak dienkripsi.
Bucket penyimpanan STORAGE_BUCKET
kini berisi file secret
terenkripsi, yang dienkripsi menggunakan kunci enkripsi KEY_NAME
.
Mendekripsi file yang berisi secret
Lakukan langkah-langkah ini sebagai akun pengguna utama, yang bekerja di kedua project.
Download file secret terenkripsi dari bucket penyimpanan. Anda dapat menggunakan perintah gcloud CLI berikut:
gcloud storage cp gs://STORAGE_BUCKET/PATH_TO_ENCRYPTED_SECRET .
Anda dapat mempelajari lebih lanjut cara mendownload objek dari bucket penyimpanan.
Dekripsi file menggunakan kunci yang sama dengan yang Anda gunakan untuk mengenkripsinya.
gcloud kms decrypt --location LOCATION \ --keyring KEY_RING \ --key KEY_NAME \ --ciphertext-file PATH_TO_ENCRYPTED_SECRET \ --plaintext-file PATH_TO_DECRYPTED_SECRET
Ganti kode berikut:
LOCATION
: lokasi tempat Anda membuat key ring.KEY_RING
: nama key ring.KEY_NAME
: nama kunci enkripsi.PATH_TO_ENCRYPTED_SECRET
: jalur ke secret terenkripsi yang didownload—misalnya,secret.txt.encrypted
.PATH_TO_DECRYPTED_SECRET
: jalur tempat Anda ingin menyimpan secret yang didekripsi—misalnya,secret_decrypted.txt
.
Anda dapat mempelajari lebih lanjut cara mendekripsi data dengan mengikuti panduan memulai enkripsi data.
Gunakan
raw-decrypt
untuk enkripsi simetris mentah.Sekarang Anda dapat membaca teks biasa yang didekripsi dari secret menggunakan
cat
atau editor teks. Kontennya sama dengan konten asliPATH_TO_SECRET
.Opsional: Hapus file
PATH_TO_ENCRYPTED_SECRET
danPATH_TO_DECRYPTED_SECRET
dari mesin lokal.
Pembersihan
Untuk membersihkan, hapus semua file yang Anda buat di komputer lokal, lalu hapus
project KEY_PROJECT_ID
dan STORAGE_PROJECT_ID
.
Langkah selanjutnya
- Baca selengkapnya tentang pengelolaan secret.
- Pelajari pemisahan tugas.
- Pelajari cara memberikan, mengubah, dan mencabut akses ke resource.
- Pelajari cara membuat akun layanan.