GH GambleHub

API-ге қолжетімділікті бақылау және RBAC

1) Неліктен API-ге кіруді бақылау

Авторизация - бұл "Бұл актердің бұл ресурсты қазір орындауға мүмкіндігі бар ма? ». Қателер BOLA/IDOR-ағып кетуіне, құқықтардың күшеюіне және реттеуіштер талаптарының бұзылуына әкеледі. Мақсаты - көпдеңгейлі модель құру: периметр → сервис-меш → бизнес-ережелер, айқын саясаттармен және объектілік деңгейде тексерулермен.

2) Авторизация модельдері: қашан не таңдау керек

RBAC (Role-Based Access Control) - рұқсат → рөлдері. Қарапайым, тұрақты, бірақ «рөлдерді жаруға» бейім.
ABAC (Attribute-Based) - субъект/объект/контекст атрибуттары бойынша шешім (ел, KYC-деңгей, ресурс иесі, тәуекел).
ReBAC (Relationship-Based) - қатынастар бағаны (иесі, команда мүшесі, «жоба менеджері»); күрделі иерархияларды шешеді.
Scopes (OAuth) - клиент пен ресурс-сервер арасындағы «кіру аймағы» туралы шарт (мысалы, 'payments: write').
Практика: базалық матрица үшін RBAC, контекст және шектеулер үшін ABAC, күрделі иерархиялар үшін ReBAC (папкалар, ұйымдар, лимиттер және подаккаунттар).

3) Ресурстар мен іс-қимылдардың таксономиясы

Иерархиялар: 'org → project → wallet → transaction'. Мүмкін «шектеулермен» құқықтарды жоғарыдан төмен қарай мұраға қалдыру.
Әрекеттер: CRUD + domain-ерекше ('approve', 'refund', 'settle').
Ресурстардың қасиеттері: иеленуші, өңір, мәртебе, тәуекел-тегтер (AML/KYC), лимиттер.
Мультиаренділік: барлық шешімдерде 'tenant _ id' бар; әдепкі (deny-by-default) кросс-тенантты сұрауларға тыйым салу.

4) Сәулет: шешім қайда қабылданады

PEP (Policy Enforcement Point) - тексеру орны: шлюз/API-гейтвей, sidecar мэш, сервистің өзі.
PDP (Policy Decision Point) - саясаттың қозғалтқышы: орталықтандырылған (OPA-қызмет, Cedar-қозғалтқыш) немесе кіріктірілген кітапханалық.
PIP (Policy Information Point) - атрибуттардың көздері: пайдаланушылар/рөлдер каталогы, тенант профилі, АКҚ/тәуекел, ресурстарды иелену картасы.
PAP (Policy Administration Point) - саясат нұсқаларын басқару, жариялау, аудит.

Ұсыным: орталықтандырылған PDP + PEP жергілікті кэш шешімдері; домендік инварианттар болған кезде сервисте күрделі объектілік тексерулер.

5) Токендер, таңбалар және сәйкестілік

OIDC/OAuth2: 'sub' (субъектінің сәйкестендіргіші), 'aud' (мақсатты сервис), 'scope '/' roles', 'tenant', 'kyc _ level', 'risk _ tier'.
JWT: RS/ES-қолтаңба, қысқа 'exp', refresh бойынша қайта шығару. PII қоймаңыз; кері шақыру/трек-аудит үшін 'jti' дегенді пайдаланыңыз.
mTLS/HMAC: сервис-к-сервис және серіктестер; таңбалар 'client _ id' бойынша каталогтан тартылады.
Device/Context: IP/ASN, гео, тәулік уақыты - ABAC-шешімге кіру (мысалы, жұмыс сағатынан тыс write тыйым салу).

6) Объектілік-деңгейлік авторизация (BOLA-first)

Әрбір операция «субъект иесі болып табыла ма/осы 'resource _ id' -ке құқығы бар ма?» деп жауап беруі тиіс.

'resource. owner_id == subject. id 'немесе рөлі бар' org 'мүшелігі.
Таңдауларды сүзгілеу: әрқашан 'WHERE resource' қойыңыз. tenant_id =:tenant AND...` (row-level security).
Сілтеме операциялары үшін (жолдағы/теледегі ID) - бизнес-логикаға дейін қалыпқа келтіріңіз және валидациялаңыз.

7) RBAC жобалау: рөлдер, рұқсаттар, жиынтықтар

Рұқсаттар (permissions) - атомарлық құқықтар: 'wallet. read`, `wallet. write`, `payment. refund`.
Рөлдер - рұқсаттар жиынтығы: 'admin', 'support. read`, `cashier`, `fraud. analyst`.
Scopes - клиенттерге арналған сыртқы келісім-шарт (мэппинг scope → permissions).

