Chef: kantong data terenkripsi, melindungi kunci enkripsi

8

Saat Anda menggunakan fitur tas data terenkripsi untuk Chef, bagaimana cara Anda menyebarkan kunci ke banyak server? Jika Anda memasukkannya ke dalam resep, siapa pun yang memiliki akses ke server atau klien chef mana pun dapat menarik kunci dan berpotensi mendekripsi salah satu dari databag.

Bagaimana Anda memastikan bahwa kuncinya ada pada mesin yang membutuhkannya, tetapi juga aman dari siapa pun yang mengintip?

Kyle
sumber

Jawaban:

8

Sayangnya sebenarnya tidak banyak yang bisa Anda lakukan karena kuncinya perlu berada di suatu tempat pada simpul Chef dalam teks biasa. Jika seseorang memiliki shell atau akses lokal ke kotak maka mungkin bagi mereka untuk membaca kunci.

Untuk mengurangi hal-hal sedikit saya menambahkan berikut ini ke basenode saya (yaitu beberapa resep atau peran yang umum untuk semua node):

directory "/etc/chef/keys" do
  mode 0700
  owner "root"
  group "root"
end

dan mekanisme distribusi kunci apa pun yang Anda miliki menempatkan kunci di lokasi itu. Izin dan kepemilikan mencegah pembacaan kunci jika seseorang lupa untuk menempatkan izin yang benar pada file kunci.

Seperti yang saya lihat, kantung data terenkripsi lebih untuk melindungi materi utama agar tidak dapat dibaca dalam sistem kontrol sumber, dan kurang sebagai fitur keamanan pada node Chef sendiri.

Tim Potter
sumber
3

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.

jLi
sumber
0

Kunci saya dimasukkan ke dalam AMI yang kami gunakan atau gambar yang kami gunakan. Saya tidak melakukannya sebagai bagian dari bootstrap karena data itu tidak aman. Anda biasanya dapat melihat data dalam log dan semacamnya jika Anda tidak berhati-hati.

Davie Jones
sumber