Apache APISIX, Open Policy Agent के साथ एकीकृत होकर अपने Ecosystem को समृद्ध करता है
API7.ai
December 24, 2021
Open Policy Agent (OPA) एक ओपन सोर्स हल्का सामान्य-उद्देश्य नीति इंजन है जो सॉफ्टवेयर में अंतर्निहित नीति फ़ंक्शन मॉड्यूल को प्रतिस्थापित कर सकता है और उपयोगकर्ताओं को सेवाओं को नीति इंजन से अलग करने में मदद करता है। OPA के सुस्थापित इकोसिस्टम के लिए धन्यवाद, उपयोगकर्ता OPA को अन्य सेवाओं, जैसे प्रोग्राम लाइब्रेरी, HTTP API आदि के साथ आसानी से एकीकृत कर सकते हैं।
जैसा कि नीचे दिए गए चित्र में दिखाया गया है, OPA पहले नीति भाषा Rego के माध्यम से नीति का वर्णन करता है; फिर JSON के माध्यम से नीति डेटा को संग्रहीत करता है, जिसके बाद उपयोगकर्ता एक क्वेरी अनुरोध भेज सकता है। क्वेरी अनुरोध प्राप्त करने के बाद, OPA नीति, डेटा और उपयोगकर्ता इनपुट को संयोजित करके एक नीति निर्णय उत्पन्न करेगा और निर्णय को सेवा को भेजेगा।

