Ana içeriğe geç

MongoDB Güvenliği 101: Her Geliştiricinin Bilmesi Gereken Temel Özellikler

Güvenli ve yüksek performanslı NoSQL uygulamaları oluşturmak için kimlik doğrulama, rol tabanlı erişim denetimi (RBAC), PoLP, TLS/SSL şifreleme ve CSFLE'yi öğrenin.
· 10 dk. oku

Yapay Zeka ile Keşfedin

MongoDB, kimlik doğrulama, yetkilendirme ve şifreleme olmak üzere üç temel ilkeye odaklanan kapsamlı bir güvenlik çerçevesi sunar.

Bu sütunlar, katmanlı bir güvenlik savunması oluşturarak tek bir hatanın tüm sistemi tehlikeye atmasını engeller. Yetkilendirme sütunu, en az ayrıcalık ilkesi (PoLP) tarafından yönlendirilir ve her kullanıcı veya uygulamanın görevlerini yerine getirmek için gereken minimum izinlere sahip olmasını sağlar. 

Bu kapsamlı, katmanlı yaklaşımı uygulamak genel güvenlik duruşunuzu güçlendirir ve yanlış yapılandırma veya ihlallere maruziyeti önemli ölçüde azaltır. 

İlk Kapıyı Etkinleştirmek: Kimlik Doğrulama

Kimlik doğrulama temel güvenlik adımıdır. Bağlanmaya çalışan her unsurun kimliğini doğrular. MongoDB'de bu, yerel geliştirmede kolaylık sağlaması için varsayılan olarak devre dışı bırakılan güvenlik özelliklerinin etkinleştirilmesiyle sağlanır.

Varsayılan olarak, MongoDB dağıtımınız yalnızca localhost'u dinler ve kimliği doğrulanmamış erişime izin verir. Bu yapılandırma, ilk kurulum ve yerel denemeler için azami kolaylık sağlamak amacıyla bilinçlidir.

Üretim dağıtımları için geliştiricilerin dikkatini gerektiren iki ayar vardır:

  • Kimlik doğrulama durumu: Kimlik doğrulama varsayılan olarak devre dışıdır. Yetkilendirmeyi --auth ya da security.authorization ayarıyla etkinleştirebilirsiniz. dahili kimlik doğrulamayı etkinleştirmek, istemci yetkilendirmesini de etkinleştirir. Dikkat edin, erişim denetimi etkinleştirildiğinde kullanıcıların kimliklerini doğrulamaları gerekir.
  • Ağ bağlama (bindIp): Varsayılan olarak MongoDB ikilileri (mongod ve mongos) yalnızca localhost'a bağlanır. Bu güvenli varsayılan, bağlantıları aynı makineyle sınırlar. Üretim ortamlarında, bindIp ayarını, yetkili uygulama sunucularınızın IP adreslerini listeleyecek şekilde açıkça yapılandırmalısınız. IPv6 desteğine ihtiyacınız varsa, net.ipv6 yapılandırma dosyası ayarını veya --ipv6 komut satırı seçeneğini belirleyebilirsiniz; bu, ikilinin localhost IPv6 adresine de bağlanmasına neden olur. Bunu her zaman yetkili ağ arayüzleriyle sınırlayın.

2. Kimlik doğrulamayı nasıl etkinleştirirsiniz

Kimlik doğrulamanın etkinleştirilmesi, MongoDB'yi yerel bir oyun alanından güvenli bir veri deposuna dönüştürür. Bu, MongoDB yapılandırma dosyanızı (genellikle mongod.conf) değiştirip sunucuyu yeniden başlatarak yapılır.

Yapılandırma dosyası ayarı: Özelliği etkinleştirmek için security bölümünde authorization seçeneğini ayarlayın:

  authorization: enabled

