DBAtlas · Veritabanı operasyon atlası

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
Ortamına göre adım adım planı aç →