Kunci enkripsi yang disediakan pelanggan

Penyiapan

Halaman ini membahas kunci enkripsi yang disediakan pelanggan. Untuk opsi enkripsi lainnya, lihat Opsi Enkripsi Data.

Ringkasan

Sebagai lapisan tambahan selain enkripsi Cloud Storage standar, Anda dapat memilih untuk menyediakan kunci enkripsi AES-256 yang dienkode dalam Base64 standar. Kunci ini dikenal sebagai kunci enkripsi yang disediakan pelanggan. Jika Anda memberikan kunci enkripsi yang disediakan pelanggan, Cloud Storage tidak akan menyimpan kunci Anda di servernya secara permanen atau mengelola kunci Anda.

Sebagai gantinya, Anda menyediakan kunci untuk setiap operasi Cloud Storage dan kunci Anda akan dihapus permanen dari server Cloud Storage setelah operasi selesai. Cloud Storage hanya menyimpan hash kriptografis kunci, sehingga permintaan berikutnya dapat divalidasi terhadap hash tersebut. Kunci Anda tidak dapat dipulihkan dari hash ini, dan hash tersebut tidak dapat digunakan untuk mendekripsi data Anda.

Sebaiknya cadangkan setiap kunci ke lokasi yang aman dan lakukan tindakan pencegahan untuk memastikan kunci Anda tidak dibagikan kepada pihak yang tidak tepercaya. Jika file atau mesin yang berisi kunci enkripsi Anda disusupi, Anda harus segera melakukan rotasi kunci untuk semua objek yang dienkripsi dengan kunci yang disusupi.

Kapan kunci digunakan?

Saat Anda menerapkan kunci enkripsi yang disediakan pelanggan ke suatu objek, Cloud Storage akan menggunakan kunci tersebut saat mengenkripsi:

  • Data objek.
  • Checksum CRC32C objek.
  • Hash MD5 objek.

Cloud Storage menggunakan enkripsi dalam penyimpanan default untuk mengenkripsi metadata lainnya untuk objek, termasuk nama objek. Dengan begitu, Anda dapat membaca dan memperbarui metadata umum, serta mencantumkan, menimpa, dan menghapus objek, tanpa memerlukan kunci enkripsi yang disediakan pelanggan. Namun, untuk melakukan tindakan ini, Anda harus memiliki izin yang memadai untuk melakukannya.

Misalnya, jika objek dienkripsi dengan kunci enkripsi yang disediakan pelanggan, kunci tersebut harus digunakan untuk menjalankan operasi pada objek seperti mendownload atau memindahkannya. Jika Anda mencoba membaca metadata objek tanpa memberikan kunci, Anda akan menerima metadata seperti nama objek dan Content-Type, tetapi bukan checksum CRC32C atau hash MD5 objek. Jika Anda memberikan kunci dengan permintaan untuk metadata objek, checksum CRC32C dan hash MD5 objek akan disertakan dalam metadata.

Perilaku penulisan ulang

Jika Anda menulis ulang objek yang dienkripsi dengan kunci enkripsi yang disediakan pelanggan tanpa memberikan kunci untuk mengenkripsi objek yang ditulis ulang, hal berikut akan terjadi:

Pemeriksaan HTTPS

Untuk melindungi data saat berpindah melalui internet selama operasi baca dan tulis, gunakan Transport Layer Security, yang umumnya dikenal sebagai TLS atau HTTPS. TLS diperlukan saat Anda menyediakan kunci enkripsi. Jika Anda tidak sengaja menggunakan kunci enkripsi melalui koneksi yang tidak terenkripsi (HTTP), ada kemungkinan penyerang menyadap kunci Anda. Karena kemungkinan ini, Cloud Storage API akan menampilkan pesan error yang memperingatkan Anda bahwa kunci Anda mungkin disusupi. Jika ini terjadi, Anda harus segera merotasi kunci.

Pembatasan

