GH GambleHub

Pragins և middleware API Gateway

1) Ինչո՞ ւ պետք է պլագիններ և middleware

API-դարպասը կորպորատիվ քաղաքական գործչի հարկադիր կատարման կետն է։ Պլագինների ճիշտ հավաքված շղթան

ստանդարտացնում է անվտանգությունը (authN/authZ, WAF, SNS),

պաշտպանում է կայունությունը (rate limit, circuit breaker, retry-policies),

կառավարում է պայմանագիրը (սխեմաների վալիդացիա, փոխակերպում),

տալիս է դիտարկումը (չափումներ, լույսեր, հետքեր),

նվազեցնում է արժեքը (հաշվարկ, դեդուպլիկացիա, կանարյան կանոններ)։

Բանալին 'նվազագույն լատենտ և օգտագործման հստակ հաջորդականություն։

2) Պլագինների դասարաններ և ինչ են նրանք անում և ինչ են անում

1. Նույնականացում/վավերացում

JWT/JWKS պրովայդերներ, OAuth2/OIDC, API բանալիներ, mTSA (client com)։

HMAC ստորագրությունները (webhuks/գործընկերներ), DPoP/PoP եզրին։

2. Հեղինակային իրավունքը

RBAC/ABAC/OPA/Cedar (PDP) տեղական լուծումներով։

BOLA-guard: Ստուգում «tenault »/« owner» վերնագրերում/կոնտեքստում։

3. Ցանցային և պրոտոկոլային պաշտպանություններ

WAF (OWASP CRS), հակատանկային (rate/behavioral), Geo/IP/ASN ֆիլտրեր, TMS-պրոֆիլներ։

SYS, CSP վերնագրեր, Fetch-Metadata ֆիլտրեր, SDP/COOP/COEP։

4. Կայունություն

Rate limiting (token bucket/GCRA), քվոտաներ և մրցակցություն։

Circuit breaker, թայմաուտներ, adaptive concurrency, load shedding։

Retry-policy-ը per-try timeout-ի և ջիթերի հետ։

5. Փոխակերպումներ և վալիդացիա

Հետքերի/վերնագրերի, body-rewrite, JSON/XML-ի, gRPC no HTTP-ի։

Սխեմաների վալիդացիան (OpenAPI/JSON Schema/Drobuf), ID նորմալիզացիան։

6. Քեշինգը և արտադրողականությունը

Response/fragroncache, ETag/If-None-Match, ագրեսիա, brotli։

Request collapsing (coalescing) նույն կոդերի համար։

7. Դիտարկումը և աուդիտը

RED/USE-ի մետրերը, որոշումների տրամաբանությունը (429/403/5xx), ճանապարհը (W3C Trace-Internext/OpenTelemetry), sempling (tail/adaptive)։

Քաղաքական գործչի անվտանգության և տարբերակների վերնագրերի աուդիտը։

8. Կյանքի ցիկլը և գործողությունը

Canary/blue-green, feature-flags, shadow լուծումներ (տրամաբանություն, չօգտագործել), ռուսական տարբերակներ։

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

Սկզբունքը 'նախկինում ավելի էժան/ֆատալ (deny, auth, limits), ավելի ուշ' «կոսմետիկա» (փոխակերպում, քաշ)։

4) Արտադրողականությունը և կարդինալությունը

Պահպանեք O (1) քայլերը առանց արտաքին հարցումների տաք ճանապարհին։

Բոլոր «արտաքին զանգերը» (PDP/JWKS) կարճ TTL և asynchensous refresh միջոցով։

Metric/պիտակները սահմանափակ են («tenault», «plan», «roult», բայց ոչ «user _ id»)։

«Ծանր» պլագինները (WAF, body-transform) - ներառել ընտրովի per-rome։

5) Միգրացիայի օրինակներ

5. 1 Envoy: JWT + Rance Limit + OPA + Retries (կեղծ)

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 Kong: plagins երթուղով

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 Apache APISIX: JWT + Limit + Proxy-Mirror (shadow)

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 Traefik: Middleware շղթա

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) Բազմաբնույթ և քաղաքական վարկածներ

Ուղղման բանալին '<։

Պլագինները կարդում են «ten.ru» -ից mTMS SAN/JWT-cleima/վերնագիր, օգտագործում են limite/quota/կանոնները։

Տարբերակեք քաղաքականությունները («policy _ version»), վարեք changelog և կանացի rollout։

7) Թեստավորում և rollout

Մինչև բևեռը

Շղթայի պայմանագրային թեստերը («եթե-որ բան») 'auth deny, auth ensalow, rate 429, schema 422։

Բեռները 'bursts 10, երկար սարահարթ, «կեղտոտ» փամփուշտներ (slow-POST)։

Chaos: PDP/JWKS/Redis-ի քայքայումը պետք է լինի fail-closed/քայքայումը նվազագույն անվտանգ։

