MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

अपने MongoDB डेटा की सुरक्षा के लिए एन्क्रिप्शन का उपयोग कैसे करें

डेटाबेस सुरक्षा किसी भी एप्लिकेशन के लिए विचार करने के लिए एक महत्वपूर्ण कारक है जिसमें वित्तीय और स्वास्थ्य रिपोर्ट जैसे अत्यधिक संवेदनशील डेटा शामिल हैं। एप्लिकेशन से लेकर डेटा रखने वाली फाइलों तक विभिन्न स्तरों पर एन्क्रिप्शन के माध्यम से डेटा सुरक्षा प्राप्त की जा सकती है।

चूंकि MongoDB एक गैर-संबंधपरक डेटाबेस है, इसलिए किसी को डेटा डालने से पहले कॉलम को परिभाषित करने की आवश्यकता नहीं है; और इसलिए एक ही संग्रह के दस्तावेज़ों में एक दूसरे से भिन्न फ़ील्ड हो सकते हैं।

दूसरी ओर, SQL DBMS के लिए, डेटा के लिए कॉलम को परिभाषित करना होता है, इसलिए सभी पंक्तियों में समान कॉलम होते हैं। डेटाबेस प्रक्रिया में शामिल होने से पहले कोई व्यक्ति व्यक्तिगत कॉलम, संपूर्ण डेटाबेस फ़ाइल या एप्लिकेशन से डेटा एन्क्रिप्ट करने का निर्णय ले सकता है।

अलग-अलग कॉलम का एन्क्रिप्शन सबसे अधिक पसंद किया जाता है क्योंकि यह सस्ता है और कम डेटा एन्क्रिप्ट किया जाता है जिससे विलंबता में सुधार होता है। सामान्य तौर पर, एन्क्रिप्शन के परिणामस्वरूप समग्र प्रदर्शन प्रभावित होता है।

नोएसक्यूएल डीबीएमएस के लिए, हालांकि यह दृष्टिकोण सबसे अच्छा नहीं होगा। यह ध्यान में रखते हुए कि सभी दस्तावेज़ों में वे सभी फ़ील्ड नहीं हो सकते हैं जिन्हें आप अपने एन्क्रिप्शन में उपयोग करना चाहते हैं, कॉलम-स्तरीय एन्क्रिप्शन नहीं किया जा सकता है।

एप्लिकेशन स्तर पर डेटा एन्क्रिप्ट करना काफी महंगा है और इसे लागू करना मुश्किल है। इसलिए हमारे पास डेटाबेस स्तर पर डेटा एन्क्रिप्ट करने का विकल्प है।

MongoDB मूल एन्क्रिप्शन प्रदान करता है जिसके लिए आपके संवेदनशील डेटा को सुरक्षित रखने के लिए किसी को अतिरिक्त लागत का भुगतान करने की आवश्यकता नहीं होती है।

MongoDB में डेटा एन्क्रिप्ट करना

किसी भी डेटाबेस ऑपरेशन में इन दो डेटा रूपों में से कोई एक, आराम से डेटा या गति में डेटा शामिल होता है।

गति में डेटा किसी भी प्रकार के नेटवर्क के माध्यम से चलने वाले डेटा की एक धारा है जबकि बाकी डेटा स्थिर है इसलिए कहीं भी नहीं जा रहा है।

इन दोनों डेटा प्रकारों में अज्ञात उपयोगकर्ताओं द्वारा बाहरी हस्तक्षेप की संभावना होती है, जब तक कि एन्क्रिप्शन शामिल न हो। एन्क्रिप्शन प्रक्रिया में शामिल हैं:

  • संपूर्ण डेटाबेस के लिए एक मास्टर कुंजी बनाना
  • प्रत्येक डेटाबेस के लिए अद्वितीय कुंजियाँ बनाना
  • आपके द्वारा जेनरेट की गई डेटाबेस कुंजियों के साथ अपने डेटा को एन्क्रिप्ट करना
  • मास्टर कुंजी के साथ संपूर्ण डेटाबेस को एन्क्रिप्ट करना

ट्रांज़िट में डेटा एन्क्रिप्ट करना

