Apache APISIX प्राधिकरण नीति: अपने APIs को सुरक्षित रखें

Qi Guo

Qi Guo

April 21, 2023

Technology

परिचय

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

Apache APISIX एक डायनामिक, रियल-टाइम, हाई-परफॉर्मेंस क्लाउड-नेटिव API गेटवे है जो लोड बैलेंसिंग, डायनामिक अपस्ट्रीम, कैनरी रिलीज, सर्विस सर्किट ब्रेकर, प्रमाणीकरण और ऑब्जर्वेबिलिटी जैसी ट्रैफिक प्रबंधन सुविधाएं प्रदान करता है। इस लेख में, हम Apache APISIX की एक्सेस कंट्रोल नीतियों का परिचय देंगे और चर्चा करेंगे कि आपकी API सुरक्षा को सुरक्षित रखने और आपके सिस्टम के स्थिर संचालन को सुनिश्चित करने के लिए कौन सी सामान्य रणनीतियों का उपयोग किया जा सकता है।

एक्सेस कंट्रोल नीति क्या है?

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

Apache APISIX में सामान्य एक्सेस कंट्रोल नीतियां

Apache APISIX एक समृद्ध एक्सेस कंट्रोल नीतियों का सेट प्रदान करता है, जो OAuth 2.0 प्रमाणीकरण प्रोटोकॉल का समर्थन करता है और Keycloak, Ory Hydra, Okta, Auth0 जैसी विभिन्न बाहरी प्रमाणीकरण सेवाओं के साथ एकीकृत होता है। बाहरी प्रमाणीकरण सेवाओं का समर्थन करने के अलावा, APISIX शक्तिशाली आंतरिक प्रमाणीकरण विधियां भी प्रदान करता है। APISIX के Consumer ऑब्जेक्ट के साथ संयोजित करके, आप प्रमाणीकरण, अधिकार, दर सीमा, IP ब्लैकलिस्टिंग और व्हाइटलिस्टिंग प्लगइन्स को मिलाकर अपने API की सुरक्षा कर सकते हैं और दुर्भावनापूर्ण अनुरोधों को अपनी API सेवाओं को नुकसान पहुंचाने से रोक सकते हैं।

schematic

1. IP-आधारित एक्सेस कंट्रोल

IP-आधारित एक्सेस कंट्रोल सबसे सरल और सीधा तरीका है, जो आपके API तक पहुंच को केवल विशिष्ट पतों से आने वाले अनुरोधों तक सीमित कर सकता है।

आप APISIX के ip-restriction प्लगइन का उपयोग करके इस सुविधा को सक्षम कर सकते हैं, जो विभिन्न कॉन्फ़िगरेशन विकल्प प्रदान करता है, जैसे कि अनुमति या अस्वीकृत IP पता सूची, IP पता रेंज और अनुरोध अस्वीकार करने पर लौटाए जाने वाले त्रुटि संदेश। आप इन विकल्पों को अपनी आवश्यकताओं के अनुसार कॉन्फ़िगर कर सकते हैं ताकि अधिक सूक्ष्म एक्सेस कंट्रोल प्राप्त किया जा सके। यह ध्यान देने योग्य है कि IP-आधारित एक्सेस कंट्रोल की कुछ सीमाएं हो सकती हैं, क्योंकि IP पतों को स्पूफ किया जा सकता है या साझा किया जा सकता है। इसलिए, ip-restriction प्लगइन का उपयोग करते समय, इसे अन्य एक्सेस कंट्रोल प्लगइन्स के साथ संयोजित करना सबसे अच्छा होता है ताकि आपके सिस्टम की सुरक्षा और लचीलापन बढ़ाया जा सके।

2. API Key-आधारित एक्सेस कंट्रोल

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

APISIX का key-auth प्लगइन आपके API में प्रमाणीकरण तंत्र को आसानी से जोड़ सकता है, अनुरोध भेजते समय क्वेरी स्ट्रिंग या हेडर में key जोड़कर प्रमाणीकरण किया जा सकता है। APISIX संस्करण 3.1 और बाद में, यह एन्क्रिप्टेड स्टोरेज फील्ड्स data_encryption कॉन्फ़िगरेशन का उपयोग करके API Keys को etcd में एन्क्रिप्ट करके स्टोर करने का भी समर्थन करता है, जो आपके API की सुरक्षा को और बढ़ाता है।

