Bagaimana cara menyimpan rahasia terenkripsi dalam kode untuk proyek serverless.com?

12

Dengan serverless.com, cara termudah untuk mengekspos rahasia ke fungsi AWS Lambda adalah menyimpannya di serverless.ymlfile (dienkripsi dengan KMS, misalnya).

Tetapi melakukan rahasia terenkripsi untuk Git bukanlah hal terbaik di dunia. Membutuhkan perubahan kode ketika rahasia harus diubah, untuk satu hal.

Tetapi dalam hal keamanan saja, apa alternatif yang lebih baik? misalnya rahasianya dapat disimpan dalam S3 (dienkripsi), dengan Lambda diberikan akses ke lokasi itu dan kunci KMS, tetapi apakah itu sebenarnya lebih baik dengan cara apa pun yang bermakna?

Assaf Lavie
sumber
gymanstics semantik opinionphobia ini menarik minat saya.
Assaf Lavie

Jawaban:

7

Ada beberapa elemen yang perlu dipertimbangkan di sini:

  1. Sangat berharga untuk memiliki kemampuan untuk mempertahankan konfigurasi dengan irama rilis terpisah dari kode yang sedang dikonfigurasi. Melakukan hal itu mendorong rotasi kredensial secara otomatis, lakukan secara teratur membuatnya tidak menyakitkan.

  2. Ini sepenuhnya masuk akal dari sudut pandang "Infrastruktur sebagai Kode" untuk menyimpan semua konfigurasi di Git, walaupun mungkin dalam repositori yang berbeda karena ruang lingkup konfigurasi cenderung menjangkau lebih dari satu layanan.

  3. Dengan asumsi kedua pernyataan di atas relevan dengan situasi Anda, saya akan cenderung untuk mengenkripsi data dengan KMS dan menyimpannya dalam S3 atau DynamoDB. Saya bahkan akan melangkah lebih jauh dengan mengatakan bahwa dalam situasi yang sangat sederhana mungkin cocok untuk mengenkripsi dan menyimpan data dalam KMS itu sendiri.

Ada beberapa perpustakaan open source yang akan mendukung operasi ini:

Richard Slater
sumber
1

Saya biasanya memperlakukan rahasia sebagai data konfigurasi dalam ruang lingkup. Dengan demikian, ia tidak hidup di samping kode karena mereka ditangani oleh jadwal dan proses rilis yang berbeda. Repositori git yang terpisah, KMS, dynamo, s3, atau di dalam sistem manajemen konfigurasi Anda (database chef-vault / terenkripsi di dunia chef) adalah tempat yang bagus. Pada dasarnya, Anda tidak ingin harus membangun dan menggunakan rilis baru perangkat lunak Anda untuk mendapatkan rahasia yang diperbarui.

Jika kebutuhan rahasia manajemen Anda lebih kompleks, sesuatu seperti Hasicorp Vault ( https://github.com/hashicorp/vault ) akan menjadi pilihan yang baik.

Mat
sumber