Pembatasan berikut berlaku saat menggunakan kunci enkripsi yang disediakan pelanggan:

  • Cloud Storage Transfer Service dan Cloud Dataflow saat ini tidak mendukung objek yang dienkripsi dengan kunci enkripsi yang disediakan pelanggan.

  • Anda tidak dapat menggunakan Konsol Google Cloud untuk mendownload objek yang dienkripsi dengan kunci enkripsi yang disediakan pelanggan. Demikian pula, saat menggunakan Konsol Google Cloud untuk mengupload objek, Anda tidak dapat mengenkripsi objek dengan kunci enkripsi yang disediakan pelanggan.

  • Anda hanya dapat menetapkan kunci enkripsi yang disediakan pelanggan pada masing-masing objek. Anda tidak dapat menetapkan kunci enkripsi default yang disediakan pelanggan untuk bucket.

  • Jika Anda melakukan operasi compose pada objek yang dienkripsi oleh kunci enkripsi yang disediakan pelanggan, objek komponen harus dienkripsi oleh kunci yang sama, dan Anda harus memberikan kunci dengan permintaan penyusunan. Objek gabungan yang dihasilkan dienkripsi oleh kunci yang sama.

  • Saat menyajikan objek yang dienkripsi dengan kunci enkripsi yang disediakan pelanggan, Cloud Storage mengabaikanCache-Control metadata yang terkait dengan objek dan menyalurkan objek dengan Cache-Control yang ditetapkan ke private, max-age=0.

Kunci enkripsi dengan REST API

Jika Anda menggunakan kunci enkripsi yang disediakan pelanggan dan bekerja secara langsung dengan JSON atauXML Anda harus memberikan kunci AES-256 dan hash SHA256 untuk kunci tersebut. Anda harus menyimpan kunci AES-256 dan hash SHA256 kunci dengan aman. Cloud Storage menyimpan hash SHA256 kunci Anda di metadata objek, yang dapat Anda gunakan nanti. Hash SHA256 ini tidak dapat digunakan oleh Cloud Storage (atau siapa pun) untuk mendekripsi data Anda. Kunci ini disimpan sebagai cara untuk mengidentifikasi kunci AES-256 secara unik yang digunakan untuk mengenkripsi objek tertentu.

Header permintaan

Sertakan header HTTP berikut dalam permintaan JSON atau XML Anda:

Nama header Nilai Deskripsi
x-goog-encryption-algorithm string Algoritma enkripsi yang akan digunakan. Anda harus menggunakan nilai AES256.
x-goog-encryption-key string String berenkode Base64 RFC 4648 dari kunci enkripsi AES-256 Anda.
x-goog-encryption-key-sha256 string String berenkode RFC 4648 Base64 dari hash SHA256 kunci enkripsi Anda.

Jika Anda melakukan operasi penulisan ulang dengan JSON API, header yang tercantum di atas akan digunakan untuk mengenkripsi objek tujuan, dan header berikut akan digunakan untuk mendekripsi objek sumber:

Nama header Nilai Deskripsi
x-goog-copy-source-encryption-algorithm string Algoritma enkripsi yang akan digunakan. Anda harus menggunakan nilai AES256.
x-goog-copy-source-encryption-key string String berenkode Base64 RFC 4648 dari kunci enkripsi AES-256 objek sumber.
x-goog-copy-source-encryption-key-sha256 string String berenkode Base64 RFC 4648 dari hash SHA256 kunci enkripsi objek sumber.

Respons

JSON

Saat menggunakan JSON API, metadata untuk kunci enkripsi yang disediakan pelanggan akan ditampilkan dalam isi respons, yang mencakup properti berikut:

Nama properti Nilai Deskripsi
customerEncryption objek Informasi tentang enkripsi yang digunakan untuk permintaan.
customerEncryption.encryptionAlgorithm string Algoritma enkripsi yang digunakan. Selalu berisi nilai AES256.
customerEncryption.keySha256 string String berenkode RFC 4648 Base64 dari hash SHA256 kunci enkripsi Anda. Anda dapat menggunakan hash SHA256 ini untuk mengidentifikasi secara unik kunci enkripsi AES-256 yang diperlukan untuk mendekripsi objek, yang harus Anda simpan dengan aman.