İlk kullanıcı: Kimlik doğrulama etkinleştirildikten sonra, yönetici bir kullanıcı oluşturana kadar kimse bağlanamaz. Bu kritik ilk kullanıcı, admin veritabanında oluşturulmalı ve sisteme müdahale etmek ile diğer kullanıcıları oluşturmak için gerekli başlangıç yetkileri verilmelidir.

3. Kullanıcı ve parola yönetimi (createUser)

Yetkilendirme etkinleştirildikten sonra, tüm veritabanı erişimi kullanıcılar ve bunlara bağlı roller tarafından yönetilir. Bu kimlikleri tanımlamak için createUser komutunu kullanırsınız.

Sözdizimi ve roller: Bir kullanıcı oluştururken kullanıcı adını, parolasını ve bir roller dizisini belirtirsiniz. Roller, izinlerini tanımlar (örneğin belirli bir veritabanında readWrite).

db.createUser(
   {
     user: "appUser",
     pwd: passwordPrompt(),  // This function prompts for a password, which 
                                              // avoids storing the plain-text password in 
                                              // shell history and command logs.
     roles: [ { role: "readWrite", db: "inventory" } ]
   }
)

SCRAM standardı: MongoDB, parolaları güvenli şekilde işlemek için Salted Challenge Response Authentication Mechanism (SCRAM) üzerine dayanır. SCRAM, düz metin parolaları saklamaz; bunun yerine kriptografik olarak güçlü karma ve tuzlama kullanır ve rainbow table gibi yaygın saldırı vektörlerine karşı dayanıklıdır.

4. Gelişmiş kimlik doğrulama seçenekleri