डेटा का लेन-देन MongoDB और सर्वर एप्लिकेशन के बीच दो तरह से किया जाता है, जो कि ट्रांसपोर्ट लेयर सिक्योरिटी (TLS) और सिक्योर सॉकेट लेयर (SSL) के माध्यम से होता है।

ये दोनों दो प्रणालियों के बीच भेजे और प्राप्त डेटा को सुरक्षित करने के लिए सबसे अधिक उपयोग किए जाने वाले एन्क्रिप्शन प्रोटोकॉल हैं। मूल रूप से, अवधारणा mongod और mongos उदाहरणों से कनेक्शन को एन्क्रिप्ट करने के लिए है जैसे कि नेटवर्क ट्रैफ़िक केवल इच्छित क्लाइंट द्वारा पठनीय है।

TLS/SSL का उपयोग MongoDB में कुछ प्रमाणपत्रों के साथ PEM फ़ाइलों के रूप में किया जाता है जो प्रमाणपत्र प्राधिकारी द्वारा जारी किए जाते हैं या एक स्व-हस्ताक्षरित प्रमाणपत्र हो सकते हैं। उत्तरार्द्ध में एक सीमा है कि हालांकि संचार चैनल एन्क्रिप्टेड है, सर्वर पहचान के खिलाफ हमेशा कोई सत्यापन नहीं होता है इसलिए बाहरी हमलों के बीच में कमजोर होता है। इस प्रकार विश्वसनीय प्राधिकरण प्रमाणपत्रों का उपयोग करने की सलाह दी जाती है जो MongoDB ड्राइवरों को सर्वर पहचान को सत्यापित करने की अनुमति देते हैं।

एन्क्रिप्शन के अलावा, टीएलएस/एसएसएल का उपयोग क्लाइंट के प्रमाणीकरण और प्रमाणपत्रों के माध्यम से प्रतिकृति सेट और शार्प क्लस्टर के सदस्यों के आंतरिक प्रमाणीकरण में किया जा सकता है।

ग्राहकों के लिए TLS/SSL कॉन्फ़िगरेशन

विभिन्न टीएलएस/एसएसएल विकल्प सेटिंग्स हैं जिनका उपयोग इन प्रोटोकॉल के विन्यास में किया जा सकता है।

उदाहरण के लिए, यदि आप एन्क्रिप्शन का उपयोग करके मोंगोड इंस्टेंस से कनेक्ट करना चाहते हैं, तो आप अपना इंस्टेंस शुरू करेंगे जैसे,

mongo --ssl --host example.com --sslCAFile /etc/ssl/ca.pem

--ssl TLS/SSL कनेक्शन को सक्षम बनाता है।

--sslCAFile mongod या mongos द्वारा प्रस्तुत प्रमाण पत्र के सत्यापन के लिए प्रमाणपत्र प्राधिकारी (CA) pem फ़ाइल निर्दिष्ट करता है। इसलिए Mongo शेल निर्दिष्ट CA फ़ाइल और होस्टनाम के विरुद्ध mongod उदाहरण द्वारा जारी किए गए प्रमाणपत्र को सत्यापित करेगा।

आप MongoDB इंस्टेंस को भी कनेक्ट करना चाह सकते हैं जिसके लिए क्लाइंट प्रमाणपत्र की आवश्यकता होती है। हम नीचे दिए गए कोड नमूने का उपयोग करते हैं

mongo --ssl --host hostname.example.com --sslPEMKeyFile /etc/ssl/client.pem --sslCAFile /etc/ssl/ca.pem

विकल्प --sslPEMKeyFile उस .pem फ़ाइल को निर्दिष्ट करता है जिसमें mongo शेल प्रमाणपत्र और mongod या mongos उदाहरण को प्रस्तुत करने के लिए एक कुंजी है। कनेक्शन प्रक्रिया के दौरान:

मोंगो शेल सत्यापित करेगा कि प्रमाणपत्र निर्दिष्ट प्रमाणपत्र प्राधिकरण से है जो कि (--sslCAFile) है और यदि नहीं, तो शेल कनेक्ट होने में विफल हो जाएगा।

दूसरे, शेल यह भी सत्यापित करेगा कि --होस्ट विकल्प में निर्दिष्ट होस्टनाम मोंगोड या मोंगोस द्वारा प्रस्तुत प्रमाण पत्र में सैन/सीएन से मेल खाता है। यदि यह होस्टनाम दोनों में से किसी एक से मेल नहीं खाता है, तो कनेक्शन विफल हो जाएगा।