Ռելիզը

«Reault-Only »/shadow-mode (տրամաբանություն լուծումներ առանց օգտագործման)։

Canary 1-5 տոկոսն է + համեմատությունը (p95/p99, 4xx/5xx/429)։

Ավտոմատ rollback SLO/alertam։

8) Դիտողությունն ու չափումները

Մետրիկները

`http_requests_total{route,tenant,plan,status}`

`request_duration_seconds_bucket{route}` (p95/p99)

`rate_limited_total{policy}`, `retry_total{reason}`, `circuit_state`

`authn_fail_total{reason}`, `authz_denied_total{action}`

`schema_validation_fail_total{route}`

Թրեյզներ ՝ per-medter, ատրիբուտներ «policy _ version», «tenault», «limit _ key»։

Լոգները (սեմիլացված) 'deny/429/5xx լուծումները պատճառներով և «trace _ id»։

Dashbords: Exec-, per-rope, per-tenae, «տաք» քաղաքականություն։

9) Անվտանգություն և գործողություն

Բոլոր գաղտնիքները (HMAC, JWKS private, API-բանալիներ) - KFC/Vox-ում, ոչ դելգ ֆայլերում։

Deny-by-2019 քաղաքականությունը նախատեսված է զգայուն երթուղիների համար։

Կարճ TTL JWKS/kasha PDP, ասինխրոն նորարարություններ backoff-ից։

Փոխակերպման սխեմաների իրականացումը versioned է։ «կոտրող» - dult-write-ի միջոցով։

Սահմանափակեք body-size (DoS) և JSON խորությունը։

10) Անտիպատերնի

Համընդհանուր «ամեն ինչ ներառվում է» պլագինների հավաքածուի յուրաքանչյուր երթուղու վրա, որը պարունակում է միլիոնավոր և հաշիվներ։

Պլագինների արտաքին կախվածությունը առանց քեշի/թայմաուտների բացատրվում է կասկադային թայմաուտներով։

Ֆիլտրերի կարգի բացակայությունը 'սկզբում փոխակերպումը/տրամաբանությունը, ապա լիմիտները սխալ են։

Պիտակների բարձր կարդինալությունը մետրիկ է (rull 'user _ id' ip ')։

AuthN/authZ-ի խառնուրդը փոխակերպման մոդելներում (Lua/Jinja)։

Գաղտնիքների/հոսանքների տրամաբանությունը։

Մեկ գլոբալ Redis/կլաստեր բոլոր սահմանների համար առանց շարդինգի/պահեստի։

11) iGaming/ֆինանսական առանձնահատկությունները

Նախկին ստենանտը/կանոնների նախկին միգրացիան 'KYC/AML, սանկցիաներ, վճարումների սահմանափակումներ։

Արբիտրաժային երթուղիների համար կոշտ քաղաքականությունները 'կարճ թայմաուտներ, մեկ խոհարար, գաղափարախոսություն («Idempotency-Key»)։

PMS/KYC MSK-ի համար պարագծերի բաժանումը (առանձին ենթախմբեր/plagine շղթաներ)։

Հաշիվը անփոփոխ լուծումների (եզրակացություններ, արգելափակումներ, սանկցիոն մերժում)։

12) Չեկ-թուղթ պատրաստակամության համար

  • Ֆիլտրերի կարգը 'authN www.authZ www.limits www.circuit/timeout wwww.schema: transform www.cache։
  • Պագինի երթուղային հավաքածու; ծանր, միայն այնտեղ, որտեղ պետք է։
  • JWKS/PDP կարճ TTL և kash; Թայմաուտները և fallback ռազմավարությունը։
  • Rate/Delta/Concurrency - նախագծված են բանալիներ, շարդիզացիա։
  • RED/USE, OTel, sampling tail/adaptive։
  • Canary + shadow ռեժիմը, 71-rolback SLO-ով։
  • Գաղտնիքները KFC/Vox-ում; ալգորիթմները տարբերակված են, խմբակցությունների հետ։
  • Limity body/headers; պաշտպանություն oversize/slow-POST-ից։
  • Հաճախորդների համար '35401/403/409/422/429/5xx, «Retry-After», վերնագրերի օրինակներ։

13) TL; DR

Կառուցեք «վաղ մերժման» շղթան, որը ցույց է տալիս համապատասխան սահմանաչափերի/կայունության վավերացումը։ Միացրեք միայն per-rope անհրաժեշտ պլագինները, քշեք արտաքին լուծումները (JWKS/PDP), տվեք թայմաուտներ և retry քաղաքականություններ, վերահսկեք մետրերի կարդինալությունը։ Օգտագործեք shadow/canary-ի միջոցով, պահեք գաղտնիքները KFC/Vox-ում և չափեք յուրաքանչյուր p95/p99-ի ազդեցությունը։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։