Sıkı uyumluluk gereksinimleri veya karmaşık altyapısı olan kuruluşlar için MongoDB, mevcut kurumsal düzey kimlik doğrulama sistemleriyle entegrasyon sunar:

  • x.509 istemci sertifikaları: İstemcilerin parolalar yerine dijital sertifikalarla kimlik doğrulamasına olanak tanır; makineden makineye güven için sıklıkla kullanılan sağlam bir kimlik doğrulama katmanı sağlar.
  • LDAP/Kerberos: MongoDB'yi Active Directory veya OpenLDAP gibi harici hizmetlerle entegre ederek kullanıcıların mevcut kurumsal kimlik bilgilerini veritabanı erişimi için kullanmalarını sağlar.
  • OpenID Connect (OIDC) Kimlik Doğrulaması - İş Gücü ve İş Yükleri: Modern bulut yerel ve hibrit ortamlarda, MongoDB hem İş Gücü (Azure AD, Okta gibi IdP'ler üzerinden kullanıcı erişimi) hem de İş Yükü (AWS IAM veya Google Cloud Service Accounts gibi bulut sağlayıcı kimliği kullanılarak makineden makineye kimlik doğrulama) için Kimlik Federasyonu'nu destekler.

Yetkilendirme: RBAC ile Rolleri Tanımlamak

Kimlik doğrulama bir kullanıcının kim olduğunu teyit eder; yetkilendirme o kullanıcının ne yapmasına izin verildiğini belirler. MongoDB'nin Rol Tabanlı Erişim Denetimi (RBAC) sistemi, izinleri yönetmenin temel mekanizmasıdır ve kullanıcılar ile servislerin yalnızca kesinlikle ihtiyaç duydukları veri ve komutlarla etkileşime girmesini sağlar.

1. Rol Tabanlı Erişim Denetimi

MongoDB'nin RBAC modelinde, izinler roller halinde paketlenir ve bu roller kullanıcılara atanır. Yüzlerce bireysel izin atamak yerine, tek bir rol (ör. inventoryReader) atarsınız ve bu rol, otomatik olarak tanımlı izin setini (ör. inventory.products üzerinde okuma) içerir. Bu, izin yönetimini ölçeklenebilir ve denetlenebilir kılar.

2. Her geliştiricinin ihtiyaç duyduğu yerleşik roller

MongoDB, en yaygın erişim modellerini kapsayan güçlü bir yerleşik rol seti sağlar. Aşağıda birkaç örnek verilmiştir. Tam liste için yukarıdaki bağlantıya bakabilirsiniz.

  • read ve readWrite (veritabanı düzeyi erişim): Bunlar uygulama kullanıcıları için en yaygın rollerdir. Belirli bir veritabanındaki sistem dışı tüm koleksiyonlarda sırasıyla salt okuma veya okuma/yazma işlemleri yapma izni verir.
  • dbAdmin: Belirli bir veritabanını yönetmek için gerekli yönetim haklarını verir; dizin ve koleksiyon oluşturma, silme ve değiştirme gibi. Geliştirme ekipleri veya veritabanı bakım betikleri için uygundur.
  • clusterAdmin (operasyonel erişim): Bu yüksek ayrıcalıklı rol genellikle operasyon (DevOps/Ops) personeline ayrılır. Tüm MongoDB dağıtımını yönetmek için gerekli izinleri verir; çoğaltma kümelerinin yapılandırılması, parçalama ve yedeklemeler dahil. Uygulama geliştiricilerinin bu role nadiren ihtiyacı olur.

3. En az ayrıcalık ilkesini uygulamak

Modern veritabanı güvenliğinin temel taşı en az ayrıcalık ilkesi (PoLP)dir. Bu, her kullanıcıya (özellikle uygulama kullanıcılarına) gerekli görevleri yerine getirmek için gereken minimum izinlerin ve daha fazlasının verilmemesini öngörür.

En iyi uygulama örneği: Genel bir readWrite kullanıcısı kullanmak yerine uygulamaya özel kullanıcılar oluşturun. Örneğin, envanter servisiniz yalnızca app_data veritabanıyla etkileşime giriyorsa, uygulama kullanıcısına yalnızca o tek veritabanı için readWrite erişimi verilmelidir. Bu bölümlendirme, ele geçirilmiş bir servisin diğer veritabanlarına (ör. billing veya users) yetkisiz erişim kazanmasını engeller.

Kod örneği: en az ayrıcalıklı kullanıcı oluşturma

Bu örnek, inventory_service adlı ve yalnızca app_data veritabanıyla sınırlı okuma/yazma erişimine sahip bir kullanıcı oluşturur.

use admin
db.createUser(
   {
     user: "inventory_service",
     pwd: passwordPrompt(),
     roles: [ 
       { role: "readWrite", db: "app_data" }
     ]
   }
)

4. Özel roller oluşturmak (yerleşikler yeterli olmadığında)

Yerleşik roller güçlü olsa da, uyumluluk veya karmaşık uygulama mantığı son derece ayrıntılı kontrol gerektirebilir. Bu durumlarda MongoDB, özel roller tanımlamanıza olanak tanır; bunun için db.createRole() komutu kullanılır.

Ayrıntılı izinleri tanımlamak: Özel roller, hangi ayrıcalık eylemlerinin (ör. find, update, insert) küme, veritabanı veya koleksiyon düzeyinde kapsamlandırılmış kaynaklar üzerinde gerçekleştirilebileceğini tam olarak belirtmenizi sağlar. Kuruluşlar, genel bir koleksiyon içinde son derece hassas veri alanlarını korumak için alan düzeyinde sansürleme gibi tekniklerden yararlanabilir.

Kod örneği: özel bir rol oluşturma

Bu örnek, product_creator adlı, yalnızca app_data veritabanındaki products koleksiyonuna belge ekleyebilen özel bir rol oluşturur.

use app_data
db.createRole(
   {
     role: "product_creator",
     privileges: [
       {
         resource: { db: "app_data", collection: "products" },
         actions: [ "insert" ]
       }
     ],
     roles: []
   }
)

Kapsamlı Veri Koruma: Ağ İzolasyonu ve Şifreleme

Güçlü kimlik doğrulama ve yetkilendirme veritabanınıza erişimi kontrol ederken, kapsamlı güvenlik verinin kendisinin korunmasını gerektirir — hem ağ üzerinde aktarılırken (iletişim halinde) hem de disk üzerinde depolanırken (durağan).

1. TLS/SSL ile aktarım halindeki veriyi korumak

İster veri merkezinde dahili ister buluta harici bir ağ olsun, herhangi bir ağ üzerinden veri iletimi, dinleme ve ortadaki adam (MITM) saldırılarını önlemek için şifrelenmelidir. MongoDB, istemciler (uygulamanız gibi) ile sunucu arasındaki tüm iletişimi şifrelemek için Taşıma Katmanı Güvenliği/Güvenli Yuva Katmanı (TLS/SSL) kullanır.

TLS/SSL olmadan kullanıcı kimlik bilgileri, sorgu parametreleri ve hassas sonuçlar düz metin olarak iletilir ve bunları ele geçirmek son derece kolaydır. TLS/SSL'yi etkinleştirmek, verinin iletim sırasında karıştırılıp güvence altına alınmasını sağlar.

TLS/SSL'yi etkinleştirmek: Bu, esas olarak sunucunun kimlik doğrulaması ve anahtar değişimi için kullanacağı sertifikaların belirtildiği yapılandırma ayarlarıyla yapılır:

net:
  tls:
    mode: requireTLS
    certificateKeyFile: /etc/ssl/mongodb.pem
  • net.ssl.mode: requireTLS tüm gelen bağlantıları TLS/SSL kullanmaya zorlar ve güvensiz girişimleri reddeder.
  • certificateKeyFile, oluşturduğunuz TLS/SSL sertifikası ile Sertifika Yetkilisi dosyasını işaret eder.

2. Güvenlik duvarı ve ağ bölümlendirme

Ağ bölümlendirme, veritabanına bağlanabilecek fiziksel veya sanal arayüzleri sınırlayarak kritik bir savunma katmanı sağlar. Bir saldırgan ağa erişim elde etse bile, yine de çevre güvenliğinizi aşması gerekir.

  • IP beyaz listeleme ile erişimi kısıtlama: bindIp ayarını kullanarak veya ağ güvenlik duvarlarını yapılandırarak belirli IP adreslerini beyaz listeye alabilirsiniz.
  • En iyi uygulama: MongoDB sunucusu yalnızca uygulama sunucularınıza, yük dengeleyicinize veya proxy katmanınıza açılmalıdır. Halka açık internete doğrudan erişilebilir olmamalıdır. Bu bölümlendirme, veritabanını uygulama altyapısının güvenlik çevresi arkasında korur.

3. Durağan verinin şifrelenmesi (depolama motoru şifrelemesi)

Durağan verinin korunması, fiziksel disk veya ana makine ortamı tehlikeye girse bile dosyaların okunamaz kalmasını sağlar. MongoDB bunu depolama motoru şifrelemesiyle gerçekleştirir.

  • Nasıl çalışır: WiredTiger depolama motoru, disk üzerindeki tüm veri dosyalarını, yapılandırma dosyalarını ve günlük (journal) dosyalarını şifreleyecek şekilde yapılandırılabilir. Veri yazılırken şeffaf biçimde şifrelenir ve okunurken şifresi çözülür; şifreleme anahtarı sistem tarafından yönetilir.
  • Kritik husus: Bu kritik bir güvenlik katmanı olsa da, yerel durağan veri şifrelemesi genellikle bir MongoDB Enterprise özelliğidir ve şifreleme anahtarlarını yönetmek için harici KMIP sunucularına veya yerel anahtar dosyalarına dayanır.

4. İstemci Tarafı Alan Düzeyi Şifreleme (CSFLE): Geliştiricinin altın standardı

Durağan şifreleme tüm veritabanını korurken, İstemci Tarafı Alan Düzeyi Şifreleme (CSFLE) geliştiriciye hassas veriler üzerinde cerrahi hassasiyet sağlar; veritabanına gönderilmeden önce belirli alanların şifrelenmesine imkân tanır.

  • CSFLE'ye giriş: CSFLE ile şifreleme, veri uygulama sunucusundan çıkmadan önce uygulama sürücüsü içinde gerçekleşir. Bu, MongoDB sunucusunun hiçbir zaman düz metin hassas veriyi görmediği; yalnızca şifreli metni sakladığı anlamına gelir. Hassas veri, sunucuda bellek, sunucu günlükleri ve depolama dahil her zaman şifreli kalır.
  • Geliştiricinin en güçlü aracı: CSFLE, (ör. GDPR, HIPAA) uyumluluğu için altın standarttır; zira tam bir veritabanı ihlali durumunda bile hassas alanlar (Kişisel Veriler veya finansal bilgiler gibi) şifreli ve korumalı kalır. Geliştiriciler neyin şifreleneceğine aktif olarak karar vermeli ve şifreleme mantığını doğrudan uygulama kodlarına entegre etmelidir.

5. Kullanım halinde şifreleme: Sorgulanabilir Şifreleme

Sorgulanabilir Şifreleme, şifrelenmiş alanlarda sorgulama zorluğunu ele alan CSFLE'nin bir ilerlemesidir. Uygulamaların, (ör. şifrelenmiş bir alanın belirli bir değere eşit olduğu belgeleri bulmak gibi) eşitlik sorgularını doğrudan şifreli metin üzerinde gerçekleştirmesine olanak tanır. Bu, kullanım halinde veriyi etkin biçimde şifreleyerek CSFLE güvenliğini veri faydasıyla birleştirir.

Denetim: Olay Sonrası Aracı

Güvenlik önlemleri önlemeye yöneliktir; denetim ise hesap verebilirlik ve tespit içindir. MongoDB'nin yerleşik denetim çerçevesi, güvenlikle ilgili olayları izleme ve günlüğe kaydetme yeteneği sağlar; adli tıp, uyumluluk ve proaktif tehdit tespiti için kritik olan değiştirilemez bir kayıt sunar.

1. Denetim nedir ve neden önemlidir?

Denetim, veritabanına karşı gerçekleştirilen her kritik eylemi günlüğe kaydeder ve ayrıntılı bir tarihsel kayıt oluşturur. Buna şunlar dahildir:

  • Kimlik doğrulama olayları: başarılı ve başarısız oturum açma girişimleri.
  • Yetkilendirme değişiklikleri: kullanıcı ve rollerin oluşturulması, değiştirilmesi veya silinmesi.
  • Yapılandırma değişiklikleri: güvenliği etkileyen sistem parametrelerindeki değişiklikler.

Bu günlük, güvenlik ekiplerinin olay sonrası analiz ("otopsi" aracı) yapması veya düzenleyici uyumluluk gereklerini karşılaması için paha biçilmezdir.

2. Yapılandırma ve filtreleme

Denetimi etkinleştirmek basittir; sistemi etkinleştirmek ve günlüğün hedefini (dosya, syslog veya konsol) belirtmek için genellikle yapılandırma dosyasına tek satır eklemek yeterlidir.

auditLog:
  destination: file
  format: BSON
  path: /var/log/mongodb/audit.bson
  filter: '{ atype: { $in: [ "authenticate", "createRole", "dropUser" ] } }'
  • Filtreleme: Denetim sistemi, sorgu benzeri bir sözdizimi kullanarak son derece ayrıntılı filtreleme sağlar. Bu, günlük hacmini yönetmek için kritiktir. Geliştiriciler, filtreyi kullanıcı yönetimi işlemleri, güvenlik yapılandırmasındaki değişiklikler ve kimlik doğrulama girişimleri gibi kritik, güvenlikle ilgili olaylara odaklamalıdır.

Özet ve sonraki adımlar

MongoDB, doğru şekilde dağıtıldığında güçlü bir derinlemesine savunma stratejisi oluşturan kapsamlı bir güvenlik özellikleri paketi sunar. Bir geliştirici olarak birincil göreviniz, geliştirme varsayılanlarının ötesine geçip bu temel kontrolleri uygulamaktır.

Herhangi bir uygulama üretime çıkmadan önce, şu üç temel güvenlik ilkesini unutmayın:

  • Aktarım halindeki veriyi şifreleyin: Tüm ağ bağlantıları için TLS/SSL kullanın (net.ssl.mode: requireTLS).
  • Durağan veriyi şifreleyin: Diskteki veritabanı dosyalarının, yetkisiz dosya erişimine karşı korunması için birim ya da dosya sistemi düzeyi şifreleme veya MongoDB Enterprise'da sunulan WiredTiger depolama motoru şifrelemesi ile güvenceye alındığından emin olun.
  • Kullanım halindeki veriyi şifreleyin: Son derece hassas veri alanları için İstemci Tarafı Alan Düzeyi Şifreleme (CSFLE) ve Sorgulanabilir Şifreleme kullanın; böylece veritabanı çalışırken bile verinin şifreli kalmasını sağlayın.

Güvenlik gelişen bir disiplindir. Daha derinlemesine bilgiler ve ileri düzey yapılandırmalar için resmi dokümantasyonu kullanın:

Ayrıca Python ile Veri Bilimi için MongoDB Kullanımına Giriş kursuna göz atmanızı da öneririm.

MongoDB Güvenlik SSS

Üretim için tek en önemli güvenlik ayarı nedir?

Yapılandırmada security.authorization: enabled ayarını etkinleştirerek kimlik doğrulama.

Kimlik doğrulama ve yetkilendirme arasındaki fark nedir?

Kimlik doğrulama, genellikle kullanıcı adı ve parolayla kim olduğunuzu (kimlik) doğrular. Yetkilendirme, en az ayrıcalığı RBAC ile uygulayarak ne yapabileceğinizi (izinler) belirler.

En az ayrıcalık ilkesinin (PoLP) amacı nedir?

En az ayrıcalık ilkesi (PoLP), kullanıcılara ve sistemlere yalnızca belirli görevleri için kesinlikle gerekli erişimleri vermeyi amaçlar. Bu, bir ihlal sırasında hasarı en aza indirirken; iç tehditlere ve operasyonel hatalara karşı da kritik bir savunma sağlar ve aynı zamanda kuruluşunuzun sıkı düzenleyici uyumluluk gerekliliklerini karşılamasına yardımcı olur. Güvenlik açısından, küçük çocuğunuza yalnızca kırılmayacak oyuncakları vermeye benzer.

TLS/SSL verilerimi nasıl korur?

TLS/SSL, aktarım halindeki veriyi şifreler; yani uygulamanız ile MongoDB sunucusu arasındaki tüm iletişimi ağ üzerinde karıştırır.

İstemci Tarafı Alan Düzeyi Şifreleme'nin (CSFLE) temel faydası nedir?

CSFLE, uygulamada belirli hassas verileri (KVK gibi) istemciden çıkmadan önce şifreler. Bu, MongoDB sunucusunun veya yöneticisinin ele geçirilmesi durumunda bile verinin korumalı kalmasını sağlar.

Karen Zhang

Yazar

Karen Zhang

Karen, ölçeklenebilir veri platformları kurma tutkusu olan bir Veri Mühendisidir. Terraform ile altyapı otomasyonu konusunda deneyime sahiptir ve öğrendiklerini blog yazıları ve eğitimlerde paylaşmaktan heyecan duyar. Karen bir topluluk geliştiricisidir ve veri profesyonelleri arasında bağlantılar kurmaya tutkuyla bağlıdır.

Konular

İlgili