Giriş gözegçiligi we RBAC API
1) Näme üçin API-e girmäge gözegçilik etmek
Awtorizasiýa: "Bu aktýor häzirki wagtda bu çeşmäniň üstünde hereket edip bilermi? ». Ýalňyşlyklar BOLA/IDOR-syzmagyna, hukuklaryň ýokarlanmagyna we düzgünleşdirijileriň talaplarynyň bozulmagyna getirýär. Maksat köp derejeli modeli döretmekdir: perimetri → hyzmat-meş → işewürlik düzgünleri, obýektiň derejesinde aç-açan syýasatlar we barlaglar bilen.
2) Ygtyýarlylandyrmagyň modelleri: haçan saýlamaly
RBAC (Role-Based Access Control) - rollar → rugsatlar. Ýönekeý, durnukly, ýöne "rollaryň partlamagyna" ýykgyn edýär.
ABAC (Attribute-Based) - subýektiň/obýektiň/kontekstiň atributlary boýunça çözgüt (ýurt, KYC-derejesi, çeşmäniň eýesi, töwekgelçilik).
ReBAC (Relationship-Based) - gatnaşyklar grafy (eýesi, toparyň agzasy, "taslama dolandyryjysy"); çylşyrymly iýerarhiýalary çözýär.
Skopes (OAuth) - müşderi bilen çeşme-serweriň arasynda "giriş zolagy" barada şertnama (mysal üçin 'payments: write').
Amal: Esasy matrisa üçin RBAC, kontekst we çäklendirmeler üçin ABAC, çylşyrymly iýerarhiýalar üçin ReBAC (bukjalar, guramalar, çäkler we aşaky sanawlar).
3) Çeşmeleriň we hereketleriň taksonomiýasy
Iýerarhiýalar: 'org → project → wallet → transaction'. Hukuklaryň mümkin bolan "çäklendirijiler" bilen ýokardan aşak miras galmagy.
Hereketler: CRUD + domain-spesifik ('approve', 'refund', 'settle').
Çeşmeleriň häsiýetleri: eýesi, sebiti, ýagdaýy, töwekgelçilik bellikleri (AML/KYC), çäkleri.
Köp kärende: ähli çözgütlerde 'tenant _ id' bar; deny-by-default (deny-by-default).
4) Binagärlik: karar nirede kabul edilýär
PEP (Policy Enforcement Point) - barlanylýan ýer: şlýuz/API-geýtweý, sidecar mesh, hyzmatyň özi.
PDP (Policy Decision Point) - syýasatçynyň hereketlendirijisi: merkezleşdirilen (OPA-hyzmat, Cedar-hereketlendiriji) ýa-da gurlan kitaphana.
PIP (Policy Information Point) - atributlaryň çeşmeleri: ulanyjylaryň/rollaryň katalogy, tenantyň profili, KUS/töwekgelçilik, çeşmelere eýelik kartasy.
PAP (Policy Administration Point) - syýasatlaryň wersiýalaryny dolandyrmak, neşir etmek, audit.
Maslahat: merkezleşdirilen PDP + PEP-de lokal çözgüt keşi; domen üýtgemeleri bolan ýagdaýynda hyzmatda çylşyrymly obýektiw barlaglar.
5) Bellikler, bellikler we şahsyýet
OIDC/OAuth2: 'sub', 'aud', 'scope '/' roles', 'tenant', 'kyc _ level', 'risk _ tier'.
JWT: RS/ES-gol, gysga 'exp', refresh boýunça gaýtadan çykarmak. PII goýmaň; yzyna almak/trek-audit üçin 'jti' ulanyň.
mTLS/HMAC: hyzmat-k-hyzmat we hyzmatdaşlar; "client _ id" bellikleri katalogdan çykarylýar.
Device/Context: IP/ASN, geo, gije-gündiziň wagty - ABAC-çözgüdine girmek (mysal üçin, iş wagtyndan daşary write gadaganlygy).
6) Obýekt-dereje ygtyýarlylygy (BOLA-first)
Her bir amal "subýektiň eýesi bolmy/bu 'resource _ id' -e hukugy barmy?" diýip jogap bermeli.
Eýelik barlagy: 'resource. owner_id == subject. id 'ýa-da rol bilen' org 'agzalygy.
Saýlamalary süzmek: elmydama 'WHERE resource' goýuň. tenant_id =:tenant AND...` (row-level security).
Baglanyşyk amallary üçin (ýolda/telefonda ID) - kadalaşdyryň we iş logikasyna çenli tassyklaň.
7) RBAC dizaýny: rollar, rugsatlar, toplumlar
Rugsat (permissions) - atom hukuklary: 'wallet. read`, `wallet. write`, `payment. refund`.
Rollar - "admin", "support. read`, `cashier`, `fraud. analyst`.
Skopes - müşderiler üçin daşarky şertnama (scope → permissions).
- esasy rollar + "goşmaça gurluşlar" (permission packs),
- ABAC çäklendirmeleri (ýurt/sebit/tenant),
- "wagtlaýyn ýokarlandyrmalar" (Just-In-Time access, hereket ediş möhleti).
8) ABAS/kontekst çäklendirmeleri
Geo/ýurisdiksiýa: gadagan edilen ýurtlardan write gadaganlygy (sanksiýalar/düzgünleşdiriji).
Wagt/töwekgelçilik: 'risk _ score <threshold' uly amallar üçin.
KUS/çäkleri: 'kyc _ level> = 2' netijeler üçin> X; geleşikleriň arasynda "sowamaga" gözegçilik etmek.
"Ygtybarly enjamlar": howply ugurlardaky hyzmatdaşlar üçin mTLS talap etmek.
9) ReBAC we hukuk grafasy
Çylşyrymly işewürlik gurluşlary (toparlar, toparlar, markalar, şahamçalar) üçin peýdalydyr.
Gatnaşyk: 'member', 'admin', 'owner', 'viewer'.
Emele gelen hukuklar: resurs 'viewer' 'org' -e degişli 'member' taslamasyndan miras galýar.
Grafanyň ammary: gatnaşyklar matrisi bolan DB, ýöriteleşdirilen hyzmat (Zanzibar çemeleşmesi ruhunda). 'check (subject, relation, object)' jogaplaryny kesiň.
10) Çözgütler üçin nagt pul we öndürijilik
PEP derejesinde (mysal üçin, şlýuzda) "sub 'tenant' resource 'action' policy _ version 'açary bilen PDP keşi.
TTL gysga (sekunt-minut) + wakalar boýunça maýyplyk: rollaryň/gatnaşyklaryň/tenantyň üýtgemegi.
Sanawlar üçin batch-barlaglar (bulk authz): PDP çarjalaryny azaldar.
Çözgütleriň giňligini ölçäň; pese gaçanda - graceful-degradation diňe okamak üçin (hiç haçan write/pul üçin).
11) Syýasatçylaryň mysallary
11. 1 JWT bellikleri → gödek PEP (pseudo-geýtweý)
yaml
- match: { prefix: "/api/v1/wallets" }
authz:
require:
- claim: "aud"
equals: "wallet-service"
- claim: "scope"
includes_any: ["wallet. read", "wallet. write"]
context:
tenant_from: "claim:tenant"
11. 2 OPA/Rego (ABAC + BOLA)
rego package authz
default allow = false
allow {
input. action == "wallet. read"
input. subject. tenant == input. resource. tenant some role role:= input. subject. roles[_]
role == "support. read"
}
allow {
input. action == "payment. refund"
input. subject. tenant == input. resource. tenant input. subject. kyc_level >= 2 input. subject. risk_tier <= 2 input. subject. id == input. resource. owner_id # BOLA
}
11. 3 Ýurisdiksiýa boýunça çäklendirme (deny-list syýasaty)
rego deny[msg] {
input. action == "withdraw. create"
input. context. country in {"IR","KP","SY"}
msg:= "Jurisdiction not allowed"
}
11. 4 ReBAC syýasaty (psevdo)
allow(subject, "wallet. write", wallet) --
related(subject, "member", wallet. project) ∧ related(subject, "admin", wallet. org) ∧ wallet. tenant == subject. tenant.
12) Syýasatlary we wersiýalary dolandyrmak
Syýasatyň wersiýasy ('policy _ version') we howply üýtgeşmeler üçin kanareýka.
"Gury yrgylar" (dry-run/shadow decisions) - täsir etmezden 'allow/deny' -ni ýazýarys.
Syýasatlaryň we migrasiýa katalogy: kim, haçan we näme üçin üýtgetdi; wakalar bilen deňeşdirmek.
Negatiw ssenariler üçin synaglar (gadagan ýagdaýlar) - CI-de hökmanydyr.
13) Gözegçilik we audit
Çözgüt girelgeleri: 'trace _ id', 'subject', 'tenant', 'action', 'resource _ id', 'result', 'policy _ version', şowsuzlygyň sebäbi.
Metrikler: 'authz _ decision _ latency', 'authz _ denied _ total {action}', BOLA-synanyşyklaryň paýy, keş-hit-rate.
Daşbordlar: hereketler/tenantlar boýunça ýokary şowsuzlyklar, syýasatlar goýberilenden soň tendensiýalar.
14) Howpsuzlyk we durnuklylyk
Deny-by-default: aç-açan rugsadyň ýoklugy = gadaganlyk.
Fail-closed: PDP elýeterli bolmasa, gaty write → gadaganlyk (ýa-da berk barlanan rollaryň "iň az toplumyna" degradasiýa).
Möhüm üýtgemeler üçin hyzmatlaryň içinde ýerli "guard-barlaglar" (mysal üçin, 'tenant '/' owner').
JWT-de bellikleri azaltmak; duýgur atributlary PIP arkaly ygtybarly kanal arkaly ýüklemek.
15) iGaming/Maliýe aýratynlyklary
Rollar: 'cashier', 'kyc. agent`, `aml. officer`, `fraud. analyst`, `vip. manager`, `risk. admin`.
Çäklendirmeler: töleg amallary "kyc _ level", jogapkär tölegleriň çäklerine, AML/sanksiýalaryň ýagdaýyna baglydyr.
Bloklama sanawlary: 'org/brand/device/payment _ instrument' - write ABAC-süzgüçleri.
KYC/AML/netijeleriň hereketleri üçin üýtgemeýän audit-magazinesurnallar; kadalaşdyryjy möhletlere laýyklykda saklamak.
Hyzmatdaş API: mTLS + kontrakt 'scopes' marşrutlar boýunça, geo/ASN-süzgüçler perimetrde.
16) Synag we barlamak
Negative-matrisa: aç-açan "gadagan" ýagdaýlary sanap geçiň we synaglar bilen berkidiň.
Fuzz ygtyýarnamasy: 'tenant _ id', 'owner _ id' çalyşmagy, paginasiýa/sortlama wagtynda süzgüçleri aýlamak.
PDP ýüklemek synagy: p95/p99-da gizlinligi we keşiň özüni alyp barşyny barlaň.
Syýasatyň çykmagy: dry-run + canary + garaşylýan deny/allow bilen awtoulag swerki.
Wakalar: syýasatlaryň takyk wersiýasy bilen stendde soraglaryň gaýtalanmagy.
17) Antipatternler
Diňe obýekt barlagy bolmazdan 'scope' -e bil bagla (BOLA).
Merkezleşdirilen model bolmazdan, her bir hendlerde işewürlik logikasyny we hukuklary barlamagy garyşdyrmak.
UI-de rollary gizlemek we müşderi kararlaryna ynanmak.
DB (leaky reads) soraglarynda 'tenant '/' owner' süzgüçleriniň ýoklugy.
Rollary/gatnaşyklary üýtgedeniňde kesiş çözgütleriniň maýyplygy ýok.
Uzak ömürli JWT yzyna alynmazdan/aýlanmazdan.
18) Prod-taýynlyk çek-sanawy
- Resurslar/hereketler, iýerarhiýalar we köp kärende kesgitlenildi.
- Esasy RBAC-matrisa + ABAC-çäklendirijiler, zerur ýerlerde - ReBAC.
- PDP/PEP işlenip düzüldi; çözgütleriň ýerli keşi we onuň maýyplygy bar.
- Syýasatçylar CI-de negatiw ssenariýalary synagdan geçirýärler.
- Her write-de BOLA-barlaglary/anyk 'resource _ id' -de okalýar.
- JWT iň az bellikli, gysga 'exp'; "jti" boýunça audit/yzyna çagyryş.
- Çözgütleriň metrikleri/logleri, daşbordlar, deny/latency boýunça alertler.
- Möhüm write üçin ýalňyşlyk; fallback-re modeim dokumentleşdirildi.
- Müşderiler üçin resminamalar: 'scopes', ýalňyşlyk kodlary (401/403/404/409), mysallar.
19) TL; DR
BOLA-first ygtyýarnamasyny guruň: merkezi PDP + çözgütler keş, RBAC esas hökmünde, ABAC kontekst üçin, ReBAC gatnaşyklar üçin. Ähli soraglar - 'tenant' we anyk 'resource _ id' kontekstinde; deny-by-default, gysga JWT, DB-de obýekt süzgüçleri. Syýasatlary wersiýalaň we synagdan geçiriň, latency/deny ölçäň, wakalary repleým bilen oýnaň. iGaming üçin - aýry-aýry rollar (KYC/AML/kassa), berk ABAC çäklendirijiler we üýtgemeýän audit.