> Soru 1: kontrol makinesi
Userify'de (tam açıklama: aslında ssh anahtarlarını yönetmek için yazılım sunuyoruz), aynı zamanda en büyük SSH anahtar deposunu da işlettiğimiz için bu konuyu sürekli olarak ele alıyoruz. Genel olarak, bulut kullanmak yerine yerel kurulum yapılmasını öneriyoruz, çünkü kontrolün artması, yüzey alanınızın azaltılması, gerçekten bilinen güvenilir ağlara kilitlenebiliyor.
Hatırlanması gereken en önemli şey, bunun gibi doğru bir şekilde inşa edilmiş bir sistemde, bir saldırganın sızdırabileceği herhangi bir önemli sır olmamasının gerektiğidir . Birisi veri merkezinize bir forklift yüklerse ve sunucunuzla birlikte uzaklaşırsa, bazı ağır şifreli şifreler, muhtemelen ağır şifreli dosyalar ve bazı özel anahtarlar olmadan bazı genel anahtarlar dışında pek bir şey elde etmezler. Başka bir deyişle, o kadar değil.
Sizin de belirttiğiniz gibi, buradaki gerçek tehdit vektörleri, bir saldırgan bu makinenin kontrolünü ele geçirir ve kendi kullanıcı hesaplarını ve (genel) anahtarlarını dağıtmak için kullanırsa ne olur . Bu hemen hemen her bulut platformu için bir risktir (örneğin: Linode). Saldırı yüzeyini en aza indirgemek (yalnızca birkaç bağlantı noktasını açığa çıkarmak ve bu bağlantı noktalarını mümkün olduğunca kilitlemek) ve tercihen ayrıcalık yükselmesine ve çeşitli saldırılara karşı sertleştirilmiş yazılımı kullanmak anlamına gelen kontrol düzlemine erişimi önlemeye odaklanmalısınız. SQL enjeksiyon, XSS, CSRF, vb.) Kontrol düzlemine 2FA / MFA erişimini etkinleştirin ve bu kontrol düzlemini mümkün olduğu kadar kilitlemeye odaklanın.
Yani veri merkezinde özel bir kontrol makinesine veya bir uzaktan kumanda makinesine sahip olmak daha mı iyi (dizüstü bilgisayarımın veri merkezine uzaktan bağlanması gibi)?
Bu var kesinlikle daha iyi onu izole edip / önlemek hırsızlık veya yetkisiz erişim riskini en aza indirmek için aşağı kilitlemek, çünkü güvenli bir veri merkezlerinde özel bir kontrol otomatı var.
En iyi uygulama benim laptop kullanmaktır (tabii ki, çalıntı olabilir, ama benim ortak anahtarlar güvenli bir taşınabilir kriptolanmis cihazda bulut veya çevrimdışı çevrimiçi olarak kaydedilir olabilir), Eğer bazı arayüzlerini kullanmayı gerekiyorsa neyi ile Veri merkezi içine merkezileştirilmiş bir makineye kurulması gereken Ansible Tower, Semafor, Rundeck veya Foreman gibi Ansible?
Anahtarlarınızı (hatta Userify'yi) yönetmek için HERHANGİ bir web arayüzünü veya ikincil kontrol düzlemini çalıştırmanıza gerek kalmaz, daha fazla sayıda kullanıcı ve sunucular arasında farklı yetkilendirme düzeyleri nedeniyle yönetim sorunlarına girmeye yetecek kadar büyük oluncaya kadar Anahtarları güncellemek için Ansible'a bilgisi veya erişimi olmayan kullanıcılarınız için elden tutma. İlk başta doğrulamak, bir sürü kabuk betiğinden (bugün muhtemelen Ansible olurlardı!) Çok fazla değildi ve sizler için ek yönetim kontrolüne ve kolay bir şekilde yönetmeleri / döndürmeleri için kolay yollara ihtiyacınız olana kadar bu konuda hiçbir yanlışlık yok. kendi anahtarlarım. (Tabii ki, eğer o noktaya gelirseniz Userify'ye bir göz atın!)
Nasıl güvence altına alınır ve "tek bir saldırı noktası" haline gelmesini önler?
Elbette, işleri kilitlemek için internetteki bütün kaynakları kontrol edin, ancak en önemlisi güvenli bir temelle başlayın:
1. Çözümünüzü en başından itibaren güvenlikle düşünün. Geleneksel olarak daha az problemi olan teknolojiyi (örneğin, veritabanı veya diller) seçin ve ardından aklı başında güvenlikle kodlayın. Gelen tüm verileri, güvenilir kullanıcılardan bile temizleyin. Paranoya bir erdemdir.
2. Sonunda, her şey bozulur. Bu meydana geldiğinde hasarı en aza indirin: daha önce belirttiğiniz gibi, gizli malzemelerin kullanımını en aza indirmeye çalışın.
3. Basit tutun. En son egzotik şeyleri yapmayın, güvenliğinizi ölçülebilir ve kanıtlanabilir bir şekilde artıracağından emin değilseniz. Örneğin, şifreleme katmanımız için AES üzerinden X25519 / NaCl (libsodium) seçtik (her şeyi, dinlenmekte olan ve hareket halindeki her şeyi şifreliyoruz) çünkü orijinal olarak güvendiğimiz biri tarafından tasarlandı ve yazıldı (DJB ve ark.) Schneier ve Google'ın güvenlik ekibi gibi ünlü araştırmacılar. Basitlik eğiliminde olanları, eğer daha yeniyse kullanın, çünkü basitlik, derin böcekleri gizlemeyi zorlaştırır.
4. Güvenlik standartlarını karşılayın. PCI ya da HIPAA Güvenlik Kuralı gibi bir güvenlik rejimine girmeseniz bile, bu standartları okuyup bunları nasıl karşılayacağınızı ya da en azından çok güçlü telafi edici kontrolleri anlayın. Bu, 'en iyi uygulamaları' gerçekten karşıladığınızdan emin olmanıza yardımcı olacaktır.
5. Dış / bağımsız penetrasyon testini yapın ve sürekli olarak bu en iyi uygulamaları takip ettiğinizden emin olmak için hata ödülleri çalıştırın . Zeki ve motive olmuş bazı insanlar onunla dalga geçene kadar her şey harika gözüküyor ... bittiğinde çözümünüze büyük bir güven duyacaksınız.
Soru 2: SSH anahtarları En iyi seçenek hangisidir: Ansible'ın kök kullanıcısını kullanmasına izin verin (genel anahtarı kaydedildi ~/.ssh/authorized_keys
/ Ansible kullanıcısının her komutu sudo yoluyla sudo yoluyla çalıştırmasına izin verin (her sysadmin tarafından bilinmesi gereken özel bir şey). bu sunucuları kontrol etmek için Ansible kullanıyor)
Sunucularda, hatta sudo için bile şifreleri kullanmaktan kaçının. Bu sırlarla uğraşır ve nihayetinde güvenliğinizi zayıflatır (makineler arasında sudo şifresini çok kolay değiştiremezsiniz, bir yere saklamanız gerekir, şifre gerçekten sunucudan sunucuya otomatik olarak yapamayacağınız anlamına gelir) tamamen SSH'yi varsayılan ayarlarında bırakırsanız, bu parolalar kaba bir şekilde zorlanabilir, bu da anahtarları biraz anlamsız kılar. Ayrıca, root kullanıcısını herhangi bir amaç için kullanmaktan ve özellikle de uzaktan giriş yapmaktan kaçının.
Sudo erişimi olan Ansible'a adanmış ayrıcalıklı bir kullanıcı oluşturun / Ansible kullanıcısının herhangi bir şifre belirlemeden sudo aracılığıyla her komutu çalıştırmasına izin verin
Kesinlikle. Sudo rolleriyle geri dönüşlü olarak denetleyebileceğiniz ayrıcalıklı bir kullanıcı. İdeal olarak, sunucu erişiminden sudo erişimi olan (şifre olmadan) sunucuya / sunucuya adanmış iletişimlere adanmış standart bir kullanıcı oluşturun.
... NB, eğer Userify kullanıyor olsaydın, yapmayı önerdiğim gibi, bir kullanıcı için bir Userify kullanıcısı oluşturmak olurdu (birden fazla kontrol edilebilir makineye sahipseniz bunu projeye veya hatta sunucu grubuna bölebilirsiniz), kontrol sunucusundaki bir SSH anahtarını kullanın ve genel anahtarını Userify profil sayfasında sağlayın. (Bu metin kutusu aslında olur /home/ansible/.ssh/authorized_keys
). Bağlanabilir sistem hesabını, uzak yedekleme hesabı, gizli yönetim vb. Diğer sunucudan sunucuya sistem hesaplarından ayrı tutmalısınız. Ardından, insanları davet edin; kendi anahtarlarını da oluşturabilir ve yönetebilirler ve her şey ayrı kalır. Ancak, bir Ansible kontrol sunucusunu kilitlemek gibi, Userify sunucunuzu (ya da ne tür bir çözüm dağıtırsanız) aynı şekilde kilitlemeyi deneyin.
başka ipucu var mı?
Bence kesinlikle bunun doğru yolunda ve doğru soruları soruyorsun. Bu tür bir şeyi tartışmak istiyorsanız, bana e-posta gönderin (kullanıcı adınızdaki ilk ad soyad) ve sonuçta hangi yöne gideceğinize bakmaksızın sohbet etmekten mutluluk duyarım. İyi şanslar!