यदि आप स्व-हस्ताक्षरित प्रमाणपत्रों का उपयोग नहीं करना चाहते हैं, तो आपको यह सुनिश्चित करना होगा कि कनेक्शन का नेटवर्क विश्वसनीय है।

इसके अलावा, आपको निजी कुंजी के जोखिम को कम करने की आवश्यकता है, खासकर जहां प्रतिकृति सेट/शार्ड क्लस्टर शामिल है। इसे विभिन्न सर्वरों पर विभिन्न प्रमाणपत्रों का उपयोग करके प्राप्त किया जा सकता है।

कनेक्शन में उपयोग किए जा सकने वाले अतिरिक्त विकल्प हैं:

आवश्यकताएसएसएल:यह प्रत्येक सर्वर को केवल टीएलएस/एसएसएल एन्क्रिप्टेड कनेक्शन का उपयोग करने के लिए प्रतिबंधित करेगा।

--sslAllowConnectionsविदाउट सर्टिफिकेट:यह सत्यापन की अनुमति देता है यदि केवल क्लाइंट एक प्रमाण पत्र प्रस्तुत करता है अन्यथा यदि कोई प्रमाण पत्र नहीं है, तो क्लाइंट अभी भी एक एन्क्रिप्टेड मोड में जुड़ा रहेगा। उदाहरण के लिए:

mongod --sslMode requireSSL --sslAllowConnectionsWithoutCertificates --sslPEMKeyFile /etc/ssl/mongodb.pem --sslCAFile /etc/ssl/ca.pem

sslDisabledProtocols:यह विकल्प सर्वर को आने वाले कनेक्शनों को स्वीकार करने से रोकता है जो विशिष्ट प्रोटोकॉल का उपयोग करते हैं। इसके साथ किया जा सकता है:

mongod --sslMode requireSSL --sslDisabledProtocols TLS1_0,TLS1_1 --sslPEMKeyFile /etc/ssl/mongodb.pem --sslCAFile /etc/ssl/ca.pem

डेटा को आराम से एन्क्रिप्ट करना

संस्करण 3.2 से, MongoDB ने WiredTiger स्टोरेज इंजन के लिए एक देशी एन्क्रिप्शन विकल्प पेश किया। किसी तीसरे पक्ष द्वारा इस संग्रहण में डेटा तक पहुंच केवल एक डिक्रिप्शन कुंजी के माध्यम से प्राप्त की जा सकती है ताकि डेटा को एक पठनीय प्रारूप में डिकोड किया जा सके।

MongoDB में आमतौर पर इस्तेमाल किया जाने वाला एन्क्रिप्शन सिफर एल्गोरिथ्म AES256-GCM है। यह डेटा को एन्क्रिप्ट और डिक्रिप्ट करने के लिए उसी गुप्त कुंजी का उपयोग करता है। एन्क्रिप्शन को FIPS मोड का उपयोग करके चालू किया जा सकता है जिससे यह सुनिश्चित होता है कि एन्क्रिप्शन उच्चतम मानक और अनुपालन को पूरा करता है।

संपूर्ण डेटाबेस फ़ाइलें भंडारण स्तर पर पारदर्शी डेटा एन्क्रिप्शन (TDE) का उपयोग करके एन्क्रिप्ट की जाती हैं।

जब भी कोई फ़ाइल एन्क्रिप्ट की जाती है, तो एक अद्वितीय निजी एन्क्रिप्शन कुंजी उत्पन्न होती है और यह समझना अच्छा होता है कि इन कुंजियों को कैसे प्रबंधित और संग्रहीत किया जाता है। इसके बाद जेनरेट की गई सभी डेटाबेस कुंजियों को एक मास्टर कुंजी के साथ एन्क्रिप्ट किया जाता है।

डेटाबेस कुंजियों और मास्टर कुंजी के बीच का अंतर यह है कि डेटाबेस कुंजियों को एन्क्रिप्टेड डेटा के साथ ही संग्रहीत किया जा सकता है, लेकिन मास्टर कुंजी के लिए, MongoDB इसे एन्क्रिप्टेड डेटा से अलग सर्वर में संग्रहीत करने की सलाह देता है जैसे कि तृतीय-पक्ष एंटरप्राइज़ कुंजी प्रबंधन समाधान।

