GH GambleHub

Plugin-uri și middleware în API-ul Gateway

1) De ce aveți nevoie de plugin-uri și middleware

API gateway - un punct de aplicare a politicilor corporative. Corect asamblate plugin lanţ:
  • standardizează siguranța (authN/authZ, WAF, CORS),
  • protejează stabilitatea (limita ratei, întrerupătorul de circuit, politicile de reincercare)
  • gestionează contractul (validarea sistemelor, transformări)
  • dă observabilitate (valori, busteni, urmărire),
  • Reduce costurile (caching, eliminarea duplicatelor, reguli canare)

Cheie: latență minimă și coerență clară a aplicației.

2) clase de plugin și ceea ce fac

1. Identificare/Autentificare

Furnizori JWT/JWKS, OAuth2/OIDC, chei API, mTLS (client cert).
Semnături HMAC (webhooks/partners), DPoP/PoP pe margine.

2. Autorizare

RBAC/ABAC/OPA/Cedar (PDP) cu memorie cache locală de soluție.
BOLA-guard: verificarea „chiriașului ”/„ proprietarului” în anteturi/context.

3. Protecția rețelei și a protocolului

WAF (CRS OWASP), anti-boți (rată/comportament), filtre Geo/IP/ASN, profile TLS.
CORS, anteturi CSP, filtre Fetch-Metadate, CORP/COOP/COEP.

4. Stabilitate

Limitarea ratei (token bucket/GCRA), cote și competitivitate.
Întrerupător de circuit, timeout, concurență adaptivă, vărsare de sarcină.
Încercați din nou politica cu timeout și jitter.

5. Transformări și validări

Census Path/Header, body-rewrite, JSON/XML ↔, gRPC ↔ HTTP.
Schema de validare (OpenAPI/JSON Schema/Protobuf), normalizare ID.

6. Caching și performanță

Răspuns/cache fragment, ETag/If-None-Match, compresie, brotli.
Cerere colaps (coalescing) pentru aceleași chei.

7. Observabilitate și audit

Măsurători RED/USE, logare decizională (429/403/5xx), urmărire (W3C Trace-Context/OpenTelemetry), prelevare de probe (coadă/adaptiv).
Anteturi de securitate audit și versiuni de politică.

8. Ciclul de viață și funcționarea

Canare/albastru-verde, feature-flags, shadow solutions (jurnal, nu se aplică), version migrations.

3) Procedura de aplicare (lanț recomandat)


[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

Principiu: mai devreme - mai ieftin/mai fatal (negare, auth, limite), mai târziu - „cosmetice” (transformare, cache).

4) Performanță și cardinalitate

Stick la O (1) pași fără cereri externe pe drumul fierbinte.
Toate plugin-ul „apeluri externe” (PDP/JWKS) sunt prin TTL scurt și reîmprospătare asincron.
Etichete/etichete pentru valori - cardinalitate limitată ("chiriaș", "plan", "traseu", dar nu "user _ id').
Plugin-uri „grele” (WAF, body-transforme) - activați selectiv pe traseu.

5) Exemple de configurare

5. 1 Trimis: JWT + RateLimit + OPA + Retries (pseudo)

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 (pseudo)

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: plugin-uri de-a lungul traseului

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-oglindă (umbră)

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: Lanțul 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) Multi-chirie și versiuni de politică

Cheie de rutare: '{chiriaș, plan, regiune, rută, versiune}'.
Plugin-urile citesc 'tenant' din mTLS SAN/JWT ștampilă/antet → aplică limite/cote/reguli chiriașului.
Version policies ('policy _ version'), introduceți changelog și canar rollout.

7) Testarea și extinderea

Înainte de eliberare

Teste în lanț (dacă-apoi tabel): , , ,.
Încărcare: explozii × 10, platouri lungi, modele „murdare” (lent-POST).
Haos: PDP/JWKS/Redis degradare - trebuie să fie nu-închise/degradare la minim în condiții de siguranță.

Eliberare

„Raport-Numai ”/shadow-mode (log solutions without application).
Canare 1-5% trafic + comparație metrică (p95/p99, 4xx/5xx/429).
Rollback automat pe SLO/alerte.

8) Observabilitate și valori

