Praktik terbaik untuk informasi sensitif dalam kontrol sumber

8

Saya tahu topik ini telah dibahas cukup banyak tetapi saya tidak dapat menemukan jawaban untuk situasi khusus saya.

Saat ini, saya menggunakan .gitignoreuntuk mengecualikan konten sensitif dan menjaganya (file konfigurasi, dll) secara terpisah. Saat basis kode saya berkembang menjadi semakin banyak proyek, ini menjadi sangat sulit untuk dikelola dan saya juga tidak memiliki cara nyata untuk melacak perubahan atau membuat cadangan file dengan benar.

Ada beberapa alat untuk masalah ini, seperti git-secret, Hashicorp Vaultdan git-crypttetapi tidak ada yang bekerja dengan Windows, di mana saya melakukan semua pengembangan saya (karena berbagai alasan).

Saat ini, saya adalah satu-satunya pengembang yang bekerja di perusahaan saya tanpa rencana untuk berkembang. Kontrol sumber (Gitlab) terutama digunakan untuk referensi saya sendiri dan kemampuan untuk merekam perubahan. Apakah mendorong beberapa koneksi string atau mengkonfigurasi file ke dalam kontrol sumber menjadi masalah atau risiko besar? Informasi itu saat ini duduk di drive jaringan, tidak aman (kecuali untuk izin NTFS)

Saya mendapatkan ide bahwa praktik terbaik bukan untuk mendorong hal ini ke kontrol sumber tetapi saya memiliki contoh Gitlab yang di-host secara pribadi yang tidak dapat diakses di luar jaringan lokal - apakah ini berarti ada risiko yang lebih kecil?

Kesalahan sintaks
sumber
Mengapa Anda tidak dapat menggunakan Hashicorp Vault di Windows? Halaman unduhan resmi menyertakan biner untuk Windows: vaultproject.io/downloads.html
VaaChar
git-secret juga mendukung Windows bash: github.com/sobolevn/git-secret/pull/123
VaaChar
Oh keren itu tidak ada di situs git-secret utama. Saya akan mencobanya
Sintaks Kesalahan
Apa yang spesifik yang termasuk dalam konfigurasi Anda yang sensitif? Jika itu kata sandi, maka Anda perlu melihat opsi untuk menghindari sama sekali tidak membutuhkan kata sandi.
Berin Loritsch
1
Ada cerita tentang seorang pria yang ditagih $ 14rb untuk AWS karena dia menyimpan kuncinya dalam kontrol versi pribadi, tetapi mempostingnya secara publik di github selama 10 menit untuk berbagi dengan seorang teman.
Karl Bielefeldt

Jawaban:

5

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.

Berin Loritsch
sumber
2

Tempat terbaik untuk menyimpan informasi sensitif adalah toko yang dibuat khusus seperti Hashicorp Vaultyang mendukung Windows.

Jika (untuk alasan apa pun) Anda tidak dapat menggunakan ini, Anda juga dapat menggunakan git-secretyang juga mendukung Windows. Dukungan untuk Windows ditambahkan ke git-secretdalam PR ini: https://github.com/sobolevn/git-secret/pull/123

git-crypt juga memiliki dukungan eksperimental untuk Windows:

https://github.com/AGWA/git-crypt/wiki/Instalasi

/programming/43040370/how-to-install-git-crypt-in-windows

VaaChar
sumber