Beberapa fungsi yang saya tulis perlu menyimpan dan membagikan satu set kunci kriptografi (<1kb) di suatu tempat sehingga:

  • itu dibagikan di seluruh fungsi dan dalam instance dari fungsi yang sama
  • itu dipertahankan setelah fungsi disebarkan

Kunci dimodifikasi (dan ditulis) setiap 4 jam atau lebih, berdasarkan apakah kunci telah kedaluwarsa atau kunci baru perlu dibuat.

Saat ini, saya menyimpan kunci sebagai biner terenkripsi dalam ember cloud dengan akses terbatas pada fungsi itu. Ini berfungsi, kecuali bahwa itu cukup lambat (~ 500ms untuk baca / tulis yang diperlukan saat memperbarui kunci).

Saya telah mempertimbangkan beberapa solusi lain:

  • Redis: cepat, tetapi berlebihan mengingat harganya ($40/bulan) akan membutuhkan biaya untuk menyimpan satu nilai
  • Cloud SQL: fungsi sudah terhubung ke instance cloud sehingga tidak akan dikenakan biaya lebih banyak
  • Menjatuhkan semuanya dan menggunakan KMS. Sayangnya itu tidak akan memenuhi persyaratan yang saya miliki.

Pustaka yang saya gunakan dalam fungsi saya tersedia di sini.

Apakah ada cara yang lebih baik untuk menyimpan satu gumpalan data kecil untuk fungsi cloud (dan mungkin alat lain seperti GKE)?


Sunting

Solusi yang akhirnya saya gunakan adalah menggunakan satu tabel dalam database yang sudah terhubung dengan aplikasi. Ini juga sekitar 5 kali lebih cepat daripada menggunakan bucket (<100ms).

Moral dari cerita ini adalah menggunakan apa pun yang sudah disediakan untuk menyimpan kuncinya. Jika menyimpan kunci menjadi masalah, maka menggunakan fungsi kombo KMS + cloud untuk rotasi yang dijelaskan di bawah sepertinya merupakan opsi yang bagus.

Semua kode + detail selengkapnya tersedia di sini.

1
gdollardollar 20 November 2020, 13:55

1 menjawab

Jawaban Terbaik

Pendekatan yang lebih baik adalah mengelola kunci Anda dengan Cloud KMS. Namun, seperti yang Anda sebutkan sebelumnya, Cloud KMS tidak secara otomatis menghapus materi versi kunci lama dan Anda harus menghapus versi lama secara manual yang saya duga adalah hal yang tidak ingin Anda lakukan.

Kemungkinan lain adalah menyimpan kunci di Firestore. Karena untuk ini Anda tidak perlu menyediakan infrastruktur khusus apa pun seperti dengan Redis Memorystore dan Postgres Cloud SQL, akan lebih mudah untuk mengelola dan menskalakan dalam jangka panjang.

Ide umumnya adalah memiliki Cloud Function yang dipicu oleh Cloud Scheduler setiap 4 jam, dan fungsi ini akan memutar kunci di Cloud Firestore Anda.

Bagaimana ini terdengar bagi Anda?

1
Chris32 20 November 2020, 11:42