XML

Saat menggunakan XML API, respons akan menyertakan header berikut:

Nama header Nilai Deskripsi
x-goog-encryption-algorithm string Algoritma enkripsi yang digunakan. Selalu berisi nilai AES256.
x-goog-encryption-key-sha256 string String berenkode RFC 4648 Base64 dari hash SHA256 kunci enkripsi Anda. Anda dapat menggunakan hash SHA256 ini untuk mengidentifikasi secara unik kunci enkripsi AES-256 yang diperlukan untuk mendekripsi objek, yang harus Anda simpan dengan aman.

Anda akan menerima error HTTP 400 dalam kasus berikut:

  • Anda mengupload objek menggunakan kunci enkripsi yang disediakan pelanggan, dan mencoba untuk melakukan operasi lain pada objek tersebut (selain meminta atau memperbarui sebagian besar metadata atau menghapus objek) tanpa memberikan kunci tersebut.
  • Anda mengupload objek menggunakan kunci enkripsi yang disediakan pelanggan, dan mencoba melakukan operasi lain pada objek tersebut dengan kunci yang salah.
  • Anda mengupload objek tanpa memberikan kunci enkripsi yang disediakan pelanggan, dan Anda mencoba melakukan operasi lain pada objek tersebut dengan kunci enkripsi yang disediakan pelanggan.
  • Anda menentukan algoritma enkripsi, kunci, atau hash SHA256 yang tidak valid.

Kunci enkripsi dengan gcloud storage

Google Cloud CLI mendukung penggunaan kunci enkripsi yang disediakan pelanggan. Saat menggunakan gcloud CLI dengan kunci enkripsi yang disediakan pelanggan, perhatikan hal-hal berikut:

  • Kunci yang ditetapkan sebagai kunci enkripsi digunakan dalam perintah sebagai kunci enkripsi dan, jika diperlukan, sebagai kunci dekripsi.

  • Anda dapat memilih untuk menentukan hingga 100 kunci dekripsi, yang hanya digunakan untuk mendekripsi objek.

  • Saat mendekripsi, hash SHA256 dari kunci enkripsi dan dekripsi yang disediakan akan dihitung, dan kunci yang benar untuk digunakan objek tertentu akan dipilih dengan mencocokkan hash SHA256 dalam metadata objek.

  • Saat menambahkan atau merotasi kunci enkripsi yang disediakan pelanggan untuk objek yang ada, objek tersebut akan ditulis ulang sebagai bagian dari permintaan. Hal ini berlaku bahkan untuk perintah gcloud storage objects update.

  • Perintah daftar yang dapat menampilkan hash MD5 atau CRC32C untuk objek yang dienkripsi dengan kunci yang disediakan pelanggan melakukan permintaan GET metadata tambahan untuk setiap objek tersebut. Permintaan tambahan ini dapat membuat listingan jauh lebih lambat dibandingkan listingan objek yang dienkripsi dengan enkripsi Cloud Storage standar.

  • Jika kunci enkripsi dapat atau memang berubah selama operasi tulis atau penyalinan yang selesai sebagian, operasi tulis atau salin yang selesai sebagian, seperti saat Anda menjalankan ulang upload cp setelah memaksa keluar atau mengalami waktu tunggu habis jaringan, operasi akan dimulai ulang untuk memastikan bahwa objek tujuan ditulis dengan kunci baru.

Rotasi kunci enkripsi

Jika objek dienkripsi menggunakan kunci enkripsi yang disediakan pelanggan, Anda dapat merotasi kunci objek dengan menulis ulang objek. Penulisan ulang didukung melalui JSON API, tetapi tidak melalui XML API. Lihat Merotasi kunci enkripsi untuk contoh rotasi kunci.

Langkah selanjutnya