3. टोकन-आधारित एक्सेस कंट्रोल

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

APISIX jwt-auth प्लगइन प्रदान करता है जो इस एक्सेस कंट्रोल रणनीति का उपयोग करने के लिए समर्थन करता है, जो टोकन स्टोरेज स्थान, टोकन वैधता अवधि, JWT हस्ताक्षर एल्गोरिदम और कुंजियों जैसे कॉन्फ़िगरेशन विकल्पों का समर्थन करता है। आप इन विकल्पों को अपनी आवश्यकताओं के अनुसार कॉन्फ़िगर कर सकते हैं ताकि विभिन्न प्रमाणीकरण आवश्यकताओं को पूरा किया जा सके।

4. अनुरोध पथ-आधारित एक्सेस कंट्रोल

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

APISIX का uri-blocker प्लगइन regex नियम सूची को कॉन्फ़िगर करके उपयोगकर्ता अनुरोध URIs को अवरुद्ध करने का समर्थन करता है, और rejected_code और rejected_msg को कॉन्फ़िगर करके सफल अवरोधन के बाद लौटाए जाने वाले HTTP स्थिति कोड और प्रतिक्रिया बॉडी को निर्दिष्ट कर सकता है। यह प्रशासकों को उपयोगकर्ता अनुमतियों को सूक्ष्मता से नियंत्रित करने और API सुरक्षा और नियंत्रण क्षमता को बढ़ाने की अनुमति देता है।

5. ACL-आधारित एक्सेस कंट्रोल नीति

ACL (एक्सेस कंट्रोल लिस्ट) एक सूची-आधारित एक्सेस कंट्रोल नीति है जिसका उपयोग उपयोगकर्ता या उपयोगकर्ता समूह की संसाधनों तक पहुंच अनुमतियों को नियंत्रित करने के लिए किया जाता है। इसका मूल सिद्धांत प्रत्येक संसाधन के लिए एक ACL सूची को परिभाषित करना है, जिसमें संसाधन तक पहुंच की अनुमति वाले उपयोगकर्ता या उपयोगकर्ता समूह को सूचीबद्ध किया जाता है। जब कोई उपयोगकर्ता संसाधन तक पहुंच का अनुरोध करता है, तो उसकी पहुंच संबंधित ACL सूची के आधार पर निर्धारित की जाती है।

APISIX में, हम consumer-restriction का उपयोग करके इस सुविधा को सक्षम कर सकते हैं। प्रशासक आसानी से नियंत्रित कर सकते हैं कि कौन से उपयोगकर्ता या उपयोगकर्ता समूह विशिष्ट संसाधनों तक पहुंच सकते हैं और अनधिकृत उपयोगकर्ताओं को संवेदनशील क्षेत्रों में अनुरोध भेजने से रोक सकते हैं, जिससे संवेदनशील डेटा लीक होने से बचा जा सकता है।

परिदृश्य परिचय: सूक्ष्म एक्सेस कंट्रोल

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

schematic_2

हम APISIX के consumer-restriction प्लगइन का उपयोग करके कुछ सूक्ष्म नियंत्रण लागू कर सकते हैं। यह प्लगइन आपको Route, Service या Consumer के आधार पर एक्सेस प्रतिबंध सेट करने की अनुमति देता है, और यह चार type विशेषता मानों को कॉन्फ़िगर करने का समर्थन करता है:

  • consumer_name: Consumer के username को व्हाइटलिस्ट या ब्लैकलिस्ट में सूचीबद्ध करके Route या Service तक Consumer की पहुंच को प्रतिबंधित करें।
  • consumer_group_id: Consumer Group के id को व्हाइटलिस्ट या ब्लैकलिस्ट में सूचीबद्ध करके Route या Service तक Consumer की पहुंच को प्रतिबंधित करें।
  • service_id: Service के id को व्हाइटलिस्ट या ब्लैकलिस्ट में सूचीबद्ध करके Service तक Consumer की पहुंच को प्रतिबंधित करें। इसे एक अधिकार प्लगइन के साथ संयोजित करना होगा।
  • route_id: Route के id को व्हाइटलिस्ट या ब्लैकलिस्ट में सूचीबद्ध करके Route तक Consumer की पहुंच को प्रतिबंधित करें।