प्लगइन परिचय
Apache APISIX एक opa प्लगइन प्रदान करता है जो उपयोगकर्ताओं को Apache APISIX में OPA द्वारा प्रदान की गई नीति क्षमताओं को सुविधाजनक तरीके से शामिल करने की अनुमति देता है ताकि लचीली प्रमाणीकरण और पहुंच नियंत्रण सुविधाओं को सक्षम किया जा सके।
एक रूट पर opa प्लगइन को कॉन्फ़िगर करने के बाद, Apache APISIX प्रतिक्रिया अनुरोधों को संसाधित करते समय अनुरोध जानकारी, कनेक्शन जानकारी आदि को JSON डेटा में संयोजित करता है और इसे नीति निर्णय API पते पर भेजता है। जब तक OPA में तैनात नीति Apache APISIX द्वारा निर्धारित डेटा विनिर्देश का पालन करती है, अनुरोध पास करने, अनुरोध अस्वीकार करने, कस्टम स्थिति कोड, कस्टम प्रतिक्रिया हेडर, कस्टम प्रतिक्रिया हेडर आदि जैसे कार्यों को लागू किया जा सकता है।
यह लेख HTTP API को उदाहरण के रूप में लेकर opa प्लगइन का परिचय देता है और बैकएंड सेवाओं के लिए प्रमाणीकरण प्राधिकरण को अलग करने के लिए Apache APISIX को OPA के साथ कैसे एकीकृत किया जाए, इसके बारे में विस्तार से बताता है।
उपयोग कैसे करें
परीक्षण वातावरण बनाएं
-
Docker का उपयोग करके OPA सेवाएं बनाएं।
# Docker के साथ OPA चलाएं docker run -d --name opa -p 8181:8181 openpolicyagent/opa:0.35.0 run -s -
एक
exampleनीति बनाएं।# नीति बनाएं curl -XPUT 'localhost:8181/v1/policies/example' \ --header 'Content-Type: text/plain' \ --data-raw 'package example import input.request import data.users default allow = false allow { # अनुरोध हेडर में test-header नाम के साथ only-for-test मान है request.headers["test-header"] == "only-for-test" # अनुरोध विधि GET है request.method == "GET" # अनुरोध पथ /get से शुरू होता है startswith(request.path, "/get") # GET पैरामीटर test मौजूद है और abcd के बराबर नहीं है request.query["test"] != "abcd" # GET पैरामीटर user मौजूद है request.query["user"] } reason = users[request.query["user"]].reason { not allow request.query["user"] } headers = users[request.query["user"]].headers { not allow request.query["user"] } status_code = users[request.query["user"]].status_code { not allow request.query["user"] }' -
usersडेटा बनाएं।# परीक्षण उपयोगकर्ता डेटा बनाएं curl -XPUT 'localhost:8181/v1/data/users' \ --header 'Content-Type: application/json' \ --data-raw '{ "alice": { "headers": { "Location": "http://example.com/auth" }, "status_code": 302 }, "bob": { "headers": { "test": "abcd", "abce": "test" } }, "carla": { "reason": "Give you a string reason" }, "dylon": { "headers": { "Content-Type": "application/json" }, "reason": { "code": 40001, "desc": "Give you a object reason" } } }'
एक रूट बनाएं और प्लगइन सक्षम करें
निम्नलिखित कमांड चलाकर रूट बनाएं और opa प्लगइन सक्षम करें।
curl -XPUT 'http://127.0.0.1:9080/apisix/admin/routes/r1' \ --header 'X-API-KEY: <api-key>' \ --header 'Content-Type: application/json' \ --data-raw '{ "uri": "/*", "methods": [ "GET", "POST", "PUT", "DELETE" ], "plugins": { "opa": { "host": "http://127.0.0.1:8181", "policy": "example" } }, "upstream": { "nodes": { "httpbin.org:80": 1 }, "type": "roundrobin" } }'
परीक्षण अनुरोध
अगला, प्लगइन के चलने की स्थिति का परीक्षण करने के लिए opa प्लगइन को अनुरोध भेजने के लिए निम्नलिखित कमांड चलाएं।
# अनुरोध स्वीकार करें curl -XGET '127.0.0.1:9080/get?test=none&user=dylon' \ --header 'test-header: only-for-test' { "args": { "test": "abcd1", "user": "dylon" }, "headers": { "Test-Header": "only-for-test", "with": "more" }, "origin": "127.0.0.1", "url": "http://127.0.0.1/get?test=abcd1&user=dylon" } # अनुरोध अस्वीकार करें और स्थिति कोड और प्रतिक्रिया हेडर को पुनः लिखें curl -XGET '127.0.0.1:9080/get?test=abcd&user=alice' \ --header 'test-header: only-for-test' HTTP/1.1 302 Moved Temporarily Date: Mon, 20 Dec 2021 09:37:35 GMT Content-Type: text/html Content-Length: 142 Connection: keep-alive Location: http://example.com/auth Server: APISIX/2.11.0 # अनुरोध अस्वीकार करें और कस्टम प्रतिक्रिया हेडर लौटाएं curl -XGET '127.0.0.1:9080/get?test=abcd&user=bob' \ --header 'test-header: only-for-test' HTTP/1.1 403 Forbidden Date: Mon, 20 Dec 2021 09:38:27 GMT Content-Type: text/html; charset=utf-8 Content-Length: 150 Connection: keep-alive abce: test test: abcd Server: APISIX/2.11.0 # अनुरोध अस्वीकार करें और कस्टम प्रतिक्रिया (स्ट्रिंग) लौटाएं curl -XGET '127.0.0.1:9080/get?test=abcd&user=carla' \ --header 'test-header: only-for-test' HTTP/1.1 403 Forbidden Date: Mon, 20 Dec 2021 09:38:58 GMT Content-Type: text/plain; charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Server: APISIX/2.11.0 Give you a string reason # अनुरोध अस्वीकार करें और कस्टम प्रतिक्रिया (JSON) लौटाएं curl -XGET '127.0.0.1:9080/get?test=abcd&user=dylon' \ --header 'test-header: only-for-test' HTTP/1.1 403 Forbidden Date: Mon, 20 Dec 2021 09:42:12 GMT Content-Type: application/json Transfer-Encoding: chunked Connection: keep-alive Server: APISIX/2.11.0 {"code":40001,"desc":"Give you a object reason"}
प्लगइन अक्षम करें
Apache APISIX की गतिशील प्रकृति के लिए धन्यवाद, रूट कॉन्फ़िगरेशन से opa प्लगइन संबंधित कॉन्फ़िगरेशन को हटाकर और इसे सहेजकर OPA प्लगइन को बंद किया जा सकता है।
सारांश
यह लेख Apache APISIX और Open Policy Agent को इंटरफेस करने के लिए विस्तृत चरणों का वर्णन करता है। हमें उम्मीद है कि यह लेख आपको Apache APISIX में Open Policy Agent का उपयोग करने की स्पष्ट समझ देगा और बाद के हाथों पर काम को सुविधाजनक बनाएगा।
Apache APISIX न केवल अपने उच्च प्रदर्शन को बनाए रखने के लिए प्रतिबद्ध है, बल्कि हमेशा ओपन सोर्स इकोसिस्टम के निर्माण पर बहुत ध्यान देता है। वर्तमान में, Apache APISIX में 10+ प्रमाणीकरण प्राधिकरण संबंधित प्लगइन हैं जो उद्योग में मुख्यधारा के प्रमाणीकरण प्राधिकरण सेवाओं के साथ इंटरफेस करने का समर्थन करते हैं।
यदि आपको अन्य प्रमाणीकरण प्राधिकरणों के साथ इंटरफेस करने की आवश्यकता है, तो Apache APISIX के GitHub पर जाएं और issue के माध्यम से अपने सुझाव दें; या Apache APISIX की मेलिंग सूची की सदस्यता लें और ईमेल के माध्यम से अपने विचार व्यक्त करें।