डेटा की सुरक्षा और किसी भी संभावित सुरक्षा उल्लंघनों से बचने के लिए सभी कंपनियों में सुरक्षा ऑडिट आवश्यक हैं, लेकिन यह एक समय लेने वाला कार्य भी है क्योंकि आपको समय-समय पर बहुत सी चीजों की जांच करने की आवश्यकता होती है। इसका परिणाम यह होता है कि, सामान्य तौर पर, कंपनियां एक सुरक्षा चेकलिस्ट का पालन करती हैं और इसे कवर करने के लिए सब कुछ कॉन्फ़िगर करती हैं, लेकिन उनके पास सुरक्षा ऑडिट नहीं होता है। आप कह सकते हैं, "यदि सब कुछ ठीक चल रहा है, तो इसे वैसे ही रखें जैसे वह है"। ठीक है, वास्तव में, आप इस बात पर भरोसा नहीं कर सकते कि अभी आप जिन सुरक्षा नीतियों को कॉन्फ़िगर कर रहे हैं, वे भविष्य में उपयोगी होंगी, और उन्हें प्रभावित करने के लिए कुछ भी नहीं बदलेगा। इसका समाधान यह हो सकता है कि इन सुरक्षा ऑडिट को स्वचालित किया जाए या इसे समय-समय पर उपयोगकर्ता के अनुकूल तरीके से किया जाए।
इस ब्लॉग में, हम देखेंगे कि PostgreSQL के लिए विभिन्न सुरक्षा ऑडिट कैसे करें और ClusterControl का उपयोग करके उन्हें स्वचालित कैसे करें।
PostgreSQL पर सुरक्षा ऑडिट करने के लिए आपको क्या करने की आवश्यकता है?
आइए PostgreSQL डेटाबेस में सुरक्षा उद्देश्यों के लिए ऑडिट करने के लिए कुछ सबसे महत्वपूर्ण चीजों को देखें:
-
संचार:आपके सभी सिस्टम में संचार एन्क्रिप्ट किया जाना चाहिए, और आपको ट्रैफ़िक को उसी तक सीमित रखना चाहिए जो केवल आता है आपके डेटा तक अनधिकृत पहुंच के जोखिम को कम करने के लिए ज्ञात स्रोतों से।
-
डेटाबेस एक्सेस:आपको अपने डेटाबेस में भौतिक और दूरस्थ पहुंच दोनों को प्रतिबंधित करने की आवश्यकता है। प्रत्येक उपयोगकर्ता के लिए केवल ज्ञात स्रोतों से कनेक्शन की अनुमति देकर, या यहां तक कि एसएसएच या वीपीएन कनेक्शन का उपयोग करके रिमोट एक्सेस को प्रतिबंधित किया जा सकता है।
-
उपयोगकर्ता खाते:PostgreSQL में आपके उपयोगकर्ता खातों की सुरक्षा में सुधार करने के कई तरीके हैं, जैसे निष्क्रिय उपयोगकर्ताओं को हटाना , केवल आवश्यक विशेषाधिकार देना, आदि।
-
इंस्टॉलेशन और कॉन्फ़िगरेशन:आपके PostgreSQL इंस्टॉलेशन को सुरक्षित करने के लिए कुछ बदलाव करने हैं, जैसे कि केवल आवश्यक इंस्टॉल करना पैकेज, डिफ़ॉल्ट क्रेडेंशियल और कॉन्फ़िगरेशन बदलना, आदि।
-
ऑडिटिंग और लॉगिंग:लॉगिंग स्टेटमेंट आपको सुरक्षा मुद्दों का पता लगाने में मदद कर सकते हैं या यदि आप उन्हें समय पर पकड़ लेते हैं तो उनसे बच सकते हैं। . आप मानक PostgreSQL लॉगिंग सुविधा का उपयोग कर सकते हैं, लेकिन अधिक विस्तृत लॉगिंग के लिए आप pgAudit जैसे एक्सटेंशन का भी उपयोग कर सकते हैं।
-
उन्नयन:पैच और सुरक्षा अपग्रेड लागू करके अपने OS और डेटाबेस को यथासंभव अद्यतित रखें।
-
क्वेरी मॉनिटर:आपको असामान्य क्वेरी या DoS हमलों का पता लगाने के लिए ट्रैफ़िक की जांच करनी चाहिए।
-
निगरानी:अपने सिस्टम की स्थिति जानने के लिए, आपके पास एक अच्छी निगरानी प्रणाली होनी चाहिए। यह सुरक्षा मुद्दों को खोजने या उनसे बचने के लिए भी उपयोगी हो सकता है।
अब हम जानते हैं कि क्या जांचना है, आइए इन कार्यों को स्वचालित करने के लिए एक विकल्प देखें - ClusterControl।
ClusterControl के साथ PostgreSQL के लिए सुरक्षा ऑडिट
PostgreSQL सुरक्षा ऑडिट के लिए, ClusterControl एक अच्छा विकल्प है क्योंकि यह एक प्रबंधन और निगरानी प्रणाली है जो आपको उपयोगकर्ता के अनुकूल इंटरफेस से अपने डेटाबेस को तैनात करने, प्रबंधित करने, मॉनिटर करने और स्केल करने में मदद करती है। इसमें शीर्ष ओपन-सोर्स डेटाबेस प्रौद्योगिकियों के लिए समर्थन है और आप नियमित रूप से प्रदर्शन करने वाले कई डेटाबेस कार्यों को स्वचालित कर सकते हैं जैसे नए नोड्स जोड़ना और स्केल करना, बैकअप चलाना और पुनर्स्थापित करना, और बहुत कुछ।
आइए देखें कि आप ClusterControl का उपयोग करके पहले बताई गई सुरक्षा जांचों को कैसे कवर कर सकते हैं।
संचार
सुरक्षा अनुभाग में (क्लस्टरकंट्रोल -> क्लस्टर चुनें -> सुरक्षा टैब), आप क्लाइंट और सर्वर के बीच कनेक्शन को एन्क्रिप्ट करने के लिए एसएसएल एन्क्रिप्शन को सक्षम कर सकते हैं।
ClusterControl से नोड्स तक पहुंच भी एक कुंजी जोड़ी के साथ पासवर्ड रहित SSH का उपयोग करके सुरक्षित है।
डेटाबेस एक्सेस
आप ClusterControl UI (ClusterControl -> Select Cluster -> Manage -> Configurations) से pg_hba.conf कॉन्फ़िगरेशन फ़ाइल को संशोधित करके अपने PostgreSQL डेटाबेस तक पहुंच को प्रतिबंधित कर सकते हैं। इस तरह, आप निम्नलिखित विकल्प निर्दिष्ट कर सकते हैं:
-
प्रकार:यहां सबसे अधिक उपयोग किए जाने वाले विकल्प यूनिक्स-डोमेन सॉकेट के लिए "स्थानीय" और "होस्ट" हैं। एक सादे या एसएसएल-एन्क्रिप्टेड टीसीपी/आईपी सॉकेट के लिए, लेकिन "होस्टएसएसएल", और अधिक जैसे अन्य विकल्प हैं।
-
डेटाबेस:यह "सभी", "समान उपयोगकर्ता", "सैमरोल", "प्रतिकृति", ए हो सकता है डेटाबेस नाम, या डेटाबेस नामों की अल्पविराम से अलग की गई सूची।
-
उपयोगकर्ता:यह "सभी" हो सकता है, एक उपयोगकर्ता नाम, "+" से पहले समूह का नाम, या अल्पविराम से अलग की गई सूची।
-
पता:होस्टनाम, या कोई IP पता और एक CIDR मास्क।
-
विधि:यहां "ट्रस्ट", "अस्वीकार", "एमडी5", "पहचान" का सबसे अधिक उपयोग किया जाता है , और "पीयर", लेकिन "scram-sha-256" या "ldap" जैसे और भी विकल्प हैं।
उदाहरण:
# TYPE DATABASE USER ADDRESS METHOD
host all admindb 10.10.10.121/32 md5
उपयोगकर्ता खाते
आप अपने डेटाबेस उपयोगकर्ताओं को ClusterControl UI (ClusterControl -> Select Cluster -> Manage -> User Management) से प्रबंधित कर सकते हैं। आप नए उपयोगकर्ता बना सकते हैं, या मौजूदा लोगों को संपादित और हटा सकते हैं, और उन्हें संबंधित विशेषाधिकार प्रदान कर सकते हैं।
स्थापना और कॉन्फ़िगरेशन
आप एक नया PostgreSQL क्लस्टर परिनियोजित कर सकते हैं या किसी मौजूदा को आयात कर सकते हैं। अपने PostgreSQL क्लस्टर को ClusterControl में जोड़े जाने के साथ, आप वर्तमान कॉन्फ़िगरेशन (ClusterControl -> Select Cluster -> Manage -> Configuration) को प्रबंधित कर सकते हैं, या क्लस्टर में नए नोड भी जोड़ सकते हैं।
परिनियोजन के दौरान, आप डेटाबेस कॉन्फ़िगरेशन जैसे डेटाबेस पोर्ट या क्रेडेंशियल को संशोधित कर सकते हैं, और फिर ClusterControl आपके नए क्लस्टर को परिनियोजित करने के लिए केवल आवश्यक पैकेज स्थापित करेगा।
ऑडिटिंग और लॉगिंग
आप ClusterControl UI (ClusterControl -> Select Cluster -> Logs -> System Logs) में मानक PostgreSQL लॉगिंग की जांच कर सकते हैं या यहां तक कि ClusterControl से pgAudit एक्सटेंशन को सक्षम कर सकते हैं और उसी स्थान पर ऑडिट लॉगिंग की जांच कर सकते हैं। ।
अपग्रेड करें
मामूली अपग्रेड के मामले में, आप इस कार्य के लिए ClusterControl का उपयोग कर सकते हैं। आप यूआई तक पहुंच सकते हैं और अपग्रेड चला सकते हैं (क्लस्टरकंट्रोल -> क्लस्टर का चयन करें -> प्रबंधित करें -> अपग्रेड करें), या ईमेल के माध्यम से उपलब्ध पैकेज प्राप्त करने के लिए "पैकेज अपग्रेड्स" क्लस्टरकंट्रोल ऑपरेशनल रिपोर्ट का उपयोग करें या क्लस्टरकंट्रोल यूआई में उनकी जांच करें।पी>
क्वेरी मॉनिटर
क्वेरी मॉनिटर सेक्शन में, आप अपने डेटाबेस ट्रैफिक पर नजर रखने के लिए शीर्ष क्वेरी, रनिंग क्वेरी, क्वेरी आउटलेयर और क्वेरी आंकड़े पा सकते हैं।
निगरानी
ClusterControl आपको कुछ सबसे सामान्य मीट्रिक का विश्लेषण करने के लिए डैशबोर्ड के पूर्वनिर्धारित सेट के साथ रीयल-टाइम में अपने सर्वर की निगरानी करने की अनुमति देता है।
ClusterControl आपको क्लस्टर में उपलब्ध ग्राफ़ को अनुकूलित करने की अनुमति देता है, और आप एजेंट-आधारित निगरानी को अधिक विस्तृत डैशबोर्ड बनाने के लिए सक्षम कर सकते हैं।
आप अलर्ट भी बना सकते हैं, जो आपको आपके क्लस्टर में होने वाली घटनाओं की सूचना देते हैं, या पेजरड्यूटी या स्लैक जैसी विभिन्न सेवाओं के साथ एकीकृत करते हैं।
ऑपरेशनल रिपोर्ट
यदि आप अपने क्लस्टर की स्थिति की जांच करने के लिए ClusterControl UI का उपयोग नहीं करना चाहते हैं, तो आप ऑपरेशनल रिपोर्ट बना या शेड्यूल कर सकते हैं।
ऑपरेशनल रिपोर्ट्स आपको आपके डेटाबेस की स्थिति के बारे में जानकारी देती हैं, जिसका उपयोग आप अपने परिवेश का ऑडिट करने के लिए कर सकते हैं। इन रिपोर्टों में विभिन्न जांच शामिल हैं और विभिन्न दिन-प्रतिदिन के डीबीए कार्यों को संबोधित करते हैं। ClusterControl ऑपरेशनल रिपोर्टिंग के पीछे का विचार सभी सबसे प्रासंगिक डेटा को एक एकल दस्तावेज़ में रखना है जिसका डेटाबेस और उनकी प्रक्रियाओं की स्थिति की स्पष्ट समझ प्राप्त करने के लिए त्वरित रूप से विश्लेषण किया जा सकता है।
आप "दैनिक सिस्टम रिपोर्ट," "पैकेज अपग्रेड रिपोर्ट," "स्कीमा परिवर्तन रिपोर्ट", "बैकअप" और "उपलब्धता" जैसी रिपोर्ट शेड्यूल कर सकते हैं और आप उन्हें एक से अधिक ईमेल में प्राप्त कर सकते हैं पता।
सुरक्षा ऑडिट स्वचालित करने के लिए ClusterControl CLI का उपयोग करना
ClusterControl CLI, जिसे s9s के रूप में भी जाना जाता है, ClusterControl संस्करण 1.4.1 में क्लस्टर कंट्रोल सिस्टम का उपयोग करके डेटाबेस क्लस्टर्स को इंटरैक्ट करने, नियंत्रित करने और प्रबंधित करने के लिए एक कमांड-लाइन टूल है। ClusterControl CLI क्लस्टर ऑटोमेशन के लिए एक नया द्वार खोलता है जहाँ आप इसे Ansible, Puppet, Chef, आदि जैसे मौजूदा परिनियोजन ऑटोमेशन टूल के साथ आसानी से एकीकृत कर सकते हैं। कमांड-लाइन टूल को ClusterControl इंस्टॉलेशन में डिफ़ॉल्ट रूप से जोड़े गए s9s नामक बाइनरी को निष्पादित करके लागू किया जाता है।
आइए इस शक्तिशाली टूल के कुछ उदाहरण देखें। इसके लिए, हम देखेंगे कि क्लस्टरकंट्रोल सीएलआई का उपयोग करके उल्लिखित सुरक्षा ऑडिट कार्यों को कैसे किया जाता है।
संचार
आप निम्न आदेश का उपयोग करके अपने क्लस्टर में SSL एन्क्रिप्शन सक्षम कर सकते हैं:
$ s9s cluster --enable-ssl --cluster-id=ID
जहां आईडी क्लस्टर आईडी संख्या है:आप कार्य प्रक्रिया को सूचीबद्ध करके इस कार्य (और शेष कार्यों) की प्रगति की निगरानी कर सकते हैं।
$ s9s job --list
डेटाबेस एक्सेस
अनुमत पहुंच को सत्यापित करने के लिए आप डेटाबेस कॉन्फ़िगरेशन की जांच कर सकते हैं:
$ s9s node --cluster-id=ID \
--nodes="IP_ADDRESS:PORT" \
--list-config
GROUP OPTION NAME VALUE
- data_directory '/var/lib/pgsql/13/data'
- hba_file '/var/lib/pgsql/13/data/pg_hba.conf'
- ident_file '/var/lib/pgsql/13/data/pg_ident.conf'
- listen_addresses '*'
- port 5432
- max_connections 100
- ssl on
- ssl_ca_file '/etc/ssl/postgresql_single/cluster_47/server_ca.crt'
- ssl_cert_file '/etc/ssl/postgresql_single/cluster_47/server.crt'
...
जहां आईडी क्लस्टर आईडी नंबर है, IP_ADDRESS और PORT आपका डेटाबेस आईपी पता और पोर्ट हैं।
उपयोगकर्ता खाते
आप क्लस्टर में मौजूद उपयोगकर्ता खातों को सूचीबद्ध कर सकते हैं:
$ s9s accounts --list --cluster-id=ID --long
NAME P CONN MAXC GRANTS
's9spostgresqlchk'@'%' N 0 0 LOGIN,SUPERUSER,INHERIT,CREATEROLE,CREATEDB
'postgres'@'%' N 1 0 LOGIN,SUPERUSER,INHERIT,REPLICATION,CREATEROLE,CREATEDB
'pg_write_server_files'@'%' N 0 0 INHERIT
...
'cmon_replication'@'%' N 2 0 LOGIN,INHERIT,REPLICATION
'admindb'@'%' N 3 0 LOGIN,SUPERUSER,INHERIT,CREATEROLE,CREATEDB
जहां आईडी क्लस्टर आईडी नंबर है।
स्थापना और कॉन्फ़िगरेशन
आप नए क्लस्टर बना सकते हैं, नए डेटाबेस नोड जोड़ सकते हैं, या अपने क्लस्टर में मौजूदा कॉन्फ़िगरेशन भी बदल सकते हैं:
$ s9s cluster --create \
--cluster-type=postgresql \
--nodes="IP_ADDRESS1?master;IP_ADDRESS2?slave;IP_ADDRESS3?slave;" \
--db-admin="DBUSER" \
--db-admin-passwd="DBPASSWORD" \
--cluster-name=PG1 \
--os-user=OSUSER \
--os-key-file=/home/OSUSER/.ssh/id_rsa \
--provider-version=13 \
--log
जहां IP_ADDRESS आपका डेटाबेस IP पता है, और आपको अपने डेटाबेस क्रेडेंशियल और ऑपरेटिंग सिस्टम उपयोगकर्ता के लिए क्रमशः DBUSER, DBPASSWORD और OSUSER को बदलने की आवश्यकता है।
ऑडिटिंग और लॉगिंग
आप निम्न कमांड का उपयोग करके कमांड लाइन से ऑडिट लॉगिंग को सक्षम कर सकते हैं:
$ s9s cluster --setup-audit-logging --cluster-id=ID
जहां आईडी क्लस्टर आईडी नंबर है:फिर, आप ऑडिट लॉगिंग जानकारी के साथ लॉग की जांच कर सकते हैं।
अपग्रेड करें
आप यह देखने के लिए रिपोर्ट बना सकते हैं कि आपको अपने डेटाबेस या ऑपरेटिंग सिस्टम पैकेज को अपग्रेड करने की आवश्यकता है या नहीं।
$ s9s report --cluster-id=ID --type=upgrade --create
जहां आईडी क्लस्टर आईडी संख्या है:इस रिपोर्ट के आधार पर, आप अपग्रेड चलाने के लिए रखरखाव विंडो शेड्यूल कर सकते हैं, और यह ClusterControl से भी किया जा सकता है।
क्वेरी मॉनिटर
आप अपने नोड्स पर चल रही प्रक्रिया की जांच कर सकते हैं और उन्हें क्वेरी, स्रोत, आदि द्वारा फ़िल्टर कर सकते हैं।
$ s9s process \
--top-queries \
--cluster-id=ID \
--update-freq=1 \
'INSERT*'
$ s9s process \
--list-queries \
--cluster-id=ID \
--client='IP_ADDRESS:*' \
'INSERT*'
निगरानी
आपके पास यहां से अपने सिस्टम की निगरानी के लिए विभिन्न विकल्प हैं। आप सभी समूहों की स्थिति की जांच कर सकते हैं, उनमें से किसी एक की जांच कर सकते हैं या यहां तक कि रीयल-टाइम में अलार्म भी देख सकते हैं।
$ s9s cluster --list --long
ID STATE TYPE OWNER GROUP NAME COMMENT
1 STARTED postgresql_single system admins PostgreSQL Cluster All nodes are operational.
2 FAILURE galera system admins PXC57 Cluster failure.
3 STARTED replication system admins MariaDB104 All nodes are operational.
4 STARTED mongodb system admins MongoDB42 All nodes are operational.
Total: 4
$ s9s alarm --cluster-name="PostgreSQL Cluster" --list
ID CID SEVERITY COMPONENT TYPE HOSTNAME TITLE
263 1 CRITICAL Network HostSshFailed haproxy1 SSH failed
264 1 CRITICAL Network HostSshFailed haproxy2 SSH failed
265 1 CRITICAL Network HostSshFailed postgresql2 SSH failed
266 1 CRITICAL Network HostSshFailed postgresql3 SSH failed
...
ऑपरेशन रिपोर्ट
आप ऑपरेशनल रिपोर्ट बना सकते हैं और कमांड लाइन से उनकी जांच कर सकते हैं। वही रिपोर्ट ClusterControl UI में उपलब्ध है।
$ s9s report --cluster-id=ID --type=default --create
क्लस्टरकंट्रोल सीएलआई का उपयोग करके आप किस प्रकार की चीजें कर सकते हैं, यह देखने के लिए ये कुछ बुनियादी उदाहरण थे। टूल के बारे में अधिक जानकारी के लिए, आप आधिकारिक दस्तावेज़ीकरण देख सकते हैं।
निष्कर्ष
हैक होने का खतरा हमेशा बना रहता है, लेकिन आप उपर्युक्त बिंदुओं की जाँच करके अपने PostgreSQL क्लस्टर पर भेद्यता अंतर को बंद कर सकते हैं। इस कार्य को अधिक आसान बनाने के लिए, आप ClusterControl UI का उपयोग कर सकते हैं या ClusterControl CLI के साथ चेक को स्वचालित भी कर सकते हैं। इसे बाहरी टूल जैसे Ansible, Puppet, आदि के साथ भी एकीकृत किया जा सकता है।