Baru-baru ini, saya memiliki pengembang yang secara tidak sengaja mencoba mengembalikan database ke produksi, ketika ia seharusnya mengembalikan ke salinan stage. Sangat mudah dilakukan, mengingat bahwa nama db serupa, yaitu, CustomerName_Staging versus CustomerName_Production.
Idealnya, saya memiliki ini di kotak yang sepenuhnya terpisah, tetapi itu mahal, dan, sebenarnya, itu tidak mencegah hal yang sama terjadi jika pengguna terhubung ke kotak yang salah.
Ini bukan masalah keamanan, per se - itu adalah pengguna yang benar yang bekerja dengan database pementasan, dan jika ada pekerjaan yang harus dilakukan pada basis data produksi, itu akan menjadi miliknya juga. Saya ingin memiliki petugas penyebaran untuk memisahkan masalah-masalah itu, tetapi timnya tidak cukup besar untuk itu.
Saya ingin mendengar beberapa saran dalam hal praktik, konfigurasi, dan kontrol tentang cara mencegah hal ini.
sumber
Jawaban:
Jika ini adalah sesuatu yang Anda sering lakukan, otomatisasi. Dan karena Anda berdua pengembang, menulis beberapa kode harus di ruang kemudi Anda. :) Serius sekali ... dengan mengotomatiskannya, Anda dapat melakukan hal-hal seperti:
Dll. Anda hanya dibatasi oleh imajinasi Anda.
sumber
Saya tidak setuju dengan asumsi dalam pertanyaan - ini adalah keamanan - tetapi saya juga tidak setuju bahwa otomasi akan menyelamatkan hari itu sendiri. Saya akan mulai dengan masalah:
Anda seharusnya tidak dapat secara tidak sengaja melakukan sesuatu untuk produksi!
Itu termasuk melakukan hal-hal otomatis secara tidak sengaja.
Anda membingungkan sistem keamanan dengan konsep-konsep seperti "siapa yang boleh melakukan apa". Akun pengembangan Anda seharusnya hanya dapat menulis ke salinannya, server kontrol versi, dan database dev. Jika mereka dapat membaca / menulis produksi, mereka dapat diretas dan dieksploitasi untuk mencuri data pelanggan atau (seperti yang telah Anda tunjukkan) dapat disalahgunakan untuk kehilangan data pelanggan.
Anda harus mulai dengan memilah alur kerja Anda.
Akun pengembang Anda harus dapat menulis ke salinan mereka sendiri, kontrol versi dan mungkin menarik dari kontrol versi ke lingkungan pengujian.
Pengguna cadangan hanya dapat membaca dari produksi dan menulis ke toko cadangan Anda (yang harus dilindungi dengan tepat).
Melakukan membaca / menulis pada produksi harus memerlukan otentikasi khusus dan tidak nyaman . Anda seharusnya tidak dapat menyelinap ke dalamnya atau lupa Anda login. Kontrol akses fisik berguna di sini. Kartu pintar, flip-switch untuk "mempersenjatai" akun, simultan-putar akses tombol ganda.
Mengakses produksi seharusnya bukan sesuatu yang perlu Anda lakukan setiap hari. Sebagian besar pekerjaan harus pada platform pengujian Anda dan penyebaran di luar jam yang dibuat untuk produksi setelah pengawasan cermat. Sedikit ketidaknyamanan tidak akan membunuhmu.
Otomasi adalah bagian dari solusi.
Saya tidak buta terhadap kenyataan bahwa perputaran penuh (mengunggah ke VCS, memeriksa cakupan, menarik ke server uji, menjalankan tes otomatis, reauthentication, membuat cadangan, menarik dari VCS) adalah proses yang panjang.
Di situlah otomatisasi dapat membantu, sesuai jawaban Ben. Ada banyak bahasa scripting yang membuat menjalankan tugas-tugas tertentu jauh lebih mudah. Pastikan Anda tidak membuatnya terlalu mudah untuk melakukan hal-hal bodoh. Langkah reauthentication Anda tetap harus diucapkan (dan jika berbahaya) mereka harus merepotkan dan sulit dilakukan tanpa berpikir.
Tapi sendirian , otomasi lebih buruk daripada tidak berguna. Itu hanya akan membantu Anda membuat kesalahan yang lebih besar dengan sedikit pemikiran.
Cocok untuk tim dari semua ukuran.
Saya perhatikan Anda menunjukkan ukuran tim Anda. Saya seorang lelaki dan saya harus menyelesaikan semua ini karena hanya perlu satu orang untuk mengalami kecelakaan. Ada overhead tetapi itu sepadan. Anda berakhir dengan lingkungan pengembangan dan produksi yang jauh lebih aman dan lebih aman.
sumber
Salah satu rekan kerja saya memiliki pendekatan yang menarik untuk ini. Skema warna terminal-nya untuk produksi jelek . Abu-abu, merah muda, dan sulit dibaca, yang secara teoritis seharusnya memastikan bahwa apa pun yang ia tulis, ia benar-benar bermaksud menulis.
Jarak tempuh Anda mungkin bervariasi ... dan saya mungkin tidak perlu mengatakan bahwa itu hampir tidak tahan peluru. :)
sumber
Pengembang seharusnya tidak mengetahui kata sandi ke basis data produksi. Kata sandi prod harus acak dan tidak mudah diingat - sesuatu seperti hasil keyboard mashing (
Z^kC83N*(#$Hx
). Kata sandi dev Anda bisa$YourDog'sName
ataucorrect horse battery staple
atau apa pun.Tentu, Anda bisa mengetahui apa kata sandinya, terutama jika Anda tim kecil, dengan melihat file konfigurasi aplikasi klien. Itulah satu-satunya tempat di mana kata sandi prod harus ada. Itu memastikan bahwa Anda harus melakukan upaya yang disengaja untuk mendapatkan kata sandi produk.
(Seperti biasa, Anda harus memiliki cadangan point-in-time untuk database produksi Anda. Misalnya, dengan MySQL, arsipkan log biner sebagai cadangan tambahan. Untuk PostgreSQL, arsipkan log menulis-depan. Itu adalah perlindungan Anda dari upaya terakhir untuk segala jenis bencana, yang ditimbulkan sendiri atau yang lainnya.)
sumber
Jawaban singkatnya adalah RBAC - kontrol akses berbasis peran.
Izin Anda untuk semua lingkungan harus berbeda - dan sama menjengkelkannya dengan hal-hal seperti UAC, Anda membutuhkannya: terutama untuk lingkungan PROD.
Tidak pernah ada alasan bagi devs untuk memiliki akses langsung ke Prod - terlepas dari seberapa kecil organisasi / timnya. "Dev" Anda mungkin juga mengenakan topi "Panggung" dan "Prod", tetapi ia harus memiliki kredensial dan proses yang berbeda untuk mencapai lingkungan yang berbeda.
Apakah itu menyebalkan? Benar. Tetapi apakah itu [membantu] mencegah membongkar lingkungan Anda? Benar.
sumber
Solusi cepat dan sederhana: gunakan dua akun pengguna yang berbeda, satu untuk pekerjaan pengembangan normal Anda yang hanya memiliki akses ke database pengembangan, dan yang lain untuk benar-benar beroperasi pada database produksi, dengan akses penuh ke sana. Dengan cara ini, Anda harus secara aktif mengubah akun yang Anda gunakan sebelum dapat membuat perubahan dalam produksi, yang seharusnya cukup untuk mencegah kesalahan yang tidak disengaja.
Pendekatan yang sama dapat digunakan jika Anda memiliki dua situs web, atau dua server, atau dua lingkungan secara keseluruhan: satu akun pengguna untuk pengembangan tanpa akses (atau setidaknya tanpa akses tulis ) ke produksi, akun pengguna lain untuk bekerja pada sistem produksi ( s).
Ini adalah pendekatan yang sama dengan sysadmin yang memiliki akun non-admin standar untuk pekerjaan rutin (membaca email, menjelajahi web, melacak tiket, mengisi timesheets, menulis dokumentasi, dll.) Dan akun admin penuh yang berbeda untuk digunakan ketika benar-benar beroperasi di server dan / atau Direktori Aktif.
sumber