Memikirkan hal ini secara holistik, ada beberapa hal yang perlu dipertimbangkan:
- Apakah server GitLab di-host di jaringan yang sama dengan lingkungan target?
- Apakah Anda memiliki nama pengguna dan kata sandi di file konfigurasi Anda?
- Bisakah Anda memisahkan konfigurasi keamanan dari konfigurasi aplikasi normal?
Perhatian pertama berkaitan dengan kebijakan. Jika perangkat lunak akan digunakan untuk jaringan yang terpisah, Anda dapat mengalami masalah kebijakan bahkan jika konfigurasi Anda dienkripsi.
Menghindari informasi sensitif
Lebih spesifik tentang apa yang sensitif. Misalnya, nama domain server mungkin tidak sensitif, tetapi alamat IP-nya mungkin (atau asosiasi keduanya). Biasanya nama pengguna dan kata sandi sensitif, serta clientId dan kunci rahasia (OAuth2).
Pilihan terbaik Anda adalah:
- Gunakan string koneksi yang tidak memerlukan nama pengguna / kata sandi (lihat di bawah)
- Pisahkan informasi sensitif dari Web.config utama
- Gunakan atribut file di AppSettings untuk membaca file konfigurasi eksternal
Beberapa database memungkinkan Anda memiliki string koneksi di mana nama pengguna dan kata sandi bukan bagian dari konten. Misalnya, Anda dapat menjalankan aplikasi di bawah akun layanan domain untuk terhubung ke SQL Server menggunakan keamanan terintegrasi. Atau Anda dapat menggunakan Dompet Oracle untuk merahasiakan nama pengguna / kata sandi di mesin target. Beberapa layanan OAuth2 memungkinkan Anda untuk menggunakan file .csv atau .json yang disimpan pada mesin di lokasi standar.
Dengan kata lain, lakukan apa pun yang Anda bisa untuk menghindari menyimpan informasi sensitif di tempat yang bukan miliknya. Jika Anda harus membuat perubahan pada aplikasi Anda untuk melihat lokasi pada disk untuk membaca bit sensitif Anda dapat mengaturnya sekali pada setiap server target dan hanya membacanya dari aplikasi Anda.
Server Konfigurasi
Steeltoe telah memindahkan pustaka integrasi Spring tertentu ke C #, dan mereka bahkan memiliki dukungan untuk server Spring Cloud Config . Server Spring Cloud Config memang membutuhkan repositori Git di jaringan penyebaran , tetapi memungkinkan Anda untuk menyesuaikan konfigurasi di tempat yang seharusnya. Jika aplikasi Anda cukup kompleks (mis. Layanan mikro) maka ini akan menjadi sesuatu yang layak untuk dijaga agar nama server tetap terlindungi dalam lingkungan yang sama dengan lokasi server.
Intinya
Anda hanya ingin menghindari kebutuhan akan informasi sensitif sebanyak mungkin, tetapi pertahankan konfigurasi yang tidak sensitif dalam kontrol sumber. Jika Anda tidak dapat menghindari nama pengguna / kata sandi dalam file konfigurasi Anda (yaitu database yang berbeda yang tidak memiliki keamanan yang setara dengan yang terintegrasi), maka muatkan sedikit saja dari file eksternal.