Рөлдердің жарылысынан аулақ болыңыз:
  • негізгі рөлдер + «қондырмалар» (permission packs),
  • ABAC шектеулері (ел/өңір/тенант),
  • «уақытша жоғарылату» (Just-In-Time access, жарамдылық мерзімі).

8) АВАС/контекстік шектеулер

Гео/юрисдикция: тыйым салынған елдерден write тыйым салу (санкциялар/реттеуіш).
Уақыт/тәуекел: ірі операциялар үшін 'risk _ score <threshold'.
КБК/лимиттер: 'kyc _ level> = 2'> X; транзакциялар арасындағы «салқындатуды» бақылау.
«Сенімді құрылғылар»: қауіпті бағыттардағы серіктестер үшін mTLS талап ету.

9) ReBAC және құқық бағандары

Күрделі бизнес-құрылымдар (топтар, командалар, брендтер, филиалдар) үшін пайдалы.

Қатынасы: 'member', 'admin', 'owner', 'viewer'.
Туынды құқықтар: 'viewer' ресурсының 'org' тиесілі 'member' жобасынан мұраға қалдырылады.
Баған қоймасы: қарым-қатынас матрицасы бар ДБ, мамандандырылған сервис (Zanzibar-тәсіл рухында). 'check (subject, relation, object)' жауаптарын кэштеңіз.

10) Шешімдердің кэші және өнімділігі

PEP деңгейіндегі (мысалы, шлюздегі) PDP кэші 'sub' tenant 'resource' action 'policy _ version' бойынша кілтпен.
TTL қысқа (секунд-минут) + оқиғалар бойынша мүгедектік: рөлдердің/қатынастардың/тенанттың өзгеруі.
Тізімдер үшін Batch-тексерулер (bulk authz): PDP шарджаларын азайтады.
Шешімдердің latency өлшеңіз; деградация кезінде - graceful-degradation тек оқу үшін (ешқашан write/ақша үшін).

11) Саясаткерлердің мысалдары

11. 1 JWT-таңбалар → өрескел PEP (жалған гейтвей)

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 Юрисдикция бойынша шектеу (deny-list саясаты)

rego deny[msg] {
input. action == "withdraw. create"
input. context. country in {"IR","KP","SY"}
msg:= "Jurisdiction not allowed"
}

11. 4 ReBAC саясаты (жалған)


allow(subject, "wallet. write", wallet) --
related(subject, "member", wallet. project) ∧ related(subject, "admin", wallet. org)   ∧ wallet. tenant == subject. tenant.

12) Саясаттар мен нұсқаларды басқару

('policy _ version') саясатының нұсқасы және қауіпті өзгерістер үшін канарейка.
«Құрғақ айдау» (dry-run/shadow decisions) - әсерсіз 'allow/deny' логикалаймыз.
Саясат және көші-қон каталогы: кім, қашан және неге өзгертті; инциденттермен салыстыру.
Теріс сценарийлерге тесттер (тыйым салынған кейстер) - CI міндетті.

13) Бақылау және аудит

Шешімдер логтары: 'trace _ id', 'subject', 'tenant', 'action', 'resource _ id', 'result', 'policy _ version', бас тарту себебі.
Метриктер: 'authz _ decision _ latency', 'authz _ denied _ total {action}', BOLA-әрекеттер үлесі, кэш-hit-rate.
Дашбордтар: іс-әрекеттер/теңгерімдер бойынша топ-бас тартулар, саясат релиздерінен кейінгі трендтер.

14) Қауіпсіздік және орнықтылық

Deny-by-default: анық рұқсаттың болмауы = тыйым салу.
Fail-closed: PDP қол жетімсіз болған жағдайда сыни write → тыйым салу (немесе қатаң тексерілген рөлдердің «ең аз жиынтығына» деградация).
Маңызды инварианттар үшін сервистер ішіндегі жергілікті «guard-тексерулер» (мысалы, 'tenant '/' owner').
JWT-дегі таңбаларды барынша азайту; сезімтал атрибуттарды қорғалған арна бойынша PIP арқылы жүктеу.