प्रतिकृति डेटा के साथ, एन्क्रिप्शन मानदंड अन्य नोड्स के साथ साझा नहीं किए जाते हैं क्योंकि डेटा मूल रूप से वायर पर एन्क्रिप्टेड नहीं होता है। नोड्स के लिए एक ही कुंजी का पुन:उपयोग किया जा सकता है लेकिन सबसे अच्छा अभ्यास प्रत्येक नोड के लिए अद्वितीय व्यक्तिगत कुंजी का उपयोग करना है।

एन्क्रिप्शन कुंजियों को घुमाना

संवेदनशील डेटा को डिक्रिप्ट करने के लिए उपयोग की जाने वाली प्रबंधित कुंजी को वर्ष में कम से कम एक बार घुमाया या बदला जाना चाहिए। मोंगोडीबी में रोटेशन प्राप्त करने के लिए दो विकल्प हैं।

KMIP मास्टर रोटेशन

इस मामले में, केवल मास्टर कुंजी बदली जाती है क्योंकि इसे बाहरी रूप से प्रबंधित किया जाता है। कुंजी को घुमाने की प्रक्रिया नीचे वर्णित है।

  1. प्रतिकृति सेट में द्वितीयक सदस्यों के लिए मास्टर कुंजी एक-एक करके घुमाई जाती है। यानी

    mongod --enableEncryption --kmipRotateMasterKey \ --kmipServerName <KMIP Server HostName> \--kmipServerCAFile ca.pem --kmipClientCertificateFile client.pem

    प्रक्रिया पूरी होने के बाद, mongod बाहर निकल जाएगा और आपको kmipRotateMasterKey पैरामीटर के बिना सेकेंडरी को पुनरारंभ करना होगा

    mongod --enableEncryption --kmipServerName <KMIP Server HostName> \
      --kmipServerCAFile ca.pem --kmipClientCertificateFile client.pem
  2. प्रतिकृति सेट प्राथमिक को नीचे ले जाया गया है:
    rs.stepDown() विधि का उपयोग करके, प्राथमिक को निष्क्रिय कर दिया जाता है इसलिए एक नए प्राथमिक के चुनाव के लिए बाध्य किया जाता है।

  3. rs.status() विधि का उपयोग करके नोड्स की स्थिति की जाँच करें और यदि प्राथमिक इंगित करता है कि नीचे की ओर ले जाया गया है तो इसकी मास्टर कुंजी को घुमाएं। kmipRotateMasterKey विकल्प सहित स्टेप डाउन सदस्य को पुनः प्रारंभ करें।

    mongod --enableEncryption --kmipRotateMasterKey \
      --kmipServerName <KMIP Server HostName> \
      --kmipServerCAFile ca.pem --kmipClientCertificateFile client.pem

लॉगिंग

MongoDB हमेशा अलग-अलग अंतराल पर कुछ स्थिति या निर्दिष्ट जानकारी रिकॉर्ड करने के लिए एक लॉग फ़ाइल के साथ काम करता है।

हालाँकि, लॉग फ़ाइल को स्टोरेज इंजन के हिस्से के रूप में एन्क्रिप्ट नहीं किया गया है। यह एक जोखिम पैदा करता है कि लॉगिंग के साथ चलने वाला एक मोंगॉड इंस्टेंस सामान्य लॉगिंग के हिस्से के रूप में संभावित रूप से संवेदनशील डेटा को लॉग फाइलों में आउटपुट कर सकता है।

MongoDB संस्करण 3.4 से, वहाँ security.redactClientLogData सेटिंग है जो संभावित संवेदनशील डेटा को mongod प्रक्रिया लॉग में लॉग होने से रोकती है। हालांकि, यह विकल्प लॉग निदान को जटिल बना सकता है।

मोंगोडीबी डीबीए बनें - मोंगोडीबी को प्रोडक्शन में लाना सीखें कि मोंगोडीबी को तैनात करने, मॉनिटर करने, प्रबंधित करने और स्केल करने के लिए आपको क्या जानने की जरूरत है मुफ्त में डाउनलोड करें

