Docker kapsayıcısına sırları geçmek


26

Görüntü analiz yazılımı çalıştırmak için kullanılan bir temel liman görüntü var. Görüntüden oluşturulan her bir kap için, işlenmiş görüntüleri analiz etmek ve dağıtmak için yazılım tarafından kullanılan, sır olarak (şifreleme anahtarları, müşteri bilgileri vb.) Bir dizi yapılandırma ayarları vardır. Bu sırları güvenli bir şekilde bir kaba nasıl iletebilirim?


Hashicorp tonoz
030

Yanıtlar:


23

Liman işçisi konteynerinin içindeki bir uygulamaya sır vermenin 3 yöntemi vardır. İlk 2 liman işçisi yapılandırmasını içeriyor. Sonuncusu, uygulamalarınızın doğrudan gizli bir mağazadan sır almasını sağlamaktır.

1 - Çevre değişkenleri

Göre "12 Faktör App" rehber , sırlar sadece yapılandırma vardır ve bunlar daima ortamında ayarlanmalıdır. Docker çalışması sırasında sırlarınızı çevre değişkenleri olarak ayarlayabilirsiniz ve uygulamanız bu noktalara erişir.

2 - Monte edilmiş hacimler

Sırlarınızı tümü belirli bir yapılandırma / sır dosyası içinde bulabilir, ardından örneğinize monte edilmiş bir birim olarak bağlayabilirsiniz .

3 - Gizli mağazadan al

@ 030'da belirtildiği gibi, Hashicorp Vault'u (veya "Amazon Secrets Manager" veya bunun gibi herhangi bir servisi) kullanabilirsiniz.
Uygulamanız veya bir sepet uygulaması, Docker kabındaki herhangi bir yapılandırma ile uğraşmak zorunda kalmadan doğrudan ihtiyaç duyduğu sırları getirebilir. Bu yöntem, Dinamik olarak oluşturulmuş sırları (bu tür sistemlerin çok çekici bir özelliği) kullanmanıza ve dosya sisteminden görülebilen sırlar veya dock kabının env değişkenlerini denetlemekten endişelenmenize gerek kalmayacaktır.

Kişisel görüş

Env değişkenlerinin gitmenin yolu olduğuna inanıyorum. Yönetilmesi daha kolaydır ve eğer CI inşa sistemi inşa sırasında sırları çekip dağıtırken onları ayarlattıysanız Hashicorp Vault gibi gizli bir mağazadan çekebilirsiniz. Her iki dünyanın da en iyisini elde edersiniz ve geliştiricilerinizin sırları almak için uygulama kodu yazması gerekmeyen ek avantajlarını elde edersiniz. Devs, kod işlevlerine odaklanmalı ve şifre alma gibi yönetici görevleriyle ilgilenmemelidir.

Uygulamanızın kodu, kendi uygulama işlevselliğine odaklanmalı ve şifre alma gibi arka uç görevleriyle ilgilenmemelidir. Tıpkı 12 Faktör Uygulamasında olduğu gibi.

Düzenleme: Geliştirici vs SysAdmin siloing ima kaldırmak için son cümle değiştirildi. Görevlerin kendileri kod perspektifinden ayrı olmalıdır, ancak DevOps, hem akılda tutulan hem de sınırlı olmamak üzere aynı kişilerle ilgilidir.

Kişisel Görüş (Güncelleme)

@ Dirk’in mükemmel yorumu ( Docker konteynerine sırları geçmek ), onları sızdırmak istemediği için ENV değişkenlerinde gizli bir mağazaya öncelik vermek konusunda çok güçlü bir argüman var.


2
Bu, siloları teşvik eder. DevOps duvardan bir şeyleri atmak yerine, birlikte bir şeyler yapıyor.
030

2
Kod gereken altyapı bileşenlerinden kapalı silo'd edilebilir. Gerçek kişiler hem altyapı otomasyonunu hem de uygulama kod tabanını kodlayabilir, ancak görevlerin ayrı olması gerekir. Orjinal cevabımın son cümlesini, devleri, insanları silip süpürüyordu. Yani olan bir hata. Bunu daha açık olması için düzenleyeceğim.
BoomShadow

7
Sırları çevre değişkenlerine sokmak, onların sızdırılması için çeşitli olanaklar sunar. Birkaç örnek: Kabı çalıştıran makinedeki Docker daemonuna erişimi olan herkes, inspectveya execkomutlarını kullanarak bunları görebilir . Ortam değişkenleri stdout, bazı hata ayıklama modunda çalışırken genellikle günlük dosyalarına veya günlük dosyalarına atılır. Tüm doğmuş çocuk süreçleri, kontrolünüz dışında olabilecek olanları okuyabilir ve açığa çıkarabilir. Daha fazla bilgi burada örneğin: diogomonica.com/2017/03/27/...
Dirk

1
Ben de bu soruyla boğuşuyorum. Anlamadığım şey, sırlarınızı güvence altına almak için bir kimlik kasası kullanıyor olsanız bile, bu kasaya erişmek için hala kimliğinizi doğrulamalısınız ve bu muhtemelen bir miktar sır gerektiriyor. Aynı endişe parola korumalı bir KeyStore dosyası kullanmak için de geçerlidir. Her zaman çevrede en azından "meta kimlik bilgilerini" geçmemize şaşırıp kaldık mı?
Wheezil

1
@Bir meta-kimlik bilgisi, belirli bir kimlik bilgisinden daha güvenlidir. meta kimlik bilgilerini sık sık ve otomatik olarak döndürebilirsiniz. meta kimlik bilgisi, güvenli bir ana bilgisayardaki bir kasaya gidebilir ve ip beyaz liste gibi şeylere sahip olabilir, böylece yalnızca üretim alt ağlarınızdan gelen bağlantıları kabul eder. Ayrıca kasanın istirahatte şifreleme ve uçuş ve karşılıklı bilgi ve sertifika sabitlemede şifrelemeyi ve işleri daha güvenli hale getiren tüm diğer en iyi uygulamaları kullanmasını sağlayabilirsiniz.
simbo1905

1

Sadece boru kullanan başka bir seçenek var:

docker run -d -i --name $n alpine sh -c 'read A; echo "[$A]"; exec some-server'
docker exec -i $n sh -c 'cat > /proc/1/fd/0' <<< _a_secret_

İlk önce docker arka planını oluştur, -ikomut read Agirişi kesmek için bekleyecektir /proc/1/fd/0; Sonra ikinci docker komutunu çalıştırın, stdin'den sırrını okuyun ve en son askıya alma işlemine yönlendirin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.