Birçok sunucu için SSH erişim ağ geçidi


12

Ansible aracılığıyla şu anda 3 devopsiyle 90'dan fazla sunucuyu yönetme. Her şey harika çalışıyor, ancak şu anda dev bir güvenlik sorunu var. Her devop, sunuculara doğrudan erişmek için kendi yerel ssh anahtarlarını kullanıyor. Her devop bir dizüstü bilgisayar kullanır ve her dizüstü bilgisayar potansiyel olarak tehlikeye atılabilir, böylece tüm prod sunucu ağını bir saldırıya kadar açabilir.

Erişimi merkezi olarak yönetmek ve böylece herhangi bir anahtar için erişimi engellemek için bir çözüm arıyorum. Anahtarların bitbucket veya github'a nasıl eklendiğinden farklı değil.

Başımın üst kısmından çözümün bir makineden, ağ geçidinden, istenen eşya sunucusuna bir tünel olacağını varsayacağım ... ağ geçidini geçerken, istek yeni bir anahtar alacak ve ürüne erişmek için kullanacaktı sunucusu. Sonuç olarak, ağ geçidine erişimi reddederek saniyeler içinde herhangi bir devop için erişimi hızlı ve verimli bir şekilde öldürebiliriz.

resim açıklamasını buraya girin

Bu iyi bir mantık mı? Herkes bu sorunu önlemek için zaten bir çözüm gördü mü?


1
AWX / Tower'a taşınmanın zamanı geldi.
Michael Hampton

Son zamanlarda SSH anahtar yönetimi ve 2FA için Kryptonite denedim ve benim için oldukça iyi çalışıyor. profesyonel / kurumsal paketi daha fazla kontrol ve aynı zamanda oturumların denetimini veriyor gibi görünüyor ..
Alex

2
Cevap ücretsiz IPA
Jacob Evans

Yanıtlar:


22

Bu çok karmaşık (bir anahtarın belirli bir ürün sunucusuna erişimi olup olmadığını kontrol etme). Ağ geçidi sunucusunu, geçerli tüm anahtarları kabul eden (ancak tüm sunuculara sırayla erişimi kaldıran belirli bir anahtarın erişimini kolayca kaldırabilen) atlama ana bilgisayarı olarak kullanın ve yalnızca her bir sunucuya yalnızca izin verilen anahtarları ekleyin. Bundan sonra, her sunucunun SSH bağlantı noktasına yalnızca atlama ana bilgisayarı üzerinden erişebildiğinizden emin olun.

Standart yaklaşım budur.


2
Daha da iyisi: @Sven'in söylediklerini yapın, ancak atlama sunucusuna 2FA ekleyin. Çünkü sadece manuel olarak ihtiyacınız olduğunda doğrudan dizüstü bilgisayardan bağlanıyorsunuz, değil mi? Otomatikleştirilmiş bir şey atlama ana bilgisayarındaki bir sunucudan çalışıyor mu?
Adam

1
Yerel bir sertifika yetkiliniz (alt veya yalıtılmış) varsa, bu sertifikaları SSH ile kullanabilirsiniz, bu da güvenliği ihlal edilen bir sertifikayı merkezi olarak geçersiz kılmanıza olanak tanır.
Randall

11

Bu bir geliştirme / test ortamı olmadıkça mühendisler doğrudan dizüstü bilgisayarlarından sorumlu çalışmamalıdır.

Bunun yerine, çalışma kitaplarını git'ten çeken merkezi bir sunucunuz olsun. Bu, ek kontrollere izin verir (dört göz, kod incelemesi).

Erişimi daha da kısıtlamak için bunu bir bastion veya atlama ana bilgisayarı ile birleştirin.


1
Gerçekten de, AWX'in (veya ticari sürümü Tower) çözdüğü sorun budur.
Michael Hampton

1

Netflix kurulumunuzu gerçekleştirdi ve bu duruma yardımcı olmak için bazı ücretsiz yazılımlar yayınladı.

Bu videoya https://www.oreilly.com/learning/how-netflix-gives-all-its-engineers-ssh-access veya bu sunumu https://speakerdeck.com/rlewis/how-netflix-gives- adresinde bulabilirsiniz. tüm-mühendisleri-ssh-örneklerine erişim- çekirdek noktası ile üretimde :

Özünde mühendislerin kimliğini doğrulamak için TOA kullanan SSH kalesi mimarimizi gözden geçireceğiz ve ardından bir örneğe kalenin SSH kimlik doğrulaması için kısa ömürlü sertifikalarla kullanıcı kimlik bilgileri başına yayınlayacağız. Bu kısa ömürlü kimlik bilgileri kaybolma riskini azaltır. Bu yaklaşımın, erişim vermeden önce mühendisleri yavaşlatmak yerine, olaydan sonra nasıl denetlememizi ve otomatik olarak uyarmamızı sağlayacağımızı ele alacağız.

Yazılımlarına buradan ulaşabilirsiniz: https://github.com/Netflix/bless

Tüm çözümlerini uygulamasanız bile bazı ilginç şeyler alır:

  • sadece anahtarlar yerine SSH sertifikaları kullanırlar; sertifikaya çok daha fazla meta veri koyabilir, böylece gereksinimler başına çok fazla kısıtlama sağlayabilir ve daha basit denetimlere izin verebilirsiniz
  • çok kısa süreli (5 dakika gibi) sertifika geçerliliği kullanma (SSH oturumları sertifikanın süresi dolduktan sonra bile açık kalır)
  • komut dosyası oluşturmayı zorlaştırmak için 2FA kullanmak ve geliştiricileri diğer çözümleri bulmaya zorlamak
  • belirli bir alt modül, altyapılarının dışında ve çalıştığı bulut tarafından sunulan güvenlik mekanizmaları ile düzgün bir şekilde güvence altına alınmış, her geliştiricinin herhangi bir ana bilgisayara erişebilmesi için sertifika oluşturma işlemini dinamik olarak gerçekleştirir

1

OneIdentity (eski Balabit) SPS , bu senaryoda ihtiyacınız olan şeydir. Bu cihazla, temelde herhangi bir makinedeki kullanıcı kimliklerini yönetebilir, kullanıcı davranışını izleyebilir, izleyebilir ve uyarabilir ve daha sonraki incelemeler için kullanıcıların ne yaptığını endeksleyebilirsiniz.


0

Benim önerim, kullanıcı makinelerinden SSH erişimine izin vermemek.

Bunun yerine yapmalısın

  1. Oyun kitaplarını Git'te barındırın.
  2. "Erişim sunucusu" nu Jenkins sunucusuna dönüştürün.
  3. Grant, kullanıcı kullanıcılarına yalnızca Jenkins erişimine ihtiyaç duydu.
  4. HTTP üzerinden iş kurmak için Jenkins üzerinde Ansible oyunları yürütün.
  5. Ek bir güvenlik önlemi olarak, gerekirse Jenkins CLI'yı devre dışı bırakın.

Örnek yürütme modeli,

  1. Jenkins Ansible eklentisi: https://wiki.jenkins.io/display/JENKINS/Ansible+Plugin

VEYA

  1. Klasik kabuk -güzel iş türü. Git adımlarını da içeren derleme adımlarınızı manuel olarak ekleyin.

Sunucu kaynakları ile sınırlıysanız, aynı Jenkins sunucusu Git'i (scm-manager) da barındırabilir, ancak geliştirici makinesinden birine virüs bulaşmışsa ek bir güvenlik riski vardır. Jenkins sunucusunu internetten ayırarak bunu hafifletebilir ve Ansible bağımlılıklarını yerel olarak çözebilirsiniz.

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.