MongoDB में एन्क्रिप्शन प्रदर्शन

कुछ बिंदु पर एन्क्रिप्शन के परिणामस्वरूप विलंबता बढ़ जाती है इसलिए डेटाबेस के प्रदर्शन में गिरावट आती है। आमतौर पर ऐसा तब होता है जब बड़ी मात्रा में दस्तावेज़ शामिल होते हैं।

एन्क्रिप्ट करने और डिक्रिप्ट करने के लिए अधिक संसाधनों की आवश्यकता होती है इसलिए क्षमता नियोजन को तदनुसार समायोजित करने के लिए इस संबंध को समझना महत्वपूर्ण है।

MongoDB परीक्षणों के संबंध में, एक एन्क्रिप्टेड स्टोरेज इंजन उच्चतम लोड पर 10% से 20% के बीच विलंबता का अनुभव करेगा। यह अक्सर ऐसा होता है जब कोई उपयोगकर्ता डेटाबेस में बड़ी मात्रा में डेटा लिखता है जिसके परिणामस्वरूप कम प्रदर्शन होता है। रीड ऑपरेशंस के लिए, प्रदर्शन में गिरावट नगण्य है, लगभग 5-10%।

MongoDB में बेहतर एन्क्रिप्शन अभ्यास के लिए, WiredTiger स्टोरेज इंजन को इसके उच्च प्रदर्शन, सुरक्षा और मापनीयता के कारण सबसे अधिक पसंद किया जाता है। इसके अलावा, यह डेटाबेस फ़ाइलों के एन्क्रिप्शन को पृष्ठ स्तर पर अनुकूलित करता है जिसमें बड़ी योग्यता है, यदि कोई उपयोगकर्ता एन्क्रिप्टेड डेटाबेस में डेटा पढ़ता या लिखता है, तो थ्रूपुट ऑपरेशन केवल उस पृष्ठ पर लागू किया जाएगा जिस पर डेटा संग्रहीत किया जाता है, न कि संपूर्ण डेटाबेस।

यह डेटा की मात्रा को कम कर देगा जिसे डेटा के एक टुकड़े को संसाधित करने के लिए एन्क्रिप्ट और डिक्रिप्ट करने की आवश्यकता होगी।

सारांश

संवेदनशील जानकारी के लिए डेटा सुरक्षा आवश्यक है और डेटाबेस सिस्टम के प्रदर्शन को खराब किए बिना इसे सुरक्षित रखने की आवश्यकता है।

MongoDB एक मजबूत देशी एन्क्रिप्शन प्रक्रिया प्रदान करता है जो हमें अपने डेटा को आराम से और गति में सुरक्षित करने में मदद कर सकता है। इसके अलावा, एन्क्रिप्शन प्रक्रियाओं को विभिन्न संगठनों द्वारा निर्धारित मानकों का पालन करना चाहिए।

उच्च प्रदर्शन, मापनीयता और सुरक्षा जैसे संबंधित गुणों के कारण उन्नत WiredTiger स्टोरेज इंजन एक बेहतर विकल्प प्रदान करता है। प्रतिकृति सेट में डेटा एन्क्रिप्ट करते समय, प्रत्येक के लिए अलग-अलग मास्टर कुंजियों का उपयोग करने के अलावा उन्हें वर्ष में कम से कम एक बार बदलना एक अच्छा अभ्यास है।

हालाँकि, तृतीय-पक्ष एन्क्रिप्शन विकल्पों की उपलब्धता, इस बात की कोई गारंटी नहीं है कि मापनीयता के मामले में आपका परिनियोजन उनके साथ मेल खाएगा। इस प्रकार डेटाबेस स्तर एन्क्रिप्शन को नियोजित करना काफी विचारणीय है।


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. फ़ील्ड नाम में डॉट का उपयोग कैसे करें?

  2. स्प्रिंग डेटा में मोंगो एकत्रीकरण क्वेरी कैसे करें?

  3. डॉकर का उपयोग करके MongoDB को तैनात करना

  4. mongodb में स्ट्रिंग को संख्यात्मक मानों में कैसे परिवर्तित करें?

  5. node.js और एक्सप्रेस - वैश्विक मॉड्यूल और अनुप्रयोग संरचना के लिए सर्वोत्तम अभ्यास