Veri tabanları, günümüzde kuruluşların veri varlıklarını güvenli ve etkili bir şekilde yönetmeleri için hayati önem taşımaktadır. Bu bağlamda, rol tabanlı yetkilendirme, kullanıcıların veri tabanındaki erişim düzeylerini ve yetkilerini esnek bir şekilde yönetmelerine olanak tanırken, güvenlik ve yönetim açısından kritik bir rol oynamaktadır. Bu yazımızda mongodb veri tabanlarında rol tabanlı yetkilendirmeyi sağlayabilmek için authorization parametresinden bahsedeceğiz.
MongoDB veri tabanlarında rol tabanlı yetkilendirme default olarak kapalı durumdadır. Aslında Veri tabanı seviyesinde rol tabanlı yetkilendirme için çeşitli yetkilere sahip rol grupları bulunmaktadır fakat bu rolleri bir kullanıcıya atadığımızda atanan rol dışında da işlem yapabildiğini görebilmekteyiz. Yani bir kullanıcıya “read” rolü tanımlamamıza rağmen kullanıcı yazma işlemi yapabilmekte hatta collection silebilmektedir.
MongoDB’de rol tabanlı yetkilendirmeyi tam anlamıyla kullanabilmek için authorization parametresini aktif hale getirmemiz gerekmektedir.
MongoDB Authorization Parametresi
MongoDB’de authorization
parametresinin önemi, veri tabanı sunucusunun güvenlik ayarlarını belirlemesidir. Bu parametre, kimlik doğrulamasının etkin olup olmadığını belirler. authorization
parametresinin iki değeri vardır;
enable
d : Bu değer, kimlik doğrulamasının etkin olduğunu ve kullanıcıların veritabanına erişmek için kimlik doğrulaması yapmaları gerektiğini belirtir
disabled
: Bu değer, kimlik doğrulamasının devre dışı bırakıldığını belirtir. Kullanıcıların veri tabanına erişmek için kimlik doğrulaması yapmaları gerekmez. Güvenlik riskleri oluşturacağı için canlı ortamlarda önerilmez
Authorization parametresinin önemi aşağıdaki şekilde özetlenebilir.
Güvenlik: Kimlik doğrulaması, veritabanı erişimini sınırlar ve yetkilendirilmemiş erişimi engeller, böylece veritabanını kötü niyetli kullanıcılardan korur.
İzlenebilirlik: Kimlik doğrulaması, kullanıcı faaliyetlerini izlemeyi kolaylaştırır. Kimin hangi kaynaklara eriştiği gibi faaliyetleri denetlemek için kimlik doğrulamasının etkinleştirilmesi önemlidir.
Yönetim: Kimlik doğrulaması, kullanıcıların veri tabanına erişmek için kimlik doğrulaması yapmalarını gerektirir, bu da veri tabanı yöneticilerinin kullanıcıların erişim haklarını kontrol etmesini ve yönetmesini sağlar.
Parametrenin Aktif Hale Getirilmesi
Parametre 1 Primary ve 2 Standby sunucudan oluşan replicaset’de parametre aşağıdaki şekilde aktif hale getirilebilir.
İlk olarak replicaset üyelerinin bulunduğu bütün nodelarda mongo-security dizini oluşturulur.
root@mongodbtest01: mkdir /var/lib/mongodb/mongo-security
root@mongodbtest02: mkdir /var/lib/mongodb/mongo-security
root@mongodbtest03: mkdir /var/lib/mongodb/mongo-security
MongoDB replicaset üzerinde authorization parametresini aktif edebilmek için keyfile oluşturulması gerekmektedir. Keyfile bir MongoDB replika kümesinde veya bir MongoDB sharded kümesinde bulunan üyeler arasında iletişimi şifrelemek için kullanılır. Aşağıdaki komut ile , OpenSSL kütüphanesini kullanarak 768 bayt uzunluğunda base64 algoritması kodlanmış bir key üretiyoruz.
root@mongodbtest01: openssl rand -base64 768 > /var/lib/mongodb/mongo-security/keyfile.txt
Replicaset’de bulunan bütün sunucularda aynı key bulunması gerektiği için keyfile.txt dosyasını diğer sunuculara da aktarıyoruz.
root@mongodbtest01: scp /var/lib/mongodb/mongo-security/keyfile.txt root@mongodbtest02:/var/lib/mongodb/mongo-security/
root@mongodbtest01: scp /var/lib/mongodb/mongo-security/keyfile.txt root@mongodbtest03:/var/lib/mongodb/mongo-security/
Keyfile bütün sunuculara taşındıktan sonra dosya ve dizin yetkilerini ayarlıyoruz.
root@mongodbtest01: chown mongodb:mongodb -R /var/lib/mongodb
root@mongodbtest02: chown mongodb:mongodb -R /var/lib/mongodb
root@mongodbtest03: chown mongodb:mongodb -R /var/lib/mongodb
root@mongodbtest01: chmod 400 /var/lib/mongodb/mongo-security/keyfile.txt
root@mongodbtest02: chmod 400 /var/lib/mongodb/mongo-security/keyfile.txt
root@mongodbtest03: chmod 400 /var/lib/mongodb/mongo-security/keyfile.txt
Authorization parametresini aktif etmeden önce hem mongodb cluster’ımızı yönetmek için hemde operasyonel işlemleri gerçekleştirmek için veri tabanı seviyesinde root yetkisine sahip bir kullanıcı oluşturmamız gerekiyor. Mongodb ye bağlanarak admin veri tabanı altında kullanıcıyı oluşturuyoruz.
root@mongodbtest01: mongosh
mongodb-Replication [direct: primary] test> use admin
mongodb-Replication [direct: primary] admin>
mongodb-Replication [direct: primary] admin> db.createUser( { user: "sysdbaops", pwd: "pass", roles: [{ role: "root", db: "admin" }] } );
Kullanıcıyı oluşturduktan sonra cli üzerinde erişimi kontrol ediyoruz.
root@mongodbtest01: mongosh -u msrsAdmin -p pass --authenticationDatabase admin
Bağlantıyı sağladığımızı teyit ettikten sonra , artık veri tabanı seviyesinde parametre değişikliğini gerçekleştirebiliriz. Bütün nodelarda mongod.conf dosyasına security bölümünü aktif ederek aşağıdaki parametreleri geçiyoruz.
root@mongodbtest01: vi /etc mongod.conf
#security:
security:
authorization: enabled
keyFile: /var/lib/mongodb/mongo-security/keyfile.txt
Parametreyi ekledikten sonra bütün nodelarda servis restart edilir.
root@mongodbtest01: systemctl restart mongod.service
root@mongodbtest02: systemctl restart mongod.service
root@mongodbtest03: systemctl restart mongod.service
İşlem tamamlandıktan sonra artık kullanıcılarımıza role tabanlı yetkilendirme yapabiliriz. Konu hakkında detaylı bilgi mongodb kurumsal dökümanında bulunabilir. Diğer yazılarımıza buradan göz atabilirsiniz.