Bagaimana cara menyimpan kredensial yang diperlukan oleh suatu aplikasi?


13

Semua orang mengatakan bahwa menyimpan kredensial di kontrol versi (git) adalah hal yang buruk. Jadi harus ada cara lain untuk menyimpan kredensial yang jauh lebih baik.

Aplikasi harus menerima kredensial dari suatu tempat untuk menggunakan layanan yang bergantung padanya. Kredensial ini biasanya disimpan dalam file konfigurasi. Memasukkan setiap server secara manual untuk membuat file itu tidak mungkin, karena server datang dan pergi tanpa campur tangan manusia.

Bagaimana cara mengelola kredensial aplikasi?


4
Juga ini mungkin terlalu luas untuk satu jawaban yang tidak seukuran buku.
coderanger

1
@coderanger Melihat presentasi Anda, kategorisasi Anda dari berbagai jenis rahasia sangat bagus. Dan saya dapat melihat bagaimana menurut Anda ini sebuah buku ... tetapi pertanyaan di atas tidak meminta klasifikasi, hanya solusi untuk masalah tertentu.
Evgeny

2
Jika Anda memiliki situasi tertentu, silakan edit pertanyaan untuk memasukkan lebih banyak detail seperti jenis rahasia yang digunakan (kata sandi basis data, kunci TLS, dll).
coderanger

1
Ini terlalu luas. Ada setidaknya 14 alat yang tersedia di luar sana untuk melakukan ini, tidak termasuk skrip atau templat khusus: gist.github.com/maxvt/bb49a6c7243163b8120625fc8ae3f3cd Rincian tambahan diperlukan (seperti diperlukan CLI, apakah untuk solusi cloud-asli atau untuk besar aplikasi monolitik, dll.)
Alexandre

1
@Alexandre Hah, saya membuka itu dan berpikir "yay daftar kompilasi yang bagus" dan kemudian melihat diri saya dikutip di bagian bawah :)
coderanger

Jawaban:


5

Pengelolaan rahasia aplikasi yang tepat selalu menjadi tantangan. Tantangan baru datang dengan adopsi cloud. Ada presentasi OWASP yang hebat tentang kenyataan dan tantangan menyimpan rahasia di awan.

Anda mungkin terkejut mendengar bahwa menyimpan rahasia ke dalam kode sumber adalah salah satu solusi (atau "arsitektur") yang disajikan. Itu karena, saat ini, tidak ada arsitektur yang sempurna atau cara melakukan ini. Pada akhirnya, rahasia Anda mungkin dienkripsi ... tetapi apa yang menjaga kunci enkripsi? "Turtles sepanjang jalan", kata mereka.

Setiap jenis manajemen rahasia memiliki kekuatan dan kelemahannya dan presentasi sudah mencakup itu. Sebagai gantinya, saya akan mencoba membahas beberapa fitur yang mungkin Anda cari dalam solusi manajemen rahasia (kredensial):

  • Kontrol akses: dapatkah Anda memberikan akses tulis ke admin dan membaca akses ke aplikasi? Bisakah Anda membatasi aplikasi apa yang dapat dibaca (aplikasi A hanya memiliki akses ke rahasia itu)?
  • Log audit: diperlukan untuk banyak laporan kepatuhan dan cara yang baik untuk mengetahui apakah ada sesuatu yang salah
  • Penyimpanan rahasia yang aman: bagaimana solusinya menyimpan rahasia? DB terenkripsi? FS terenkripsi? Siapa / apa yang memegang kunci enkripsi, jika ada? Bagaimana kunci ini digunakan - satu kali saat startup dan kemudian dibuang dengan aman?
  • Rotasi atau pembaruan kunci / kata sandi: jika suatu rahasia dikompromikan, dapatkah Anda mencabutnya dan mengirim rahasia yang diperbarui ke aplikasi? Bisakah / haruskah aplikasi menggabungkan layanan manajemen rahasia?
  • Kompatibilitas: Beberapa solusi ini menawarkan integrasi yang erat dengan bahasa atau kerangka kerja tertentu. Beberapa menawarkan REST API. Apakah Anda tertarik dengan ini?

Dengan melihat item-item ini, bagaimana mereka penting bagi Anda dan bagaimana mereka diterapkan oleh solusi, Anda akan dapat memilih salah satu layanan manajemen rahasia di luar sana .


3

Untuk lingkungan murni berbasis EC2, solusi termudah adalah dengan menggunakan peran AWS IAM dan kebijakan bucket S3. Beberapa formulasi dari pola ini juga termasuk KMS untuk enkripsi dan DynamoDB bukan S3 untuk penyimpanan tetapi saya belum menemukan alasan yang sangat menarik untuk menggunakan keduanya. Lihat https://github.com/poise/citadel , ini khusus ditujukan untuk pengguna Chef tetapi pola yang mendasari bekerja untuk apa pun, Anda mungkin harus membuat pembantu sendiri untuk melakukan unduhan aktual dari S3.


1
Untuk masa depan, ini menjawab versi pertanyaan yang lebih awal dan lebih spesifik.
coderanger

2
AWS sekarang menyediakan layanan khusus untuk penyimpanan bernilai kunci, termasuk enkripsi melalui KMS: aws.amazon.com/ec2/systems-manager/parameter-store .
bnzmnzhnz
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.