MongoDB güvenlik sıkılaştırma (yetkilendirme, TLS, roller, audit)
MongoDBSeviye: İleriSüre: 10 dk (denetim) – 2 saat (tam sıkılaştırma)Çalışan bir MongoDB'yi (tek sunucu, replica set ya da sharded cluster) kesinti olmadan sıkılaştırmak için senaryo bazlı runbook: salt-okur güvenlik denetimi, keyFile + transitionToAuth ile rolling yetkilendirme, en az yetkili custom role ve kullanıcılar, SCRAM-SHA-256, bindIp ve firewall, allowTLS → preferTLS → requireTLS geçişi, x.509 üyelik, audit log (Enterprise/Percona) ve encryption at rest; sonunda denetim tekrarlanıp risklerin kapandığı gösterilir. Bu rehberin kurulum rehberleriyle kurulmuş sistemlerde yetkilendirme ve keyfile zaten açıktır: denetimle başlayıp yalnız RİSK çıkan senaryoları uygulayın. Günlük işletim ve yedek ayrı MongoDB rehberlerindedir.
Yapı: Tek sunucu, 3+ üyeli replica set ya da sharded cluster
Senaryolar
- Güvenlik durumu denetimi (salt-okur) — Hiçbir şey değiştirmez. Kimliksiz erişim, dinlenen adresler, TLS, kimlik doğrulama mekanizmaları, yüksek yetkili kullanıcılar, audit ve encryption at rest durumu OK / UYARI / RİSK olarak raporlanır. Nereden başlayacağınızı bilmiyorsanız bunu seçin.
- Tam sıkılaştırma (hepsi sırayla) — Denetim → internal auth + authorization (transitionToAuth ile kesintisiz) → en az yetkili kullanıcılar → SCRAM-SHA-256 → bindIp/firewall → TLS (allowTLS → preferTLS → requireTLS) → audit (Enterprise/Percona) → son denetim. Replica set'te rolling yapılır; her riskli adım onay ister.
- Yetkilendirme kapalı: authorization'ı aç (keyFile, kesintisiz) — Herkes kullanıcı adı/parola olmadan bağlanabiliyor. Replica set ve sharded cluster'da keyFile + transitionToAuth ile rolling ve kesintisiz açılır; tek sunucuda tek bir kısa yeniden başlatma gerekir.
- En az yetkili kullanıcılar ve custom role (uygulama, yedek, izleme) — Uygulamalar root ya da ortak bir yönetici hesabıyla bağlanıyor. Uygulamaya yalnız kendi veritabanında gereken işlemleri veren custom role, yedek ve izleme için ayrı kullanıcılar oluşturulur; parolaların cron/uygulama tarafında güvenli saklanması gösterilir.
- SCRAM-SHA-1'i kapat, yalnız SCRAM-SHA-256 — Eski kullanıcıların kimlik bilgisi SHA-1 ile saklanıyor ya da denetim SCRAM-SHA-1'i açık buldu. Kullanıcılar SHA-256'ya taşınır, ardından authenticationMechanisms rolling yeniden başlatmayla daraltılır.
- Ağ erişimini daralt (bindIp 0.0.0.0, firewall) — mongod tüm arayüzlerde (0.0.0.0, bindIpAll) dinliyor ya da port herkese açık. bindIp yalnız localhost + sunucunun iç IP'sine indirilir, firewall yalnız üyelere ve uygulama ağına izin verir. Rolling, kesintisiz.
- Bağlantıları şifrele: TLS (allowTLS → preferTLS → requireTLS) — Uygulama ve üyeler arası trafik şifresiz. Sertifikalar dağıtılır, üyeler önce allowTLS ile rolling açılır, sonra çalışırken preferTLS ve uygulamalar hazır olunca requireTLS yapılır. İsteğe bağlı: üyeler arası x.509 doğrulama.
- Audit log'u aç (Enterprise / Percona) — Kimin ne zaman oturum açtığı, kullanıcı/rol değişiklikleri ve drop işlemleri kayıt altına alınmalı. MongoDB Enterprise ve Percona Server for MongoDB'de auditLog ile açılır; Community'de bu özellik yoktur (alternatif gösterilir).
- Encryption at rest (diskteki veriyi şifrele) — Disk ya da yedek çalınırsa veri okunamasın. Enterprise/Percona'da WiredTiger şifrelemesi üyeler tek tek initial sync ile yeniden kurularak açılır; Community'de veri diski LUKS ile şifrelenir.
Başlamadan önce
- Tüm mongod… ve mongos… sunucularında root/sudo erişimi; ilk sunucudan diğerlerine SSH (keyfile ve sertifika kopyalama için).
- …Replica set sağlıklı: tüm üyeler PRIMARY/SECONDARY, gecikme düşük. Sağlıksız cluster'da rolling işlem yapılmaz.…mongod çalışıyor.…
- Uygulama listesi ve sahipleri: yetkilendirme/TLS zorunlu olmadan önce her uygulamanın bağlantı dizesi güncellenecek. Bağlantı dizesi tüm üyeleri ve replicaSet= içermeli (rolling sırasında kopmamak için).
- Bakım penceresi: rolling işlemler kesintisizdir ama her primary değişiminde birkaç saniye yazma bekler. Tek sunucuda yetkilendirme/TLS açma kısa kesinti ister.
- Sharded cluster'da yetkilendirme zaten açıksa: her shard'ın primary'sinde, mongos'taki … ile aynı ad ve parolada shard-local kullanıcı (root) bulunmalı. Üye bazlı adımlar (rolling yeniden başlatmada rs.stepDown, setParameter, denetim) shard üyelerine doğrudan bağlanır; mongos kullanıcıları orada geçerli değildir. Kontrol: shard üyesinde mongosh --port <shard portu> ile db.getSiblingDB("admin").auth("…", passwordPrompt()).
- Güncel ve geri yüklemesi denenmiş tam yedek.
- Audit ve encryption at rest için MongoDB Enterprise lisansı ya da Percona Server for MongoDB. Community'de bu özellikler yoktur.
- Üye adları her sunucuda çözülüyor (DNS ya da /etc/hosts); TLS'te bağlantılar bu adlarla yapılır.
Rehberin aşamaları
- Hazırlık: güvenlik ağı ve yardımcı araçlar — Yapılandırma ve durum yedeği · PyYAML'ı kur · YAML düzenleme aracını yaz (dbatlas-yaml) · Rolling yeniden başlatma aracını yaz (dbatlas-mongod-restart) · Yönetici parolasını geçici dosyaya yaz
- Durum denetimi (salt-okur) — Ağ, süreç ve dosya izinleri: … · Ağ ve süreç: … · Yetkilendirme, TLS ve parametreler: … · Yetkilendirme, TLS ve parametreler: … · Kullanıcılar, roller ve kimlik doğrulama mekanizmaları · Bulguları senaryolara eşle
- Yetkilendirme: teşhis ve keyfile — Teşhis: yetkilendirme gerçekten kapalı mı? · Uygulama bağlantılarını envanterle · Keyfile oluştur · Keyfile'ı diğer sunuculara kopyala · Keyfile izinleri: … · Keyfile izinleri: …
- Yetkilendirme: yönetici kullanıcı — Yönetici kullanıcıyı oluştur (…) · Shard-local yönetici: …
- En az yetkili kullanıcılar ve custom role — Uygulama için custom role oluştur (…@…) · Uygulama kullanıcısını oluştur (…) · Yedek ve izleme kullanıcıları · En az yetkiyi doğrula (…) · Parolaları uygulama ve cron tarafında güvenli sakla
- Yetkilendirme: kimliksiz bağlantı kalmadığını doğrula — Kimliksiz istemci bağlantıları: …
- Yetkilendirmeyi zorunlu kıl (tek sunucu) — authorization: enabled · Servisi güvenli yeniden başlat (…)
- Yetkilendirme: doğrulama — Kimliksiz erişim reddediliyor mu? · En az yetkiyi doğrula (…) · Geri alma yolu (gerekirse)
- SCRAM-SHA-256: kullanıcıları taşı — SHA-1 kimliği olan kullanıcılar · Kullanıcıları yalnız SCRAM-SHA-256'ya indir
- SCRAM-SHA-256: doğrulama — SHA-1 ile giriş reddediliyor mu?
- Ağ erişimi: firewall — Firewall kuralları
- Ağ erişimi: doğrulama — Dinlenen adresler: …
- TLS: sertifikalar — Mevcut TLS durumu · İç CA ve sunucu sertifikalarını üret · Sertifikaları dağıt · Sertifika izinleri ve doğrulama: … · Sertifika izinleri: …
- TLS: uygulamaları geçir — Uygulamaları TLS'e geçir ve TLS bağlantılarını say
- TLS: doğrulama — TLS'siz bağlantı reddediliyor mu: …
- Audit log: ön kontrol — Bu mongod audit destekliyor mu: …
- Audit log: doğrulama ve döndürme — Audit kaydı oluşuyor mu: … · Community alternatifi: kimlik doğrulama loglarını izle
- Encryption at rest: ön kontrol ve yedek — Şifreleme desteği ve disk alanı: … · Tam yedek alındı mı?
- Encryption at rest: deneme işareti — Düz metin işaret yaz
- Encryption at rest (Community): LUKS ile veri diski — LUKS diski hazırla: … · Veriyi şifreli diske taşı: …
- Son denetim (sıkılaştırma sonrası) — Ağ, süreç ve dosya izinleri: … (son durum) · Ağ ve süreç: … (son durum) · Yetkilendirme, TLS ve parametreler: … (son durum) · Yetkilendirme, TLS ve parametreler: … (son durum) · Kullanıcılar, roller ve kimlik doğrulama mekanizmaları (son durum)
- Temizlik ve sonrası — Geçici parola dosyasını sil · Sonrası: izleme ve periyodik işler