इस परिदृश्य में, हम उपयोगकर्ता B को एक विशिष्ट API संसाधन तक पहुंच से रोकने के लिए दो कॉन्फ़िगरेशन विधियों का उपयोग कर सकते हैं।

Route में एक्सेस कंट्रोल नीति सेट करना

  1. सबसे पहले, हमें APISIX पर दो Consumer ऑब्जेक्ट बनाने और basic-auth प्लगइन को सक्षम करने की आवश्यकता है, जिनके नाम userA और userB हैं।
curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: {YOUR_API_KEY}' -X PUT -i -d ' { "username": "userA", "plugins": { "basic-auth": { "username":"userA", "password": "123456" } } }' curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: {YOUR_API_KEY}' -X PUT -i -d ' { "username": "userB", "plugins": { "basic-auth": { "username":"userB", "password": "123456" } } }'
  1. फिर हम उस Route पर consumer-restriction के whitelist गुण को सक्षम और कॉन्फ़िगर करते हैं जहां हम प्रतिबंध लागू करना चाहते हैं और पहले बनाए गए consumer userA का username जोड़ते हैं। इस तरह, Route केवल userA से आने वाले अनुरोधों को स्वीकार करेगा।
curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: {YOUR_API_KEY}' -X PUT -d ' { "uri": "/get", "upstream": { "type": "roundrobin", "nodes": { "httpbin.org:80": 1 } }, "plugins": { "basic-auth": {}, "consumer-restriction": { "whitelist": [ "userA" ] } } }'
  1. userA और userB का उपयोग करके अलग-अलग पहुंच अनुरोध भेजें।
curl -u userA:123456 http://127.0.0.1:9080/get -i HTTP/1.1 200 OK
curl -u userB:123456 http://127.0.0.1:9080/get -i HTTP/1.1 403 Forbidden ... {"message":"The consumer_name is forbidden."}

परिणाम से पता चलता है कि userB को API संसाधन तक पहुंच से प्रतिबंधित कर दिया गया है।

Consumer में अनुमति नियंत्रण नीतियां सेट करना

  1. सबसे पहले, हम एक Route सेट करेंगे जिसका ID forbidden-userB है, और basic-auth प्लगइन को सक्षम करेंगे।
curl http://127.0.0.1:9180/apisix/admin/routes -H 'X-API-KEY: {YOUR_API_KEY}' -X PUT -d ' { "id": "forbidden-userB", "uri": "/get", "upstream": { "type": "roundrobin", "nodes": { "httpbin.org:80": 1 } }, "plugins": { "basic-auth": {} } }'
  1. दो Consumer ऑब्जेक्ट बनाएं और basic-auth प्लगइन को सक्षम करें। ध्यान दें कि हमें userB के लिए अनुमति नियंत्रण नीतियों को सूक्ष्मता से कॉन्फ़िगर करने के लिए consumer-restriction प्लगइन को कॉन्फ़िगर करने की आवश्यकता है।
curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: {YOUR_API_KEY}' -X PUT -i -d ' { "username": "userA", "plugins": { "basic-auth": { "username":"userA", "password": "123456" } } }' curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: {YOUR_API_KEY}' -X PUT -i -d ' { "username": "userB", "plugins": { "basic-auth": { "username":"userB", "password": "123456" }, "consumer-restriction": { "type": "route_id", "blacklist": [ "forbidden-userB" ], "rejected_code": 403 } } }'
  1. userA और userB का उपयोग करके अलग-अलग अनुरोध भेजें।
curl -u userA:123456 http://127.0.0.1:9080/get -i HTTP/1.1 200 OK
curl -u userB:123456 http://127.0.0.1:9080/get -i HTTP/1.1 403 Forbidden ... {"message":"The route_id is forbidden."}

परीक्षण परिणामों की जांच करके, हम सत्यापित कर सकते हैं कि userB के अनुरोधों को प्रभावी ढंग से सीमित कर दिया गया है।

निष्कर्ष

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

Tags: