Bagaimana Anda membatasi akses ke lingkungan produksi di perusahaan tempat Anda bekerja?

8

Di perusahaan tempat saya bekerja, insinyur insinyur (saat ini hanya 2 anggota, yang adalah saya dan rekan kerja lainnya) adalah satu-satunya orang yang memiliki akses ke database produksi.

Jadi ketika ada pengembang lain perlu menjalankan query MySQL pada database produksi. Mereka akan mengirimkan pertanyaan ke 2 insinyur untuk membiarkan mereka mengeksekusinya.

Berikut adalah situasi ketika kita perlu menjalankan perintah ke database produksi:

  1. Basis data berisi data yang rusak, yang menghasilkan bug. Mereka menjalankan perintah untuk memperbaiki bug.

  2. Bug dilaporkan. Dan mereka ingin melihat nilai saat ini di dalam database.

  3. Salah satu pelanggan kami ingin memodifikasi datanya. Tetapi aplikasi web kami tidak memiliki kemampuan untuk melakukan modifikasi. Jadi kita harus mengirim perintah MySQL langsung ke database untuk melengkapi kebutuhan pelanggan.

  4. Tim QA membuat akun uji pada lingkungan produksi. Dan mereka ingin mengubah status akun sehingga mereka dapat melakukan tes lain.

Ini menciptakan banyak gangguan bagi saya rekan kerja lainnya. Ketika kami mengembangkan program di siang hari, kami sering harus beralih konteks hanya untuk menjalankan beberapa permintaan.

Saya tidak berpikir ini adalah arsitektur yang baik untuk perusahaan. Bagaimana Anda mengontrol izin untuk lingkungan produksi di perusahaan Anda?

Basis data produksi kami terdiri dari informasi pelanggan yang sensitif. Jika data bocor, perusahaan kami mungkin didenda jutaan dolar.

Brian
sumber

Jawaban:

5

Jika pertanyaan Anda adalah bagaimana mengelola perubahan basis data, pertimbangkan sesuatu seperti Flyway . Ini memungkinkan Anda mengontrol perubahan Anda melalui file konfigurasi terlacak di repositori Anda dan menerapkannya melalui proses otomatis & terkontrol - gunakan kode ulasan & langkah-langkah promosi normal Anda.

Jika pertanyaannya adalah "bagaimana cara membuat devs berhenti menggangguku untuk menjalankan perintah SQL yang sewenang-wenang" maka Anda mungkin ingin mempertimbangkan untuk menuliskan cara untuk mengotomatisasi atau memberi mereka UI pihak ke-3 untuk digunakan dengan akun yang dikunci untuk mencegah mengubah & membatasi mereka untuk tidak melihat tabel sensitif. YMMV tergantung pada tata letak DB Anda.

TheFiddlerWins
sumber
Pertanyaan saya adalah tentang how do I get devs to stop bugging me to run arbitrary SQL commands. Saya pikir saya bisa menggunakan ProxySQL untuk menutupi data pelanggan yang sensitif sehingga pengembang lain dapat membaca basis data produksi.
Brian
Apakah Anda berusaha agar mereka tidak mengacaukannya atau melihat data sensitif ? Yang pertama Anda bisa memberi mereka akses RO dengan sesuatu seperti mysql-web-ui. Yang kedua akan membutuhkan RBAC seperti yang dinyatakan dalam jawaban Phil W.
TheFiddlerWins
4

Anda bisa menanamkan skema basis data dan perubahan data ke dalam kontrol kode sumber dengan menggunakan konsep yang disebut migrasi basis data. Ini kemudian dapat dieksekusi pada lingkungan dev dan pementasan sebagai bagian dari proses penyebaran sebagian otomatis.

Sebagai contoh di lingkungan saya (aplikasi PHP Web), saya menggunakan Skema Doctrine untuk pembaruan skema, migrasi Yii2 untuk perubahan data. Perintah masing-masing adalah bagian dari skrip bash 7 baris yang menjalankan semua perintah yang diperlukan untuk menerapkan perubahan di setiap lingkungan

jdog
sumber
3

Saya melihat masalah pertama, DevOps adalah tentang membangun tim yang dapat menangani aplikasi dari build hingga eksploitasi.
Jadi devs Anda harus memiliki akses ke database, Anda mengutip berbagai kasus yang merupakan kenyataan bagi banyak orang dan kelemahan utama yang membuat Anda dan rekan Anda mengalami hambatan serta menghambat pekerjaan Anda sendiri.

Jawaban lain menjawab dengan baik perubahan skema atau perubahan yang direncanakan yang seharusnya memang diintegrasikan sebagai bagian dari proses pengiriman aplikasi, tetapi mereka tidak memungkinkan untuk dengan cepat memperbaiki kebutuhan akses langsung, ketika seorang dev mungkin perlu membuang DB untuk memahami apa yang menyebabkan bug dan cara memperbaikinya sebagai contoh.

Hal-hal seperti ProxySQL yang sudah Anda kutip dalam komentar mungkin ok untuk database MySQL, hanya mengkonfigurasi MySQL untuk mencatat sesuatu bisa menjadi pendekatan yang baik juga, MySQL menawarkan plugin audit komersial yang dapat menjawab masalah membiarkan devs Anda mengakses database dan memenuhi kebutuhan Anda Persyaratan CISO untuk melacak apa yang dilakukan.

Jika Anda memiliki lebih dari sekadar Mysql DB dan perlu mengaudit akses mereka, mengonfigurasi setiap sistem untuk mengaudit tindakan pengguna log dan bukan tindakan aplikasi bisa jadi rumit. Menjaga hal-hal ditutup bisa menjadi lebih buruk, satu dev suatu hari nanti akan mengintegrasikan shell DB dalam aplikasi untuk menghindari blok jalan ini dan pada akhirnya akan hidup dalam produksi tanpa kontrol akses yang tepat dan memaparkan semua data, saya sangat menyarankan Anda untuk meminta Anda perusahaan untuk meninjau kebijakan ini.

Ada satu solusi komersial yang saya tahu yang dapat membantu (dan memungkinkan audit lebih dari sekedar permintaan DB) yang kuatDM , itu juga memungkinkan untuk mengaudit sesi ssh dan rdp, seolah-olah devs Anda membutuhkan akses ke DB, mereka mungkin juga membutuhkan akses ke mesin hosting aplikasi untuk keperluan debugging.

Tensibai
sumber
0

... saya dan rekan kerja lain ... adalah satu-satunya orang yang memiliki akses ke basis data produksi.

Itu posisi awal yang bagus.
Terlalu sering, DBA berusaha menutup pintu kandang setelah kuda itu lari.

Jadi ketika ada pengembang lain yang perlu mengeksekusi query MySQL pada database produksi ...

Pertanyaan:
Mengapa Pengembang menjalankan sesuatu terhadap basis data Produksi?

Bagaimana Anda mengontrol izin untuk lingkungan produksi di perusahaan Anda?

Kontrol akses berbasis peran.

Pengguna diberikan akses ke setiap basis data sebagaimana dan ketika peran pekerjaan mereka membutuhkannya dan Peran digunakan untuk memberi mereka akses ke tabel dalam setiap basis data. Proses pembuatan akun ini dan peran yang diberikan dikelola secara terpusat dan diaudit secara ketat.

Pengembang tidak boleh memiliki "langsung", memperbarui akses di luar database Pembangunan mereka. Segala sesuatu yang lain harus ditulis, diuji, diaudit dan dirilis melalui saluran yang telah disiapkan, dikontrol (dan, lebih disukai, otomatis).

Phill W.
sumber