GH GambleHub

Ağ Geçidi API'sindeki eklentiler ve ara katman yazılımı

1) Neden eklentilere ve ara katman yazılımlarına ihtiyacınız var?

API ağ geçidi - kurumsal politikaların uygulanması noktası. Doğru şekilde monte edilmiş eklenti zinciri:
  • Güvenliği standartlaştırır (authN/authZ, WAF, CORS),
  • kararlılığı korur (oran limiti, devre kesici, yeniden deneme politikaları),
  • Sözleşmeyi yönetir (planların doğrulanması, dönüşümler),
  • Gözlemlenebilirlik sağlar (metrikler, günlükler, izleme),
  • Maliyeti azaltır (önbelleğe alma, veri tekilleştirme, kanarya kuralları)

Anahtar: minimum gecikme ve net uygulama tutarlılığı.

2) Eklenti sınıfları ve yaptıkları

1. Tanımlama/Kimlik Doğrulama

JWT/JWKS sağlayıcıları, OAuth2/OIDC, API anahtarları, mTLS (istemci sertifikası).
HMAC imzaları (webhooks/ortaklar), kenardaki DPoP/PoP.

2. Yetkilendirme

Yerel çözüm önbelleği ile RBAC/ABAC/OPA/Cedar (PDP).
BOLA-guard: 'kiracı'/' sahibi' başlıklarını/bağlamında kontrol etme.

3. Ağ ve protokol koruması

WAF (OWASP CRS), anti-botlar (oran/davranışsal), Geo/IP/ASN filtreleri, TLS profilleri.
CORS, CSP başlıkları, Fetch-Metadata filtreleri, CORP/COOP/COEP.

4. Stabilite

Hız sınırlaması (token bucket/GCRA), kotalar ve rekabet gücü.
Devre kesici, zaman aşımları, uyarlanabilir eşzamanlılık, yük düşürme.
Deneme başına zaman aşımı ve titreme ile yeniden deneme ilkesi.

5. Dönüşümler ve doğrulama

Path/Header Census, body-rewrite, JSON/XML ↔, gRPC ↔ HTTP.
Şema doğrulama (OpenAPI/JSON Schema/Protobuf), kimlik normalleştirme.

6. Önbelleğe alma ve performans

Yanıt/parça önbelleği, ETag/If-None-Match, sıkıştırma, brotli.
Aynı tuşlar için daraltma (birleştirme) isteğinde bulunun.

7. Gözlemlenebilirlik ve denetim

RED/USE metrikleri, karar kaydı (429/403/5xx), izleme (W3C Trace-Context/OpenTelemetry), örnekleme (tail/adaptive).
Denetim güvenliği başlıkları ve ilke sürümleri.

8. Yaşam döngüsü ve operasyon

Kanarya/mavi-yeşil, özellik bayrakları, gölge çözümleri (log, uygulanmaz), sürüm geçişleri.

3) Uygulama prosedürü (önerilen zincir)


[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

İlke: Daha önce - daha ucuz/daha ölümcül (inkar, auth, limitler), daha sonra - "kozmetik" (dönüşüm, önbellek).

4) Performans ve kardinalite

Sıcak yolda harici istek olmadan O (1) adımlarına sadık kalın.
Tüm eklenti "harici aramalar" (PDP/JWKS) kısa TTL ve asenkron yenileme ile yapılır.
Metrikler için etiketler/etiketler - sınırlı kardinalite ('kiracı', 'plan', 'rota', ancak 'user _ id'değil).
"Ağır" eklentiler (WAF, body-transform) - seçici olarak rota başına etkinleştirin.

5) Yapılandırma örnekleri

5. 1 Temsilci: JWT + RateLimit + OPA + Yeniden Çalışır (sözde)

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 (sözde)

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: rota boyunca eklentiler

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-Ayna (gölge)

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 zinciri

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) Çok kiracılık ve politika versiyonları

Yönlendirme anahtarı: '{kiracı, plan, bölge, rota, sürüm}'.
Eklentiler, mTLS SAN/JWT damgasından/başlığından 'kiracı'yı okur; kiracıya sınırlar/kotalar/kurallar uygular.
Sürüm ilkeleri ('policy _ version'), changelog ve canary rollout girin.

7) Test ve sunum

Serbest bırakılmadan önce

