Saya memiliki gambar docker dasar yang digunakan untuk menjalankan perangkat lunak analisis gambar. Untuk setiap wadah yang dibuat dari gambar, ada satu set pengaturan konfigurasi yang beberapa di antaranya adalah rahasia (kunci enkripsi, informasi pelanggan, dll.) Yang digunakan oleh perangkat lunak untuk menganalisis dan mendistribusikan gambar yang diproses. Bagaimana saya bisa dengan aman menyampaikan rahasia ini ke sebuah wadah?
docker
secret-management
PrestonM
sumber
sumber
Jawaban:
Anda memiliki 3 metode untuk mendapatkan rahasia aplikasi di dalam wadah buruh pelabuhan. 2 yang pertama melibatkan konfigurasi buruh pelabuhan. Yang terakhir adalah meminta aplikasi Anda secara langsung mengambil rahasia dari toko rahasia.
1 - Variabel lingkungan
Menurut panduan "The 12 Factor App" , rahasia hanyalah konfigurasi, dan mereka harus selalu diatur di lingkungan. Anda bisa mengatur rahasia Anda sebagai variabel lingkungan selama menjalankan buruh pelabuhan, dan aplikasi Anda mengaksesnya dari sana.
2 - Volume yang dipasang
Anda dapat memiliki semua rahasia Anda dalam konfigurasi / file rahasia tertentu, kemudian pasang itu ke instance Anda sebagai volume yang dipasang .
3 - Ambil dari toko rahasia
Seperti yang disebutkan @ 030, Anda dapat menggunakan Hashicorp Vault (atau "Amazon Secrets Manager", atau layanan apa pun seperti itu).
Aplikasi Anda, atau aplikasi sespan dapat mengambil rahasia yang dibutuhkan secara langsung, tanpa harus berurusan dengan konfigurasi apa pun pada wadah Docker. Metode ini akan memungkinkan Anda untuk menggunakan rahasia yang dibuat secara dinamis (fitur yang sangat menarik dari sistem tersebut) dan tanpa harus khawatir tentang rahasia yang dapat dilihat dari sistem file atau dari memeriksa variabel env dari wadah buruh pelabuhan.
Opini pribadi
Saya percaya variabel env adalah cara untuk pergi. Lebih mudah untuk mengelola, dan Anda masih dapat menarik dari toko rahasia seperti Hashicorp Vault, jika Anda memiliki CI Anda membangun sistem menarik rahasia selama membangun dan mengaturnya ketika Anda menyebarkan. Anda mendapatkan yang terbaik dari kedua dunia, dan manfaat tambahan dari pengembang Anda tidak perlu menulis kode aplikasi untuk mengambil rahasia.
Pengembang harus fokus pada fungsi kode mereka, dan tidak berurusan dengan tugas admin seperti mengambil kata sandi.Kode aplikasi Anda harus difokuskan pada fungsi aplikasi itu sendiri, dan tidak berurusan dengan tugas-tugas backend seperti mengambil kata sandi. Sama seperti 12 App faktor menyatakan.
Sunting: mengubah kalimat terakhir untuk menghapus implikasi silo-ing Pengembang vs SysAdmin. Tugas itu sendiri harus terpisah dari perspektif kode, tetapi DevOps adalah tentang orang yang sama mengingat dan tidak dibatasi.
Opini Pribadi (Pembaruan)
Per @ Dirk berkomentar luar biasa ( Melewati rahasia ke wadah Docker ), ada argumen yang sangat kuat untuk memprioritaskan toko rahasia di atas ENV vars, karena tidak ingin membocorkannya.
sumber
inspect
atauexec
. Variabel lingkungan sering dibuang kestdout
atau ke dalam file log ketika dijalankan dalam beberapa mode debug. Semua proses anak yang dilahirkan dapat membaca dan mengeksposnya yang mungkin di luar kendali Anda. Informasi lebih lanjut misalnya di sini: diogomonica.com/2017/03/27/…Ada pilihan lain hanya menggunakan pipa:
Pertama, buat daemon docker dengan
-i
, perintahread A
akan hang menunggu input dari/proc/1/fd/0
; Kemudian jalankan perintah buruh pelabuhan kedua, baca rahasia dari stdin dan arahkan ke proses gantung terakhir.sumber