गेटवे एपीआई में प्लगइन और मिडिलवेयर
1) आपको प्लगइन और मिडिलवेयर की आवश्यकता क्यों है
एपीआई गेटवे - कॉर्पोरेट नीतियों के प्रवर्तन का एक बिंदु। सही ढंग से इकट्ठा प्लगइन श्रृंखला:- सुरक्षा को मानकीकृत करता है (authN/authZ, WAF, CORS),
- स्थिरता (दर सीमा, सर्किट ब्रेकर, रीट्री-नीतियों) की रक्षा करता है,
- अनुबंध का प्रबंधन करता है (योजनाओं, परिवर्तनों का सत्यापन),
- अवलोकन (मैट्रिक्स, लॉग, ट्रेसिंग) देता है,
- लागत कम करता है (कैशिंग, डीडुप्लिकेशन, कैनरी नियम)
कुंजी: न्यूनतम विलंबता और स्पष्ट अनुप्रयोग स्थिरता।
2) प्लगइन कक्षाएं और वे क्या करते हैं
1. पहचान/सत्यापन
JWT/JWKS प्रदाता, OAuth2/OIDC, API कुंजी, mTLS (क्लाइंट सर्टिफिकेट)।
HMAC हस्ताक्षर (वेबहूक/भागीदार), किनारे पर DPoP/PoP।
2. प्राधिकरण
स्थानीय समाधान कैश के साथ RBAC/ABAC/OPA/Cedar (PDP)।
बोला-गार्ड: हेडर/संदर्भ में 'किरायेदार '/' मालिक' की जाँच।
3. नेटवर्क और प्रोटोकॉल सुरक्षा
WAF (OWASP CRS), एंटी-बॉट्स (दर/व्यवहार), जियो/IP/ASN फिल्टर, TLS प्रोफाइल।
CORS, CSP हेडर, Fetch-Metadata फ़िल्टर, CORP/COP/COEP।
4. स्थिरता
दर सीमित (टोकन बाल्टी/जीसीआरए), कोटा और प्रतिस्पर्धा।
सर्किट ब्रेकर, टाइमआउट, अनुकूली संगति, लोड शेडिंग।
प्रति-टाइमआउट और जिटर के साथ पुन: प्रयास-नीति।
5. परिवर्तन और मान्यता
पथ/हेडर जनगणना, शरीर-पुनर्लेखन, JSON/XML ↔, gRPC ↔ HTTP।
स्कीमा सत्यापन (OpenAPI/JSON स्कीमा/Protobuf), आईडी सामान्यीकरण।
6. कैचिंग और प्रदर्शन
प्रतिक्रिया/टुकड़ाकैश, ईटीएजी/इफ-नो-मैच, संपीड़न, ब्रोटली।
समान कुंजी के लिए ढहने (colessing) का अनुरोध करें।
7. अवलोकन और लेखा परीक्षा
RED/USE मेट्रिक्स, निर्णय लॉगिंग (429/403/5xx), ट्रेसिंग (W3C ट्रेस-संदर्भ/ओपनटेलीमेट्री), नमूना (पूंछ/अनुकूली)।
ऑडिट सुरक्षा हेडर और नीति संस्करण।
8. जीवन चक्र और संचालन
कैनरी/ब्लू-ग्रीन, फीचर-फ्लैग्स, शैडो सॉल्यूशंस (लॉग, लागू नहीं), संस्करण माइग्रेशन।
3) आवेदन की प्रक्रिया (अनुशंसित श्रृंखला)
[Ingress TLS]
→ Early-Deny (ASN/Geo, IP allow/deny)
→ mTLS / Client Cert Auth
→ JWT/OAuth2 AuthN (JWKS cache)
→ OPA/ABAC AuthZ (solution cache)
→ Rate Limit / Concurrency
→ Circuit / Timeout / Retries (пер-try)
→ Schema Validation (request)
→ Transform (headers/path/body) / CORS
→ Caching (lookup)
→ Upstream Proxy (app)
← Caching (store) / Compression
← Response Transform / Schema Validation (response)
← Logging / Tracing / Metrics / Security Headers
सिद्धांत: पहले - सस्ता/अधिक घातक (इनकार, औथ, सीमा), बाद में - "सौंदर्य प्रसाधन" (परिवर्तन, कैश)।
4) प्रदर्शन और कार्डिनैलिटी
गर्म सड़ क पर बाहरी अनुरोधों के बिना ओ (1) चरणों से चिपके रहें।
सभी प्लगइन "बाहरी कॉल" (PDP/JWKS) शॉर्ट TTL और अतुल्यकालिक रिफ्रेश के माध्यम से होते हैं।
मेट्रिक्स के लिए लेबल/लेबल - सीमित कार्डिनैलिटी ('किरायेदार', 'योजना', 'मार्ग', लेकिन 'उपयोगकर्ता _ आईडी' नहीं)।
"हेवी" प्लगइन (WAF, बॉडी-ट्रांसफॉर्म) - चुनिंदा रूप से प्रति-रूट सक्षम करें।
5) कॉन्फ़िगरेशन उदाहरण
5. 1 दूत: JWT + रेटलिमिट + OPA + रिट्रीज़ (छद्म)
yaml static_resources:
listeners:
- name: public_listener filter_chains:
- filters:
- name: envoy. filters. network. http_connection_manager typed_config:
route_config:
name: main virtual_hosts:
- name: api domains: ["api. example. com"]
routes:
- match: { prefix: "/v1/payments" }
route:
cluster: payments timeout: 350ms retry_policy:
retry_on: connect-failure,reset,5xx,gateways num_retries: 1 per_try_timeout: 200ms http_filters:
- name: envoy. filters. http. jwt_authn typed_config:
providers:
oidc:
issuer: https://auth. example. com/
remote_jwks:
http_uri: { uri: https://auth. example. com/.well-known/jwks. json, cluster: jwks, timeout: 2s }
cache_duration: 300s forward: true
- name: envoy. filters. http. ext_authz # OPA/Cedar PDP typed_config:
http_service:
server_uri: { uri: http://opa:8181, cluster: opa, timeout: 50ms }
authorization_request: { allowed_headers: { patterns: [{ exact: "authorization" }, { exact: "x-tenant" }] } }
- name: envoy. filters. http. ratelimit typed_config:
domain: public-api rate_limit_service:
grpc_service: { envoy_grpc: { cluster_name: rl } }
- name: envoy. filters. http. router
5. 2 NGINX/OpenResty: HMAC + Lua + Redis (छद्म)
nginx lua_shared_dict jwks 10m;
lua_shared_dict limits 10m;
server {
listen 443 ssl http2;
Early deny by ASN/Geo if ($bad_asn) { return 403; }
HMAC signature check (webhooks/partners)
set_by_lua_block $sig_ok {
return verify_hmac_signature(ngx. var. http_x_signature, ngx. var. request_time, ngx. var. request_body)
}
if ($sig_ok = 0) { return 401; }
Token bucket in Redis access_by_lua_block {
local key = ngx. var. binary_remote_addr.. ":".. ngx. var. request_uri local allowed, retry_after = ratelimit_allow(key, 50, 100)
if not allowed then ngx. header["Retry-After"] = retry_after return ngx. exit(429)
end
}
proxy_read_timeout 300ms;
proxy_connect_timeout 100ms;
proxy_pass http://app_backend;
}
5. 3 कोंग: मार्ग के साथ प्लगइन
yaml services:
- name: payments url: http://payments:8080 routes:
- service: payments paths: ["/v1/payments"]
plugins:
- name: jwt config: { key_claim_name: kid, secret_is_base64: false, run_on_preflight: false }
- name: opa config: { server_url: "http://opa:8181/v1/data/authz/allow", timeout: 50 }
- name: rate-limiting config: { second: 50, policy: redis, redis_host: redis, fault_tolerant: true }
- name: correlation-id config: { header_name: "traceparent" }
- name: response-transformer config: { add: { headers: ["Strict-Transport-Security:max-age=31536000"] } }
5. 4 अपाचे APISIX: JWT + लिमिट + प्रॉक्सी-मिरर (छाया)
yaml routes:
- uri: /v1/wallets/
plugins:
openid-connect:
client_id: wallet discovery: "https://auth. example. com/.well-known/openid-configuration"
scope: "openid"
limit-count:
count: 100 time_window: 60 key_type: "var"
key: "remote_addr"
proxy-mirror: # shadow traffic host: "http://shadow-backend:8080"
upstream_id: 1
5. 5 ट्रेफिक: मिडिलवेयर श्रृंखला
yaml http:
middlewares:
hsts-headers:
headers:
stsSeconds: 31536000 stsIncludeSubdomains: true ratelimit:
rateLimit:
average: 50 burst: 100 routers:
api:
rule: "Host(`api. example. com`) && PathPrefix(`/v1`)"
service: app middlewares:
- hsts-headers
- ratelimit
6) बहु-किरायेदारी और नीति संस्करण
रूटिंग कुंजी: '{किरायेदार, योजना, क्षेत्र, मार्ग, संस्करण}'.
प्लगइन्स ने mTLS SAN/JWT स्टैम्प/हेडर से 'किरायेदार' पढ़ा - किरायेदार के लिए सीमा/कोटा/नियम लागू करें।
संस्करण नीतियां ('नीति _ संस्करण'), चेंजलॉग और कैनरी रोलआउट दर्ज करें।
7) परीक्षण और रोलआउट
रिलीज से पहले
अनुबंध श्रृंखला परीक्षण (यदि-तब तालिका): , , , , ।
लोडिंग: फटता है × 10, लंबे पठार, "गंदे" पैटर्न (धीमी गति से POST)।
अराजकता: पीडीपी/जेडब्ल्यूकेएस/रेडिस गिरावट - न्यूनतम सुरक्षित होने के लिए विफल-बंद/गिरावट होनी चाहिए।
रिलीज़
'रिपोर्ट केवल '/छाया-मोड (अनुप्रयोग के बिना लॉग समाधान)।
कैनरी 1-5% ट्रैफिक + मीट्रिक तुलना (p95/p99, 4xx/5xx/429)।
एसएलओ/अलर्ट पर स्वचालित रोलबैक।
8) अवलोकन और मैट्रिक्स
मेट्रिक्स:- 'http _ requests _ कुल {मार्ग, किरायेदार, योजना, स्थिति}'
- 'रीक्वेस्ट _ अवधि _ सेकंड _ बकेट {रूट}' (p95/p99)
- 'rate _ limited _ totle {police}', 'retry _ total {court}', 'सर्किट _ state'
- 'authn _ fail _ कुल {कारण}', 'authz _ dened _ total {action}'
- 'schema _ validation _ fail _ कुल {route}'
- ट्रेस: स्पैन प्रति-फ़िल्टर, गुणधर्म 'नीति _ संस्करण', 'किरायेदार', 'सीमा _ कुंजी'.
- लॉग (नमूना): कारणों और 'ट्रेस _ आईडी' के साथ इनकार/429/5xx समाधान।
- डैशबोर्ड: एक्सेक-सारांश, प्रति-मार्ग, प्रति-किरायेदार, "हॉट" राजनेता।
9) सुरक्षा और संचालन
सभी रहस्य (HMAC, JWKS प्राइवेट, API कुंजी) - KMS/वॉल्ट में, कॉन्फ़िग फ़ाइलों में नहीं।
संवेदनशील मार्गों के लिए इनकार-दर-डिफ़ॉल्ट नीति।
लघु TTL JWKS/PDP कैश, बैकऑफ के साथ अतुल्यकालिक अपडेट।
परिवर्तन योजनाओं का प्रवास - वर्जित; "ब्रेकिंग" - डुअल-राइट के माध्यम से।
बॉडी-साइज़ (डॉस) और JSON गहराई को सीमित करें।
10) एंटीपैटर्न
प्रत्येक मार्ग पर प्लगइन का एक सार्वभौमिक सर्व-समावेशी सेट → अतिरिक्त मिलीसेकंड और बिल।
कैश/टाइमआउट के बिना प्लगइन की बाहरी निर्भरता → कैस्केडिंग टाइमआउट।
फ़िल्टर क्रम की कमी: पहला परिवर्तन/तर्क, फिर सीमाएँ - गलत।
मीट्रिक लेबल की उच्च कार्डिनैलिटी (कच्चा 'user _ id '/' ip')।
परिवर्तन पैटर्न (लुआ/जिंजा में अंतर्निहित समाधान) में AuthN/authZ का मिश्रण।
लॉगिंग रहस्य/टोकन।
बिना शर्त/आरक्षित के सभी सीमाओं के लिए एक वैश्विक रेडिस/क्लस्टर।
11) आईगेमिंग/वित्त की विशिष्टताएं
प्रति किरायेदार/प्रति अधिकार क्षेत्र नियम: केवाईसी/एएमएल, प्रतिबंध, जिम्मेदार भुगतान की सीमाएं।
भुगतान मार्गों के लिए कठिन नीतियां: शॉर्ट टाइमआउट, एक रिपीट, आइडेम्पोटेंसी ('आइडेम्पोटेंसी-की')।
PSP/KYC SDK (अलग डोमेन/प्लगइन चेन) के लिए विभाजन परिधि।
अपरिवर्तनीय निर्णय लॉग का लेखा परीक्षा (निष्कर्ष, अवरुद्ध, मंजूरी से इनकार)।
12) प्रोड रेडीनेस चेकलिस्ट
- फ़िल्टर ऑर्डर authN → authZ → लिमिट है → सर्किट/टाइमआउट → स्कीमा → ट्रांसफ़ॉर्म → कैश।
- प्लगइन का प्रति मार्ग सेट; भारी - केवल जहाँ आवश्यक हो।
- छोटे TTL और कैश के साथ JWKS/PDP; टाइमआउट और फॉलबैक रणनीतियाँ।
- दर/कोटा/समवर्ती कुंजियां डिजाइन की गई हैं, भंडारण शार्डिंग।
- RED/USE मीट्रिक सेट, OTel ट्रेसिंग, पूंछ/अनुकूली नमूना।
- कैनरी + छाया मोड, एसएलओ द्वारा ऑटो-रोलबैक।
- केएमएस/तिजोरी में रहस्य; configs - versioned, माइग्रेशन के साथ।
- शरीर/हेडर सीमा; ओवरसाइज ़/धीमी गति से पोस्ट सुरक्षा।
- ग्राहक प्रलेखन: कोड 401/403/409/422/429/5xx, 'रेट्री-आफ्टर', उदाहरण हेडर।
13) टीएल; डीआर
एक "प्रारंभिक विफलता → सत्यापन/प्राधिकरण → सीमा/दृढ़ता → → परिवर्तन सत्यापन/कैश → टेलीमेट्री" श्रृंखला का निर्माण करें। केवल आवश्यक प्लगइन प्रति-मार्ग, कैश बाहरी समाधान (JWKS/PDP) सक्षम करें, टाइमआउट सेट करें और नीतियों को फिर से आज़माएं, मेट्रिक्स की कार्डिनैलिटी को नियंत्रित करें। छाया/कैनरी के माध्यम से जारी करें, केएमएस/वॉल्ट में रहस्य रखें और p95/p99 पर प्रत्येक प्लगइन के प्रभाव को मापें।