15) iGaming/Қаржы ерекшелігі

Рөлдері: 'cashier', 'kyc. agent`, `aml. officer`, `fraud. analyst`, `vip. manager`, `risk. admin`.
Шектеулер: төлем операциялары «kyc _ level», жауапты төлемдер лимиттеріне, AML/санкциялар мәртебесіне байланысты.
Бұғаттау тізілімдері: 'org/brand/device/payment _ instrument' - write-дегі ABAC сүзгілері.
Аудит-журналдар KYC/AML/қорытындылардың әрекеттері үшін өзгермейді; реттеуші мерзімдерге сәйкес сақтау.
Серіктестік API: mTLS + бағыттар бойынша келісімшарттық 'scopes', периметрдегі гео/ASN-сүзгілер.

16) Тестілеу және верификация

Negative-матрица: анық «тыйым салынған» кейстерді санап, тесттермен бекітіңіз.
Fuzz авторизациясы: 'tenant _ id', 'owner _ id' алмастыру, пагинация/сұрыптау кезінде сүзгілерді тексеріп шығу.
PDP жүктеу тесті: p95/p99 кэшінің жасырындылығын және тәртібін тексеріңіз.
Саясатты шығару: dry-run + canary + күтілетін deny/allow бар автосверк.
Оқиғалар: саясаттың дәл нұсқасымен стендтегі сұрауларды репликалау.

17) Антипаттерндер

Нысанды тексерусіз 'scope' дегенге ғана сүйену (BOLA).
Бизнес-логиканы және құқықтарды тексеруді орталықтандырылған үлгісіз әрбір хэндлерде араластыру.
UI-дегі рөлдерді хардкодтау және клиенттік шешімдерге сену.
ДБ (leaky reads) сұрауларында 'tenant '/' owner' сүзгілерінің болмауы.
Рөлдерді/қатынастарды ауыстырған кезде кэш-шешімдердің мүгедектігі жоқ.
Ұзақ өмір сүретін JWT кері қайтарусыз/ротациясыз.

18) Prod-дайындық чек-парағы

  • Ресурстар/әрекеттер, иерархиялар және көп жалға алу анықталған.
  • Базалық RBAC-матрица + қажет жерде ABAC-шектегіштер - ReBAC.
  • PDP/PEP жобаланған; шешімдердің жергілікті кэші және оның мүгедектігі бар.
  • Саясаткерлер нұсқаланады, CI-дегі теріс сценарийлердің тестілері.
  • Нақты 'resource _ id' -ге әр write/read BOLA-тексерулер.
  • JWT ең аз таңбалармен, қысқа 'exp'; 'jti' бойынша аудит/пікір.
  • Шешімдердің өлшемдері/логтары, дашбордтар, deny/latency бойынша алерттар.
  • Сыни write үшін Fail-closed; fallback режимі құжатталған.
  • Клиенттерге арналған құжаттама: 'scopes', қате кодтары (401/403/404/409), мысалдар.

19) TL; DR

BOLA-first авторизациясын жасаңыз: орталық PDP + шешімдердің кэші, RBAC негіз ретінде, ABAC контексті үшін, ReBAC қарым-қатынасы үшін. Барлық сұраулар - 'tenant' және нақты 'resource _ id' контекстінде; deny-by-default, қысқа JWT, ДБ объектілік сүзгілер. Саясатты нұсқалаңыз және тестілеңіз, latency/deny өлшеңіз, оқиғаларды репликамен қайталаңыз. iGaming үшін - жеке рөлдер (KYC/AML/касса), қатаң ABAC-шектегіштер және өзгермейтін аудит.

Contact

Бізбен байланысыңыз

Кез келген сұрақ немесе қолдау қажет болса, бізге жазыңыз.Біз әрдайым көмектесуге дайынбыз!

Интеграцияны бастау

Email — міндетті. Telegram немесе WhatsApp — қосымша.

Сіздің атыңыз міндетті емес
Email міндетті емес
Тақырып міндетті емес
Хабарлама міндетті емес
Telegram міндетті емес
@
Егер Telegram-ды көрсетсеңіз — Email-ге қоса, сол жерге де жауап береміз.
WhatsApp міндетті емес
Пішім: +ел коды және номер (мысалы, +7XXXXXXXXXX).

Батырманы басу арқылы деректерді өңдеуге келісім бересіз.