Măsurători:
  • 'http _ requests _ total {route, chiriaș, plan, status}'
  • 'request _ duration _ seconds _ bucket {route}' (p95/p99)
  • 'rate _ limited _ total {policy}', 'retry _ total {reason}', 'circuit _ state'
  • 'authn _ fail _ total {reason}', 'authz _ neged _ total {action}'
  • 'schema _ validare _ fail _ total {route}'
  • Urme: se întinde pe filtru, atribute 'policy _ version', 'chiriaș', 'limit _ key'.
  • Jurnale (eșantionate): nega/429/5xx soluții cu cauze și 'trace _ id'.
  • Tablouri de bord: Rezumat, pe traseu, per chiriaș, politicieni „fierbinți”.

9) Siguranță și funcționare

Toate secretele (HMAC, JWKS chei private, API) - în KMS/Vault, nu în fișiere de configurare.
Refuzați politica implicită pentru rutele sensibile.
Scurt TTL JWKS/PDP cache, actualizări asincrone cu backoff.
Migrarea sistemelor de transformare - versionat; „breaking” - prin dual-write.
Limita dimensiunea corpului (DoS) și adâncimea JSON.

10) Antipattern

Un set universal all-inclusive de plugin-uri pe fiecare rută → milisecunde suplimentare și facturi.
Dependențele externe ale plugin-urilor fără cache/timeout-uri → temporizări în cascadă.
Lipsa ordinii filtrului: prima transformare/logică, apoi limite - incorecte.
Cardinalitatea ridicată a etichetelor metrice (raw 'user _ id'/' ip').
Amestecarea authN/authZ în modele de transformare (soluții implicite în Lua/Jinja).
Logare secrete/jetoane.
Un Redis/cluster global pentru toate limitele fără timiditate/rezervă.

11) Specificul iGaming/Finanțe

Per chiriaș/pe reguli de jurisdicție: KYC/AML, sancțiuni, limitele plăților responsabile.
Politici dure pentru rute de plată: termene scurte, o repetare, idempotență („Idempotency-Key”).
Split perimetre pentru PSP/KYC SDK (domenii separate/lanțuri de plugin-uri).
Auditul jurnalelor decizionale neschimbabile (concluzii, blocare, refuz de sancțiune).

12) Lista de verificare Prod Readiness

  • Ordinea filtrului este authN authZ limitează circuitul/timeout schema transformă memoria cache.
  • Pe traseu set de plugin-uri; grele - numai acolo unde este necesar.
  • JWKS/PDP cu TTL scurt și cache; timeout și strategii de rezervă.
  • Rata/Cota/Concurenta - cheile sunt proiectate, sharding de stocare.
  • RED/UTILIZARE set metric, OTel de urmărire, coadă/eșantionare adaptivă.
  • Canare + modul umbră, auto-rollback de SLO.
  • Secretele în KMS/Vault; configurații - versionat, cu migrații.
  • Limite corp/antet; protecție supradimensionată/lentă POST.
  • Documentația clientului: codurile 401/403/409/422/429/5xx, „Retry-After”, anteturile exemplului.

13) TL; DR

Construiți un lanț „eșec precoce autentificare/autorizare limite/persistență validare transformare/cache telemetrie”. Activați numai pluginurile necesare pe traseu, soluțiile externe cache (JWKS/PDP), setați termenele și încercați din nou politicile, controlați cardinalitatea metricii. Eliberați prin umbră/canar, păstrați secrete în KMS/Vault și măsurați impactul fiecărui plugin pe p95/p99.

Contact

Contactați-ne

Scrieți-ne pentru orice întrebare sau solicitare de suport.Suntem mereu gata să ajutăm!

Pornește integrarea

Email-ul este obligatoriu. Telegram sau WhatsApp sunt opționale.

Numele dumneavoastră opțional
Email opțional
Subiect opțional
Mesaj opțional
Telegram opțional
@
Dacă indicați Telegram — vă vom răspunde și acolo, pe lângă Email.
WhatsApp opțional
Format: cod de țară și număr (de exemplu, +40XXXXXXXXX).

Apăsând butonul, sunteți de acord cu prelucrarea datelor dumneavoastră.