MongoDB তে সিকিউরিটি একটি গুরুত্বপূর্ণ বিষয়, কারণ এটি ডেটাবেসে থাকা তথ্যের সুরক্ষা এবং এক্সেস কন্ট্রোল নিশ্চিত করে। MongoDB বিভিন্ন সিকিউরিটি ফিচার প্রদান করে, যেমন অথেন্টিকেশন, অথরাইজেশন, এনক্রিপশন, এবং অডিট লগিং। এইসব ফিচারের মাধ্যমে MongoDB ডেটাবেসে তথ্যের সুরক্ষা নিশ্চিত করা যায়।
1. Authentication (অথেন্টিকেশন)
অথেন্টিকেশন হল একটি প্রক্রিয়া, যেখানে MongoDB সার্ভারে অ্যাক্সেস করার জন্য ব্যবহারকারীর পরিচয় যাচাই করা হয়। MongoDB তে ডিফল্টভাবে অথেন্টিকেশন সক্ষম থাকে না, কিন্তু এটি চালু করার জন্য auth সেটিং ব্যবহার করতে হয়।
অথেন্টিকেশন মোডস
- মেকানিকাল অথেন্টিকেশন (SCRAM): MongoDB তে ডিফল্ট অথেন্টিকেশন পদ্ধতি। এটি SCRAM-SHA-1 এবং SCRAM-SHA-256 নামে দুটি অ্যালগরিদম সমর্থন করে।
- X.509 সার্টিফিকেট অথেন্টিকেশন: সার্টিফিকেট ব্যবহার করে ব্যবহারকারীর পরিচয় যাচাই করা হয়।
- LDAP অথেন্টিকেশন: MongoDB LDAP ইন্টিগ্রেশন সাপোর্ট করে, যেখানে ব্যবহারকারীদের LDAP সার্ভারে অথেন্টিকেট করা হয়।
অথেন্টিকেশন সক্রিয় করা
MongoDB তে Authentication চালু করার জন্য, MongoDB সার্ভারের কনফিগারেশন ফাইলে --auth ফ্ল্যাগ ব্যবহার করতে হয়।
mongod --auth --dbpath /data/db
একবার অথেন্টিকেশন চালু হলে, প্রতিটি ব্যবহারকারীকে একটি username এবং password দিয়ে লগ ইন করতে হবে।
2. Authorization (অথরাইজেশন)
অথরাইজেশন হল ব্যবহারকারীকে সিস্টেমের নির্দিষ্ট ডেটাবেস বা কালেকশনে অ্যাক্সেস দেওয়ার প্রক্রিয়া। MongoDB তে Role-Based Access Control (RBAC) পদ্ধতি ব্যবহার করা হয়, যার মাধ্যমে প্রতিটি ব্যবহারকারী নির্দিষ্ট ভূমিকা (role) দিয়ে অ্যাক্সেস পায়।
MongoDB Roles
MongoDB তে বিভিন্ন ধরনের প্রি-ডিফাইন্ড রোলস রয়েছে, যেমন:
read: শুধু ডেটা পড়ার অনুমতি।readWrite: ডেটা পড়া এবং লেখা (insert, update, delete) অনুমতি।dbAdmin: ডেটাবেস প্রশাসনিক কাজের অনুমতি (যেমন ইনডেক্স তৈরি)।root: সব ধরনের অ্যাক্সেস (admin, read, write)।
নতুন রোল তৈরি করা
MongoDB তে নতুন রোল তৈরি করতে createRole ব্যবহার করা হয়। উদাহরণ:
db.createRole({
role: "customRole",
privileges: [
{ resource: { db: "test", collection: "users" }, actions: [ "find", "update" ] }
],
roles: []
});
3. Encryption (এনক্রিপশন)
MongoDB তে ডেটার সুরক্ষা নিশ্চিত করার জন্য এনক্রিপশন খুবই গুরুত্বপূর্ণ। MongoDB দুটি ধরণের এনক্রিপশন সমর্থন করে:
এনক্রিপশন ইন ট্রানজিট (Encryption in Transit)
এটি MongoDB ক্লায়েন্ট এবং সার্ভারের মধ্যে প্রেরিত ডেটা এনক্রিপ্ট করে। TLS/SSL প্রোটোকল ব্যবহার করে এটি নিশ্চিত করা হয়। এটি MongoDB সার্ভার ও ক্লায়েন্টের মধ্যে যোগাযোগের সময় ডেটা সুরক্ষিত রাখে।
mongod --sslMode requireSSL --sslPEMKeyFile /path/to/server.pem --sslCAFile /path/to/ca.pem
এনক্রিপশন অ্যাট রেস্ট (Encryption at Rest)
এটি MongoDB ডেটাবেসের ডেটাকে ডিস্কে সুরক্ষিত রাখতে ব্যবহৃত হয়। MongoDB 4.2 এবং তার পরবর্তী সংস্করণে Encrypted Storage Engine সমর্থিত।
MongoDB তে এনক্রিপশন অ্যাট রেস্ট চালু করতে:
mongod --enableEncryption --encryptionKeyFile /path/to/keyfile
4. Auditing (অডিটিং)
MongoDB তে অডিটিং ফিচার ব্যবহারকারীদের ডেটাবেসে কার্যকলাপ ট্র্যাক করতে সাহায্য করে। অডিটিং লগ MongoDB তে যে সমস্ত কার্যক্রম চালানো হচ্ছে তা রেকর্ড করে রাখে, যেমন লগইন, ডেটাবেস/কালেকশন ম্যানিপুলেশন ইত্যাদি।
অডিটিং চালু করা
MongoDB তে অডিটিং চালু করতে auditLog ফিচার ব্যবহার করতে হয়। কনফিগারেশন এডিট করে এবং লগ ফাইলের পাথ সেট করে অডিটিং চালু করা হয়।
mongod --auditDestination file --auditFormat JSON --auditPath /path/to/audit.log
5. Network Security
MongoDB তে নেটওয়ার্ক সিকিউরিটি নিশ্চিত করার জন্য কিছু পদক্ষেপ নিতে হয়। এর মধ্যে রয়েছে:
- ফায়ারওয়াল কনফিগারেশন: MongoDB সার্ভারটি শুধুমাত্র নির্দিষ্ট আইপি থেকে কানেক্ট হতে পারে এমনভাবে কনফিগার করা।
- bindIp প্যারামিটার: MongoDB সার্ভারকে শুধুমাত্র নির্দিষ্ট নেটওয়ার্ক ইন্টারফেস থেকে অ্যাক্সেসযোগ্য করে তোলে।
mongod --bind_ip 127.0.0.1
এটি MongoDB কে শুধুমাত্র লোকালহোস্ট থেকে অ্যাক্সেস করতে অনুমতি দেয়।
6. Backup and Restore Security
MongoDB তে সুরক্ষিত ব্যাকআপ ও রিস্টোর প্রক্রিয়া নিশ্চিত করতে, role-based access ব্যবহার করে শুধুমাত্র অনুমোদিত ব্যবহারকারীকে ব্যাকআপ এবং রিস্টোরের অনুমতি দেওয়া উচিত। MongoDB তে backup রোল এর মাধ্যমে ব্যাকআপ পরিচালনা করা হয়।
সারাংশ
MongoDB তে সিকিউরিটি ব্যবস্থাপনা অত্যন্ত গুরুত্বপূর্ণ, এবং এটি বিভিন্ন স্তরের সুরক্ষা প্রদান করে। অথেন্টিকেশন, অথরাইজেশন, এনক্রিপশন, অডিটিং, এবং নেটওয়ার্ক সিকিউরিটি এর মাধ্যমে MongoDB ডেটাবেসের নিরাপত্তা নিশ্চিত করা যায়। MongoDB এর মাধ্যমে ডেটার গোপনীয়তা এবং নিরাপত্তা নিশ্চিত করার জন্য এই সিকিউরিটি ফিচারগুলো ব্যবহার করা হয়।
MongoDB তে Authentication এবং Authorization দুটি অত্যন্ত গুরুত্বপূর্ণ নিরাপত্তা ফিচার, যা ডেটাবেসের অ্যাক্সেস এবং ডেটা সুরক্ষা নিশ্চিত করে। যদিও Authentication এবং Authorization দুটি আলাদা প্রক্রিয়া, এগুলি একসাথে কাজ করে MongoDB এর নিরাপত্তা গঠন করতে। নিচে MongoDB তে Authentication এবং Authorization এর কার্যপদ্ধতি বিস্তারিতভাবে আলোচনা করা হলো।
Authentication
Authentication হল একটি প্রক্রিয়া যার মাধ্যমে MongoDB ডেটাবেস সার্ভারে এক্সেস পাওয়ার জন্য ব্যবহারকারীর পরিচয় যাচাই করা হয়। MongoDB তে Authentication নিশ্চিত করে যে শুধুমাত্র অনুমোদিত ব্যবহারকারীরাই ডেটাবেসে অ্যাক্সেস করতে পারে।
MongoDB Authentication পদ্ধতি
MongoDB তে Authentication জন্য বিভিন্ন পদ্ধতি রয়েছে:
Username and Password Authentication: MongoDB ডেটাবেসে একজন ব্যবহারকারী নাম এবং পাসওয়ার্ডের মাধ্যমে লগ ইন করতে পারেন। ডেটাবেসে একটি ব্যবহারকারী তৈরি করতে হয় এবং সেখান থেকে পাসওয়ার্ড প্রদান করতে হয়।
use admin db.createUser({ user: "myUserAdmin", pwd: "abc123", // Password roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })- LDAP Authentication: MongoDB LDAP (Lightweight Directory Access Protocol) প্রটোকল ব্যবহার করে অ্যাক্সেস কন্ট্রোল করতে পারে। MongoDB তে LDAP Authentication কনফিগার করা হলে, ডেটাবেস ব্যবহারকারী তার LDAP সার্ভারে লগ ইন করা ব্যবহারকারীর পরিচয় যাচাই করতে পারেন।
- X.509 Certificate Authentication: MongoDB X.509 সার্টিফিকেট ব্যবহার করে সুরক্ষিত অ্যাক্সেস প্রমাণীকরণ সমর্থন করে। এই পদ্ধতিতে ব্যবহারকারী এবং MongoDB সার্ভারের মধ্যে TLS (Transport Layer Security) শংসাপত্র ব্যবহার করা হয়।
- Kerberos Authentication: MongoDB Kerberos ভিত্তিক Authentication সমর্থন করে। এটি একটি নিরাপদ, সেন্ট্রালাইজড সিস্টেম যেখানে একবার লগ ইন করার পর ব্যবহারকারীকে বিভিন্ন সার্ভিসে প্রবেশের অনুমতি দেয়া হয়।
Authentication Enablement
MongoDB তে Authentication সক্রিয় করতে, MongoDB কনফিগারেশন ফাইল (mongod.conf) এ security বিভাগে authorization প্যারামিটার ব্যবহার করে enabled সেট করতে হয়।
security:
authorization: "enabled"
এভাবে সেট করা হলে, MongoDB ডেটাবেসে কেবলমাত্র Authentication করা ব্যবহারকারীরাই লগ ইন করতে পারবে।
Authorization
Authorization হল একটি প্রক্রিয়া যার মাধ্যমে নির্ধারিত করা হয়, কোন ব্যবহারকারী বা রোল কোন অ্যাক্সেস অনুমতি পাবে। MongoDB তে Authorization কনফিগার করার মাধ্যমে আপনি নির্দিষ্ট রোলের উপর নির্ভর করে ব্যবহারকারীর জন্য বিশেষ অ্যাক্সেস কন্ট্রোল সেট করতে পারেন।
MongoDB Authorization Model
MongoDB তে Role-Based Access Control (RBAC) ব্যবহার করা হয়, যেখানে নির্দিষ্ট রোলের জন্য বিভিন্ন অনুমতি দেওয়া হয়। এটি ব্যবহারকারীদের কেবলমাত্র সেই কাজগুলো করতে দেয় যা তাদের রোলের অধিকার।
MongoDB রোলস
MongoDB তে পূর্বনির্ধারিত কিছু রোল রয়েছে, যেমন:
- read: শুধুমাত্র ডেটা পড়ার অনুমতি দেয়।
- readWrite: ডেটা পড়া এবং লেখা (insert, update, delete) করার অনুমতি দেয়।
- dbAdmin: ডেটাবেসের জন্য অ্যাডমিনিস্ট্রেটিভ কার্যক্রম (ইনডেক্স তৈরি, কনফিগারেশন পরিবর্তন) করার অনুমতি দেয়।
- userAdmin: ব্যবহারকারী তৈরি, মুছে ফেলা এবং রোল অ্যাসাইন করার অনুমতি দেয়।
- root: সমস্ত রোল এবং কার্যক্রমের উপর পূর্ণ নিয়ন্ত্রণ দেয়।
MongoDB রোল কাস্টমাইজেশন
MongoDB তে আপনি কাস্টম রোলও তৈরি করতে পারেন। উদাহরণস্বরূপ:
use admin
db.createRole({
role: "readAndWriteRole",
privileges: [
{ resource: { db: "myDatabase", collection: "" }, actions: [ "find", "insert", "update", "remove" ] }
],
roles: []
})
এখানে একটি কাস্টম রোল তৈরি করা হয়েছে, যার মাধ্যমে ব্যবহারকারী ডেটাবেসের মধ্যে ডেটা পড়া, লেখা, আপডেট এবং মুছতে পারবে।
MongoDB রোল অ্যাসাইনমেন্ট
ব্যবহারকারীর জন্য একটি রোল অ্যাসাইন করতে:
db.createUser({
user: "myUser",
pwd: "password123",
roles: [{ role: "readWrite", db: "myDatabase" }]
})
এটি myUser নামক ব্যবহারকারীকে myDatabase ডেটাবেসের জন্য readWrite রোল অ্যাসাইন করবে, যার মাধ্যমে সে ওই ডেটাবেসে ডেটা পড়তে এবং লিখতে পারবে।
Authentication এবং Authorization এর মধ্যে পার্থক্য
- Authentication: ব্যবহারকারীর পরিচয় যাচাই করার প্রক্রিয়া। এটি নিশ্চিত করে যে ব্যবহৃত পাসওয়ার্ড বা টোকেন সঠিক কিনা এবং ব্যবহারকারী সিস্টেমে প্রবেশের জন্য অনুমোদিত কিনা।
- Authorization: একবার একটি ব্যবহারকারী সফলভাবে অটেনটিকেট হয়ে গেলে, Authorization নিশ্চিত করে যে সে কী ধরনের অ্যাক্সেস (যেমন: ডেটা পড়া, লেখা, ডিলিট) পাবেন।
MongoDB তে Authentication এবং Authorization কনফিগারেশন
MongoDB তে Authentication এবং Authorization একসাথে ব্যবহার করলে, এটি শক্তিশালী নিরাপত্তা ব্যবস্থা তৈরি করতে সহায়ক হয়। সাধারণভাবে, প্রথমে Authentication সক্রিয় করতে হবে এবং তারপর ব্যবহারকারী বা রোলের উপর ভিত্তি করে Authorization কনফিগার করতে হবে।
Authentication সক্রিয় করতে:
mongod.confফাইলেরsecurity.authorizationপ্যারামিটারenabledকরে MongoDB তে Authentication চালু করুন।security: authorization: "enabled"- Authorization কনফিগার করার জন্য ব্যবহারকারীদের রোল এবং অনুমতি নির্ধারণ করুন।
সারাংশ
MongoDB তে Authentication এবং Authorization ডেটাবেসের নিরাপত্তা ব্যবস্থাকে শক্তিশালী করে। Authentication ব্যবহারকারীর পরিচয় যাচাই করতে ব্যবহৃত হয়, যেখানে Authorization ব্যবহারকারীদের অ্যাক্সেস অনুমতি নির্ধারণ করে। MongoDB তে Role-Based Access Control (RBAC) মডেল ব্যবহৃত হয়, যার মাধ্যমে ব্যবহারকারী নির্দিষ্ট রোলের অধীনে ডেটাবেসে সীমিত কাজ করতে পারে। Authentication এবং Authorization এর সঠিক কনফিগারেশন MongoDB ডেটাবেসে নিরাপদ অ্যাক্সেস এবং কার্যকরী কন্ট্রোল নিশ্চিত করে।
Role-Based Access Control (RBAC) MongoDB তে একটি নিরাপত্তা ব্যবস্থা যা ব্যবহারকারীদের নির্দিষ্ট কাজ করার অনুমতি নির্ধারণ করে। RBAC এর মাধ্যমে, আপনি ব্যবহারকারীদের বিভিন্ন ভূমিকা (role) নির্ধারণ করতে পারেন, এবং তাদের জন্য নির্দিষ্ট অধিকার (privileges) সংজ্ঞায়িত করতে পারেন। এটি MongoDB ডেটাবেসে একটি নিরাপদ এবং নিয়ন্ত্রিত পরিবেশ তৈরি করতে সহায়তা করে, যেখানে আপনি কেবলমাত্র নির্দিষ্ট ব্যবহারের উদ্দেশ্যে অনুমতি প্রদান করতে পারেন।
MongoDB তে RBAC এর মাধ্যমে আপনি ডেটাবেসের মধ্যে কী করতে পারবেন তা নিয়ন্ত্রণ করতে পারেন, যেমন: ডেটা পড়া, আপডেট করা, মুছা, এবং ডেটাবেস তৈরি করা।
RBAC এর মৌলিক ধারণা
RBAC ব্যবহারে, ব্যবহারকারীরা বিভিন্ন ভূমিকা (role) ভিত্তিক অনুমতি পায়। MongoDB তে ভূমিকা হলো একটি সেট অব অনুমতি, যা ব্যবহারকারীদের বিভিন্ন ডেটাবেস অপারেশন করার অধিকার দেয়। কিছু সাধারণ ভূমিকা হলো:
- read: ব্যবহারকারীকে ডেটাবেস পড়ার অনুমতি দেয়, কিন্তু লেখার অনুমতি দেয় না।
- readWrite: ব্যবহারকারীকে ডেটাবেস পড়া এবং লেখার অনুমতি দেয়।
- dbAdmin: ব্যবহারকারীকে ডেটাবেস প্রশাসনের কাজ (যেমন ইনডেক্স তৈরি করা, ডেটাবেসের অবস্থান পরিচালনা করা) করার অনুমতি দেয়।
- userAdmin: ব্যবহারকারীকে অন্য ব্যবহারকারীদের পরিচালনা করার অনুমতি দেয়।
- root: সুপার-ইউজার ভূমিকা, যা সমস্ত অনুমতি প্রদান করে এবং MongoDB এর সব কার্যক্রম পরিচালনা করার ক্ষমতা রাখে।
RBAC কনফিগারেশন
MongoDB তে RBAC কনফিগার করার জন্য আপনাকে প্রথমে ব্যবহারকারী তৈরি করতে হবে এবং তাকে একটি বা একাধিক ভূমিকা (role) অ্যাসাইন করতে হবে।
1. MongoDB তে ইউজার এবং ভূমিকা তৈরি করা
ব্যবহারকারী তৈরি করা:
MongoDB তে একটি নতুন ব্যবহারকারী তৈরি করতেcreateUserকমান্ড ব্যবহার করতে হয়:use admin db.createUser({ user: "john_doe", pwd: "password123", roles: [{ role: "readWrite", db: "myDatabase" }] })এখানে:
user: নতুন ব্যবহারকারীর নাম।pwd: নতুন ব্যবহারকারীর পাসওয়ার্ড।roles: ভূমিকা এবং ডেটাবেস, যেখানে ভূমিকা এই ব্যবহারকারীর জন্য নির্ধারণ করা হবে। উদাহরণস্বরূপ,readWriteভূমিকাmyDatabaseডেটাবেসের জন্য দেওয়া হয়েছে।
ভূমিকা নির্ধারণ করা:
MongoDB তে একটি ভূমিকা তৈরির জন্যcreateRoleকমান্ড ব্যবহার করতে হয়:use admin db.createRole({ role: "customRole", privileges: [ { resource: { db: "myDatabase", collection: "" }, actions: [ "find", "insert" ] } ], roles: [] })এখানে:
role: ভূমিকার নাম।privileges: এই ভূমিকার অধীনে অনুমতি দেওয়া কাজ।resource: ডেটাবেস বা কালেকশন যেখানে এই ভূমিকা প্রযোজ্য হবে।actions: যে কাজগুলো এই ভূমিকার অধীনে করা যাবে, যেমনfind,insertইত্যাদি।
2. MongoDB তে ভূমিকা অ্যাসাইন করা
MongoDB তে একটি ব্যবহারকারীকে নির্দিষ্ট ভূমিকা অ্যাসাইন করা হয় roles এর মাধ্যমে। আপনি বিভিন্ন ভূমিকা একাধিক ব্যবহারকারীর জন্য অ্যাসাইন করতে পারেন।
use admin
db.grantRolesToUser("john_doe", [{ role: "dbAdmin", db: "myDatabase" }])
এখানে, john_doe ব্যবহারকারীকে dbAdmin ভূমিকা দেয়া হয়েছে myDatabase ডেটাবেসের জন্য।
RBAC এর সুবিধা
- নিরাপত্তা বৃদ্ধি:
MongoDB তে RBAC ব্যবহারের মাধ্যমে, আপনি প্রতিটি ব্যবহারকারীকে কেবলমাত্র তাদের প্রয়োজনীয় কাজের জন্য অনুমতি দিতে পারেন, যা নিরাপত্তা বৃদ্ধি করে। - সহজ ডেটাবেস ব্যবস্থাপনা:
একটি নির্দিষ্ট ভূমিকা দিয়ে ব্যবহারকারীদের কাজ নিয়ন্ত্রণ করা সহজ হয়ে যায়, এবং আপনি ভূমিকা অনুযায়ী তাদের অধিকার সমন্বয় করতে পারেন। - অ্যাক্সেস কন্ট্রোল:
MongoDB তে RBAC ব্যবহারের মাধ্যমে ডেটার অ্যাক্সেস নিয়ন্ত্রণ করা সহজ হয়। আপনি বিভিন্ন রকমের ভূমিকা তৈরি করে, ব্যবহারকারীদের প্রয়োজন অনুযায়ী কাজের অনুমতি দিতে পারেন। - ফেইন গ্রেইন এক্সেস কন্ট্রোল:
MongoDB তে আপনি নির্দিষ্ট ডেটাবেস এবং কালেকশন সম্পর্কিত ভূমিকা তৈরি করে ব্যবহারকারীদের granular পর্যায়ে অনুমতি দিতে পারেন।
সারাংশ
MongoDB তে Role-Based Access Control (RBAC) একটি শক্তিশালী নিরাপত্তা ব্যবস্থা যা ব্যবহারকারীদের ভূমিকা নির্ধারণ করে তাদের অনুমতি নিয়ন্ত্রণ করতে সহায়তা করে। এই সিস্টেমের মাধ্যমে আপনি প্রতিটি ব্যবহারকারীকে নির্দিষ্ট কাজের জন্য অনুমতি প্রদান করতে পারেন, যেমন ডেটা পড়া, লেখার অনুমতি অথবা ডেটাবেস প্রশাসনিক কাজের অনুমতি। RBAC MongoDB ডেটাবেসে ডেটার নিরাপত্তা, অ্যাক্সেস কন্ট্রোল এবং ব্যবস্থাপনা সহজ করে তোলে, যা ডেটাবেসের সুরক্ষা এবং কার্যক্ষমতা বাড়ায়।
MongoDB তে TLS/SSL কনফিগারেশন এবং encryption ডেটা নিরাপত্তা নিশ্চিত করতে ব্যবহৃত হয়। TLS (Transport Layer Security) এবং SSL (Secure Sockets Layer) দুটি প্রোটোকলই ডেটা ট্রান্সমিশনের সময় নিরাপত্তা প্রদান করে, যা ডেটার গোপনীয়তা এবং অখণ্ডতা নিশ্চিত করে। MongoDB তে TLS/SSL এবং encryption ব্যবহৃত হয় ডেটাবেসের নিরাপত্তা বাড়ানোর জন্য, বিশেষ করে যখন ডেটা সংবেদনশীল বা ক্লাউড পরিবেশে ব্যবহৃত হয়।
TLS/SSL কনফিগারেশন
TLS (এবং পুরোনো SSL) MongoDB সার্ভারের সাথে ক্লায়েন্টের মধ্যে নিরাপদ সংযোগ স্থাপনের জন্য ব্যবহৃত হয়। এটি ডেটার এনক্রিপশন নিশ্চিত করে, যাতে ট্রান্সমিশনের সময় ডেটা চুরি বা পরিবর্তিত না হয়।
1. MongoDB তে TLS/SSL কনফিগারেশন করার ধাপ
MongoDB তে TLS/SSL কনফিগার করতে, আপনাকে কিছু স্টেপ অনুসরণ করতে হবে:
- সার্টিফিকেট এবং কী তৈরি করুন: MongoDB TLS/SSL ব্যবহার করার জন্য একটি সার্ভার সার্টিফিকেট এবং একটি প্রাইভেট কী তৈরি করতে হবে। আপনি নিজেই একটি সার্টিফিকেট তৈরি করতে পারেন অথবা একটি সার্টিফিকেট অথরিটি (CA) থেকে সার্টিফিকেট পেতে পারেন।
সার্টিফিকেট তৈরি করতে OpenSSL ব্যবহার করতে পারেন:
openssl genpkey -algorithm RSA -out mongodb-server.key openssl req -new -key mongodb-server.key -out mongodb-server.csr openssl x509 -req -in mongodb-server.csr -signkey mongodb-server.key -out mongodb-server.crt
MongoDB কনফিগারেশন ফাইলে TLS/SSL সক্রিয় করুন: MongoDB তে TLS/SSL সক্রিয় করতে, MongoDB কনফিগারেশন ফাইল (যেমন
mongod.conf) এ নিম্নলিখিত সেটিংস যোগ করুন:net: ssl: mode: requireSSL PEMKeyFile: /path/to/mongodb-server.crt PEMKeyPassword: <password> # If the private key is encrypted CAFile: /path/to/ca.crt # (Optional) Certificate Authority fileMongoDB সার্ভার পুনরায় শুরু করুন: কনফিগারেশন সম্পন্ন হওয়ার পর, MongoDB সার্ভার পুনরায় চালু করুন:
sudo systemctl restart mongodক্লায়েন্টে SSL সক্রিয় করুন: MongoDB ক্লায়েন্টে TLS/SSL সক্রিয় করতে, আপনি নিম্নলিখিত কমান্ড ব্যবহার করতে পারেন:
mongo --ssl --sslCAFile /path/to/ca.crt --sslPEMKeyFile /path/to/mongodb-client.pem --host <server-ip> --port <port>এখানে
--sslCAFileআপনার সার্টিফিকেট অথরিটি ফাইল এবং--sslPEMKeyFileক্লায়েন্টের সার্টিফিকেট ফাইল হবে।
Encryption (এনক্রিপশন)
MongoDB তে এনক্রিপশন ডেটার গোপনীয়তা এবং সুরক্ষা নিশ্চিত করতে ব্যবহৃত হয়। MongoDB তে দুই ধরনের এনক্রিপশন ব্যবহৃত হয়: Encryption at Rest এবং Encryption in Transit।
1. Encryption in Transit
Encryption in Transit ডেটার এনক্রিপশন ট্রান্সমিশনের সময় নিশ্চিত করে। MongoDB তে TLS/SSL কনফিগারেশন ব্যবহার করে ডেটা ট্রান্সমিশনের সময় এনক্রিপশন করা হয়। এই এনক্রিপশন ডেটাকে নিরাপদ রাখে যখন এটি সার্ভার থেকে ক্লায়েন্ট বা সার্ভার থেকে সার্ভারে চলে।
- TLS/SSL সক্রিয় করার মাধ্যমে, MongoDB তে ক্লায়েন্ট এবং সার্ভার দুজনের মধ্যে যোগাযোগ এনক্রিপ্ট হয়ে যায়, ফলে ম্যান-ইন-দি-মিডল (MITM) অ্যাটাক থেকে সুরক্ষা পাওয়া যায়।
2. Encryption at Rest
Encryption at Rest হল ডেটাবেসে ডেটা স্টোর করার সময় এনক্রিপশন করা। MongoDB Encyption at Rest সমর্থন করে এবং এটি ডেটাবেসে থাকা ডেটা সুরক্ষিত রাখে যদি ড্রাইভ চুরি বা অন্য কোনো অবৈধ প্রবেশের ঘটনা ঘটে।
MongoDB তে Encryption at Rest সক্রিয় করতে আপনাকে MongoDB Enterprise ব্যবহার করতে হবে, কারণ এটি শুধুমাত্র এন্টারপ্রাইজ সংস্করণে পাওয়া যায়।
- MongoDB Encrypted Storage Engine: MongoDB এ Encrypted Storage Engine ব্যবহার করা হয়, যা ডেটাবেসের সমস্ত ডেটা এনক্রিপ্ট করে।
- প্রাইভেট কী ব্যবস্থাপনা: MongoDB এনক্রিপশন ব্যবস্থাপনায় প্রাইভেট কী সুরক্ষিত রাখার জন্য একটি কাস্টম কী ম্যানেজমেন্ট সিস্টেম (যেমন, AWS KMS) ব্যবহার করা যায়।
এনক্রিপশন কনফিগারেশন
MongoDB Enterprise এ এনক্রিপশন কনফিগার করতে, আপনার mongod.conf ফাইলে নিম্নলিখিত সেটিংস যোগ করতে হবে:
security:
encryptionKeyFile: /path/to/encryption-keyfile
enableEncryption: true
এছাড়া, MongoDB এ এনক্রিপশন কনফিগার করার জন্য Key Management সিস্টেম (KMS) যেমন AWS KMS বা Google Cloud KMS ব্যবহার করা যেতে পারে।
TLS/SSL এবং Encryption ব্যবহারের সুবিধা
- ডেটার নিরাপত্তা: TLS/SSL এবং এনক্রিপশন ডেটার নিরাপত্তা নিশ্চিত করে, বিশেষত যখন ডেটা নেটওয়ার্কের মাধ্যমে ট্রান্সফার করা হয়।
- ডেটার গোপনীয়তা: TLS/SSL এবং এনক্রিপশন ডেটার গোপনীয়তা রক্ষা করে, যা ডেটাকে অকারণে এক্সেস বা চুরির হাত থেকে সুরক্ষিত রাখে।
- ক্লাউড এবং ডিস্ট্রিবিউটেড সিস্টেমে নিরাপত্তা: ক্লাউডে বা ডিস্ট্রিবিউটেড সিস্টেমে MongoDB ব্যবহারের ক্ষেত্রে এনক্রিপশন এবং TLS/SSL অত্যন্ত গুরুত্বপূর্ণ, কারণ ডেটা বিভিন্ন সার্ভারে এবং নেটওয়ার্কে পাঠানো হয়।
সারাংশ
MongoDB তে TLS/SSL কনফিগারেশন এবং encryption ব্যবহৃত হয় ডেটার নিরাপত্তা ও গোপনীয়তা নিশ্চিত করতে। TLS/SSL ডেটা ট্রান্সমিশনের সময় এনক্রিপশন প্রদান করে, যেখানে Encryption at Rest ডেটাবেসে সংরক্ষিত ডেটাকে এনক্রিপ্ট করে। MongoDB তে এই ফিচারগুলি ব্যবহার করে ডেটা সুরক্ষিত রাখা সম্ভব হয় এবং ডেটা এক্সেসের সময় চুরি বা অবৈধ প্রবেশ প্রতিরোধ করা যায়।
MongoDB একটি শক্তিশালী ডেটাবেস সিস্টেম, তবে এটি নিরাপত্তার জন্য কিছু অতিরিক্ত কনফিগারেশন এবং কার্যকরী পদক্ষেপের প্রয়োজন। ডেটাবেস অ্যাপ্লিকেশনগুলির নিরাপত্তা নিশ্চিত করতে MongoDB এর জন্য কিছু সেরা নিরাপত্তা অভ্যাস অনুসরণ করা উচিত। এখানে MongoDB এর জন্য কিছু গুরুত্বপূর্ণ Security Best Practices আলোচনা করা হল:
1. Authentication (প্রমাণীকরণ) সক্ষম করা
MongoDB ডিফল্টভাবে প্রমাণীকরণ (authentication) নিষ্ক্রিয় থাকে, তাই এটি সক্রিয় করা অত্যন্ত গুরুত্বপূর্ণ। MongoDB তে প্রমাণীকরণ সক্ষম করার মাধ্যমে, কেবলমাত্র অনুমোদিত ব্যবহারকারীরাই ডেটাবেসে প্রবেশ করতে পারবে।
MongoDB Authentication সক্ষম করা:
MongoDB তে প্রমাণীকরণ সক্ষম করতে MongoDB এর--authফ্ল্যাগ ব্যবহার করতে হবে:mongod --authব্যবহারকারী তৈরি করা:
MongoDB তে ব্যবহারকারী তৈরি করতেadminডাটাবেসে ব্যবহারকারী তৈরি করতে হবে:use admin db.createUser({ user: "myUserAdmin", pwd: "myUserAdminPassword", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] })
2. Authorization (অনুমতি) কনফিগার করা
MongoDB তে Role-Based Access Control (RBAC) ব্যবহার করে আপনি ব্যবহারকারীদের বিভিন্ন স্তরের অ্যাক্সেস নিয়ন্ত্রণ করতে পারেন। MongoDB তে বিভিন্ন ধরনের ভূমিকা (roles) রয়েছে, যেমন read, readWrite, dbAdmin, userAdmin, ইত্যাদি।
ব্যবহারকারীর ভূমিকা নির্ধারণ করা: MongoDB তে ব্যবহারকারীর জন্য সঠিক ভূমিকা (role) নির্ধারণ করা খুবই গুরুত্বপূর্ণ। এটি নিশ্চিত করবে যে ব্যবহারকারী কেবল তার অনুমোদিত কাজগুলোই করতে পারে।
উদাহরণস্বরূপ, একটি নির্দিষ্ট ডাটাবেসের জন্য একটি ব্যবহারকারীকে শুধু পড়ার অনুমতি দেওয়া:
use myDatabase db.createUser({ user: "myReader", pwd: "myPassword", roles: [ { role: "read", db: "myDatabase" } ] })
3. SSL/TLS এনক্রিপশন ব্যবহার করা
MongoDB তে ট্রান্সমিশন ডেটা এনক্রিপশন সক্রিয় করা উচিত, বিশেষত যখন ডেটাবেস এবং ক্লায়েন্ট সার্ভার দূরবর্তী অবস্থানে থাকে। MongoDB SSL (Secure Sockets Layer) বা TLS (Transport Layer Security) এনক্রিপশন সমর্থন করে।
SSL/TLS এনক্রিপশন সক্ষম করা: MongoDB সার্ভারে SSL এনক্রিপশন সক্ষম করতে,
mongodএবংmongosকমান্ডে--sslModeফ্ল্যাগ ব্যবহার করতে হবে:mongod --sslMode requireSSL --sslPEMKeyFile /path/to/server.pemএবং ক্লায়েন্টে SSL সংযোগ সক্রিয় করতে:
mongo --ssl --sslCAFile /path/to/ca.pem --sslPEMKeyFile /path/to/client.pem
4. MongoDB Firewall এবং Network Security
MongoDB সার্ভারটি বাইরের অ্যাক্সেস থেকে সুরক্ষিত রাখা অত্যন্ত গুরুত্বপূর্ণ। আপনার সার্ভারের সাথে সম্পর্কিত ফায়ারওয়াল কনফিগারেশন ঠিকভাবে সেট করা উচিত, যেন শুধুমাত্র অনুমোদিত IP অ্যাড্রেস থেকে MongoDB সার্ভারে অ্যাক্সেস পাওয়া যায়।
- ফায়ারওয়াল কনফিগারেশন:
MongoDB সার্ভারের জন্য একটি সুরক্ষিত ফায়ারওয়াল কনফিগার করুন, যা শুধুমাত্র নির্দিষ্ট IP রেঞ্জ বা নির্দিষ্ট অ্যাপ্লিকেশন থেকে MongoDB সার্ভারে অ্যাক্সেসে অনুমতি দেয়। - নেটওয়ার্ক নিরাপত্তা:
MongoDB সার্ভারকে public-facing করতে না দিয়ে, একে ভেতরের নেটওয়ার্কে রাখতে এবং একটি VPN (Virtual Private Network) এর মাধ্যমে অ্যাক্সেস করতে সুপারিশ করা হয়।
5. Encryption at Rest (ডেটার এনক্রিপশন)
MongoDB তে ডেটা স্টোর করার সময় যদি এনক্রিপশন প্রয়োজন হয়, তবে Encryption at Rest ব্যবহার করা উচিত। MongoDB Enterprise Edition এ Encrypted Storage Engine বৈশিষ্ট্য রয়েছে, যা ডেটার এনক্রিপশন নিশ্চিত করে।
Encrypted Storage Engine সক্রিয় করা:
MongoDB Enterprise Edition এ ইনস্টল করার সময় এনক্রিপশন সক্ষম করা যেতে পারে:mongod --enableEncryption --encryptionKeyFile /path/to/keyfile
6. লগ ফাইল এবং মনিটরিং কনফিগারেশন
MongoDB সার্ভারের নিরাপত্তা নিশ্চিত করতে লগ ফাইলগুলি মনিটর করা গুরুত্বপূর্ণ। লগ ফাইলগুলি ব্যবহারকারীর কার্যক্রম এবং ডেটাবেসে যেকোনো সন্দেহজনক কার্যক্রমের জন্য একটি কার্যকরী সরঞ্জাম হিসেবে কাজ করতে পারে।
MongoDB লগ ফাইল কনফিগার করা:
MongoDB এর লগ ফাইল কনফিগারেশন আপনিmongod.confফাইলেsystemLogসেটিংস এর মাধ্যমে করতে পারেন:systemLog: destination: file path: /var/log/mongodb/mongod.log logAppend: true- মনিটরিং:
MongoDB এর মেট্রিক্স এবং লগ মনিটর করার জন্যMongoDB Atlasবা তৃতীয় পক্ষের মনিটরিং টুল (যেমন: Prometheus, Grafana) ব্যবহার করা যেতে পারে।
7. নিরাপদ পাসওয়ার্ড ব্যবহারের প্রথা
MongoDB ডেটাবেসে নিরাপদ পাসওয়ার্ড ব্যবহার অত্যন্ত গুরুত্বপূর্ণ। পাসওয়ার্ড অবশ্যই শক্তিশালী এবং আনপ্রেডিক্টেবল হওয়া উচিত।
- পাসওয়ার্ড পলিসি:
MongoDB তে ব্যবহৃত পাসওয়ার্ডগুলি নিয়মিতভাবে পরিবর্তন করুন এবং অত্যন্ত শক্তিশালী পাসওয়ার্ড ব্যবহার করুন। - পাসওয়ার্ড ম্যানেজার ব্যবহার করা:
পাসওয়ার্ড ম্যানেজার ব্যবহার করার মাধ্যমে MongoDB এর সকল ব্যবহারকারীর পাসওয়ার্ড সুরক্ষিত রাখা যায়।
8. Audit Logging ব্যবহার করা
MongoDB Enterprise Edition এ Audit Logging সুবিধা উপলব্ধ, যা ডেটাবেসের সকল অ্যাক্সেস এবং কার্যক্রম ট্র্যাক করতে সহায়তা করে। এটি নিরাপত্তা ঝুঁকি এবং সন্দেহজনক কার্যক্রম সনাক্ত করতে সহায়ক।
Audit Log সক্রিয় করা: MongoDB তে Audit Logging সক্রিয় করার জন্য
mongod.confফাইলে এডিট করতে হবে:security: authorization: enabled auditLog: destination: file path: /var/log/mongodb/audit.log
সারাংশ
MongoDB এর নিরাপত্তা নিশ্চিত করার জন্য অনেক পদক্ষেপ রয়েছে, যেমন প্রমাণীকরণ এবং অনুমতির সঠিক কনফিগারেশন, এনক্রিপশন সক্ষম করা, নিরাপদ নেটওয়ার্ক কনফিগারেশন এবং মনিটরিং। MongoDB এর জন্য সেরা নিরাপত্তা অভ্যাস অনুসরণ করলে ডেটাবেসের সুরক্ষা, পারফরম্যান্স, এবং অ্যাভেইলেবিলিটি নিশ্চিত করা সম্ভব। MongoDB ডেটাবেসে শক্তিশালী নিরাপত্তা কৌশলগুলি বাস্তবায়ন করা অত্যন্ত গুরুত্বপূর্ণ, বিশেষত যখন আপনার ডেটাবেসে গুরুত্বপূর্ণ বা সংবেদনশীল তথ্য সংরক্ষিত থাকে।
Read more