EDB saya dipisahkan oleh:
- lingkungan Hidup
- wewenang
Kami mengunggah semua kunci dengan akhiran khusus ke setiap instance EC2 baru saat kami mem-bootstrapnya dan kemudian menghapus semua kunci yang belum pernah digunakan oleh salah satu resep di run_list pada akhir pertama kali menjalankan chef-client (yang akan menjadi tepat saat instance dimulai.)
Semua file diunggah sebagai pemilik dan grup "root" dan dengan hanya izin baca.
Setiap resep yang menggunakan EDB, menghasilkan nama EDB dan nama file kunci pada saat run resep dengan menggabungkan 'edb_' + lingkungan node + resep / nama item-spesifik + '.key' dan kemudian mencari kunci dengan nama ini . (Jika tidak ada ini melempar pengecualian secara default.)
Jadi, untuk server couchdb kami, menjalankan peran yang disebut, 'sofa', untuk mendapatkan kredensial yang kami gunakan untuk pengguna admin di lingkungan dev, resep mencari kunci bernama 'edb_dev_couch.key'
Itu kemudian mencari tas data bernama 'edb_dev' untuk item bernama 'couch_credentials'.
Untuk mengelola kunci, saya saat ini menggunakan pendekatan sederhana:
- unggah semua kunci EDB melalui skrip bootstrap dan tambahkan '_x' ke nama-nama kunci
- Mintalah setiap resep yang menggunakan tampilan EDB di direktori kunci untuk kunci yang dibutuhkan.
- jika kunci ada dengan sufiks '_x', ganti nama kunci untuk menghapus sufiks '_x'.
- tambahkan resep di akhir setiap run_list yang menghapus semua kunci dengan akhiran '_x'
Mudah-mudahan, ini membatasi waktu bahwa kunci di luar ruang lingkup dari satu node rentan sampai mesin telah di-bootstrap dan menjalankan chef_client yang pertama.
Ini adalah putaran pertama pengujian kami tentang cara mengamankan kunci, tetapi sejauh ini memenuhi kebutuhan kami saat ini karena mencegah satu server dev yang di-root agar dapat segera mengakses kredensial server lain yang disimpan dalam EDB.
Untuk mempertahankan memiliki satu resep di akhir setiap daftar run, saya menggunakan pekerjaan exec knife yang memastikan resep delete_keys ini persis resep terakhir pada setiap node.