Sözleşme zinciri testleri (if-then table): auth - deny, auth - allow, rate - 429, schema - 422.
Yükleme: patlamalar × 10, uzun platolar, "kirli" desenler (yavaş POST).
Chaos: PDP/JWKS/Redis degradation - minimum güvenliğe kadar fail-closed/degradation olmalıdır.

Serbest bırakma

'Sadece Rapor'/gölge modu (uygulama olmadan günlük çözümleri).
Kanarya %1-5 trafik + metrik karşılaştırma (p95/p99, 4xx/5xx/429).
SLO/uyarılar üzerinde otomatik geri alma.

8) Gözlemlenebilirlik ve metrikler

Metrikler:
  • 'http _ requests _ total {route, kiracı, plan, durum}'
  • '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}'
  • İzler: filtre başına yayılma, 'policy _ version', 'tenant', 'limit _ key' nitelikleri.
  • Günlükler (örneklenmiş): Nedenleri ve 'trace _ id'ile/429/5xx çözümlerini reddedin.
  • Panolar: Exec-özet, rota başına, kiracı başına, "sıcak" politikacılar.

9) Güvenlik ve çalışma

Tüm sırlar (HMAC, JWKS özel, API anahtarları) - KMS/Vault'ta, yapılandırma dosyalarında değil.
Hassas yollar için varsayılan olarak reddetme politikası.
Kısa TTL JWKS/PDP önbellek, eşzamansız güncelleme ve geri alma.
Dönüşüm şemalarının göçü - sürümlü; "kırma" - çift yazma yoluyla.
Vücut boyutunu (DoS) ve JSON derinliğini sınırlayın.

10) Antipatterns

Her rotada evrensel her şey dahil eklenti kümesi - ekstra milisaniyeler ve faturalar.
Önbellek/zaman aşımı olmayan eklentilerin dış bağımlılıkları - basamaklı zaman aşımları.
Filtre sırası eksikliği: önce dönüşüm/mantık, sonra sınırlar - yanlış.
Metrik etiketlerin yüksek kardinalitesi (ham 'user _ id'/' ip').
AuthN/authZ'nin dönüşüm modellerinde karıştırılması (Lua/Jinja'da örtük çözümler).
Günlük sırları/belirteçleri.
Tüm limitler için bir global Redis/cluster, shardiness/reserve olmadan.

11) iGaming/Finansın Özellikleri

Kiracı başına/yetki alanı kuralları: KYC/AML, yaptırımlar, sorumlu ödemelerin sınırları.
Ödeme yolları için zor politikalar: kısa zaman aşımları, bir tekrar, idempotency ('Idempotency-Key').
PSP/KYC SDK için bölünmüş çevreler (ayrı etki alanları/eklenti zincirleri).
Değiştirilemez karar günlüklerinin denetimi (sonuçlar, engelleme, yaptırım reddi).

12) Prod Hazırlık Kontrol Listesi

  • Filtre sırası authN, authZ, limit, devre, zaman aşımı, şema, transform, önbellek.
  • Per-route eklenti kümesi; ağır - sadece gerektiğinde.
  • Kısa TTL ve önbellek ile JWKS/PDP; Zaman aşımları ve geri dönüş stratejileri.
  • Oran/Kota/Eşzamanlılık - anahtarlar tasarlanmıştır, depolama sharding.
  • KIRMIZI/KULLANIM metrik seti, OTel izleme, kuyruk/uyarlamalı örnekleme.
  • Kanarya + gölge modu, SLO tarafından otomatik geri alma.
  • KMS/Vault Sırları; Yapılandırmalar - sürümler, geçişlerle.
  • Gövde/başlık sınırları; Büyük boy/yavaş POST koruması.
  • Müşteri belgeleri: kodlar 401/403/409/422/429/5xx, 'Retry-After', örnek başlıklar.

13) TL; DR

Bir "erken başarısızlık", kimlik doğrulama/yetkilendirme, sınırlar, süreklilik, dönüşüm doğrulama, önbellek, telemetri zinciri oluşturun. Yalnızca rota başına gerekli eklentileri etkinleştirin, harici çözümleri önbelleğe alın (JWKS/PDP), zaman aşımları ayarlayın ve politikaları yeniden deneyin, metriklerin kardinalitesini kontrol edin. Gölge/kanarya ile serbest bırakın, KMS/Vault'ta sırları saklayın ve her eklentinin p95/p99 üzerindeki etkisini ölçün.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.