Назорати дастрасӣ ва RBAC дар API
1) Чаро назорати дастрасии API
Авторизатсия ҷавоб ба саволи "оё ин актёр ҳоло ин амалро дар ин манбаъ иҷро карда метавонад? ». Хатогиҳо ба ихроҷи BOLA/IDOR, густариши ҳуқуқҳо ва вайрон кардани талаботи танзим оварда мерасонанд. Ҳадаф аз сохтани як модели бисёрсатҳа иборат аст: периметри → хидмати маш → қоидаҳои тиҷорат, бо сиёсатҳои возеҳ ва санҷишҳо дар сатҳи объект.
2) Моделҳои авторизатсия: кай интихоб кардан лозим аст
RBAC (Назорати дастрасӣ ба нақш) - нақшҳо → иҷозат. Оддӣ, устувор, аммо ба "таркиши нақш" майл доранд.
ABAC (Attribute Based) - қарор оид ба хусусиятҳои мавзӯъ/объект/контекст (кишвар, сатҳи KYC, соҳиби захираҳо, хавф).
РЕБАК (дар асоси муносибатҳо) - графикаи муносибатҳо (молик, узви даста, "менеҷери лоиҳа"); иерархияи мураккабро ҳал мекунад.
Scopes (OA uth) - шартнома байни муштарӣ ва сервери захираҳо дар бораи "минтақаи дастрасӣ" (масалан, 'пардохтҳо: навиштан').
Амал: RBAC барои матритсаи асосӣ, ABAC барои контекст ва маҳдудиятҳо, Re
3) Таксономияи захираҳо ва амалҳо
Иерархияҳо: 'org → project → ҳамён → муомилот'. Мерос гирифтани ҳуқуқҳо аз боло ба поён бо "маҳдудкунандаҳои имконпазир".
Амалҳо: CRUD + домени махсус ('тасдиқ', 'баргардонидан', 'ҳал кардан').
Хусусиятҳои захираҳо: соҳиб, минтақа, ҳолат, барчаспҳои хатар (AML/KYC), маҳдудиятҳо.
Бисёрҳуҷрагӣ: ҳама қарорҳо 'иҷорагир _ ид' доранд; инкор бо нобаёнӣ.
4) Меъморӣ: дар куҷо қарор қабул карда мешавад
PEP (Нуқтаи ҳифзи сиёсат) - сайти санҷиш: дарвоза/API-дарвоза, Маш сидекар, худи хидмат.
PDP (Нуқтаи тасмими сиёсат) - муҳаррики сиёсат: мутамарказ (OPA-хидмат, Сидар-муҳаррик) ё китобхонаи дохилӣ.
PIP (Policy Information Point) - манбаъҳои атрибутӣ: феҳристи корбар/нақш, профили иҷорагир, CCP/хатар, харитаи моликияти захираҳо.
PAP (Point Point Point) - таҳрири сиёсат, нашр, аудит.
Тавсия: мутамаркази PDP + кэши маҳалли ҳалли маҳаллӣ дар PEP; чекҳои объекти мураккаб дар хидмат дар ҳузури инвариантҳои домейн.
5) Токенҳо, маркаҳо ва шахсият
OIDC/OAuth2: 'sub' (муайянкунандаи мавзӯъ), 'aud' (хидмати мақсаднок), 'миқёс '/' нақшҳо', 'иҷорагир', 'kyc _ level', 'risk _ tier'.
JWT: Имзои RS/ES, кӯтоҳ 'exp', аз нав озод кардан. PII нагузоред; 'jti' -ро барои бозхонди/трек истифода баред.
MTLS/HMAC: хидматрасонӣ ба хидмат ва шарикон; маркаҳо аз директория бо 'client _ id' кашида мешаванд.
Дастгоҳ/Контекст: IP/ASN, гео, вақти рӯз - воридшавӣ ба ҳалли ABAC (масалан, навиштани берун аз вақти корӣ манъ аст).
6) Иҷозати сатҳи объект (BOLA-аввал)
Ҳар як амалиёт бояд ба "мавзӯъе, ки соҳиби он аст/ҳуқуқ ба ин 'resource _ id' дорад?" Посух диҳад.
Тафтиши моликият: 'манбаъ. owner_id = = мавзӯъ. id 'ё узвият дар' org 'бо нақш.
Намунаҳои филтр: ҳамеша 'дар куҷо захира кунед. tenant_id =: иҷорагир ВА... '(амнияти сатр).
Барои амалиёти истинод (ID дар роҳ/бадан) - ба эътидол овардан ва тасдиқ кардани мантиқи тиҷорат.
7) Тарҳи RBAC: нақшҳо, иҷозатномаҳо, маҷмӯаҳо
Иҷозатҳо - ҳуқуқҳои атомӣ: 'ҳамён. хонед ',' ҳамён. нависед ',' пардохт. баргардонидан '.
Нақшҳо - маҷмӯи иҷозатномаҳои номбаршуда: 'admin', 'дастгирӣ. хонед ',' кассир ',' қаллобӣ. таҳлилгар '.
Соҳаҳо - шартномаи беруна барои муштариён (доираи § харитасозии иҷозат)
Нагузоред, ки нақшҳои тарканда:- нақшҳои асосӣ + бастаҳои иҷозат,
- Маҳдудиятҳои ABAC (кишвар/минтақа/иҷорагир),
- "Дастрасии танҳо-дар-вақт".
8) Маҳдудиятҳои ABAC/контекст
Гео/юрисдиксия: манъи навиштани кишварҳои манъшуда (таҳримҳо/танзимкунанда).
Вақт/хатар: 'holl _ hore <' барои амалиёти калон.
ACC/маҳдудиятҳо: 'kyc _ level> = 2' барои pins> X; назорати "хунуккунӣ" байни транзаксияҳо.
"Дастгоҳҳои боэътимод": барои шарикон дар хатсайрҳои хатарнок MTLS талаб мекунанд.
9) РЕБАК ва графикаи ҳуқуқҳо
Барои сохторҳои мураккаби соҳибкорӣ (гурӯҳҳо, дастаҳо, брендҳо, филиалҳо) муфид аст.
Муносибатҳо: 'аъзо', 'админ', 'соҳиб', 'тамошобин'.
Ҳуқуқҳои ҳосилшуда: 'тамошобин' -и манбаъ аз 'узви' лоиҳа, ки ба 'org' тааллуқ дорад, ба мерос гирифта шудааст.
Нигоҳдории графикӣ: пойгоҳи додаҳо бо матритсаи муносибатҳо, хидмати махсус (дар рӯҳияи муносибати Занзибар). Cache 'check (мавзӯъ, муносибат, объект)' ҷавобҳо.
10) Кэши ҳалли ва иҷрои
Кэши PDP дар сатҳи PEP (масалан, дар дарвоза) бо калид: 'sub' иҷорагир 'захираи' амал 'policy _ version'.
TTL кӯтоҳ (сонияҳо-дақиқаҳо) + маъюбӣ аз рӯи ҳодиса: тағир додани нақш/муносибат/иҷорагир.
Санҷишҳои гурӯҳӣ (оммавии authz) барои рӯйхатҳо: кам кардани хароҷоти PDP.
Андозагирии ҳалли таъхир; ҳангоми таназзул - таназзули зебо-таназзул танҳо барои хондан (ҳеҷ гоҳ барои навиштан/пул).
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 Маҳдудияти салоҳият (сиёсати рӯйхати радкунӣ)
rego deny[msg] {
input. action == "withdraw. create"
input. context. country in {"IR","KP","SY"}
msg:= "Jurisdiction not allowed"
}
11. 4 Сиёсати РЕБАК (псевдо)
allow(subject, "wallet. write", wallet) --
related(subject, "member", wallet. project) ∧ related(subject, "admin", wallet. org) ∧ wallet. tenant == subject. tenant.
12) Идоракунии сиёсат ва версия
Таҳияи сиёсат ('policy _ version') ва канарӣ барои тағироти хатарнок.
"Хушк-давидан" (қарорҳои хушк/соя) - сабти "иҷозат додан/рад кардан" бидуни таъсир.
Феҳристи сиёсат ва муҳоҷират: Кӣ кай ва чаро тағир ёфт; харитасозии ҳодисаҳо.
Санҷишҳо барои сенарияҳои манфӣ (ҳолатҳои манъшуда) - дар CI талаб карда мешаванд.
13) Мушоҳида ва аудит
Сабтҳои қарор: 'trace _ id', 'мавзӯъ', 'иҷорагир', 'амал', 'resource _ id', 'натиҷа', 'policy _ version', сабаби нокомӣ.
Нишондиҳандаҳо: 'authiz _ decoment _ latency', 'authz _ redied _ total {амал}', ҳиссаи кӯшиши BOLA, хит-сатҳи кэш.
Панели панелҳо: камбудиҳои боло аз ҷониби амалҳо/иҷорагирон, тамоюлҳо пас аз интишори сиёсат.
14) Бехатарӣ ва устуворӣ
Рад кардани пешфарз: иҷозати аниқ = рад кардан.
Нокомӣ: вақте ки ҲХДТ дастнорас аст, навиштани интиқодӣ → манъшуда (ё ба "маҷмӯи ҳадди аққали" нақшҳои қатъии тасдиқшуда таназзул ёфтааст).
"Санҷишҳои посбонӣ" -и маҳаллӣ дар доираи хидматҳо барои инвариантҳои муҳим (масалан, 'иҷорагир '/' соҳиби').
Кам кардани аломатҳо дар JWT; хусусиятҳои ҳассосро тавассути БИД тавассути канали бехатар бор кунед.
15) Хусусиятҳои IGaming/Finance
Нақшҳо: 'кассир', 'kyc. агент ',' амл. афсар ',' қаллобӣ. таҳлилгар ',' vip. менеҷер ',' хатар. админ '.
Маҳдудиятҳо: амалиётҳои пардохт аз 'kyc _ level', маҳдудиятҳои пардохтҳои масъул, вазъи AML/санксияҳо вобастаанд.
Феҳристҳои қулф: 'org/brand/дастгоҳ/payment _ instrument' - филтрҳои ABAC дар навиштан.
Гузоришҳои аудитӣ барои амалҳои KYC/AML/pin бетағйир мондаанд; нигаҳдорӣ тибқи мӯҳлатҳои танзим.
Шарики API-ҳо: mTLS + шартномаи 'миқёс' дар хатсайрҳо, филтрҳои гео/ASN дар периметр.
16) Санҷиш ва санҷиш
Матритсаи манфӣ: парвандаҳои возеҳи "манъшуда" -ро номбар кунед ва санҷишҳоро ислоҳ кунед.
Иҷозати Fuzz: иваз кардани 'иҷорагир _ ид', 'соҳиби _ ид', гузарондани филтрҳо ҳангоми пагинатсия/навъбандӣ.
Санҷиши сарбории PDP: Таъхир ва рафтори кэшҳоро дар p95/p99 санҷед.
Барориши сиёсат: хушккунӣ + канарӣ + озмоиши худкор бо радкунии интизоршаванда/иҷозат.
Ҳодисаҳо: такрори дархостҳо дар мавқеъ бо нусхаи дақиқи сиёсат.
17) Антипаттернҳо
Танҳо ба 'миқёс' бе санҷиши объект такя кунед (BOLA).
Санҷиши мантиқи тиҷорат ва ҳуқуқҳоро дар ҳар як дастгоҳ бидуни модели мутамарказ омехта кунед.
Нақшҳои Hardcode дар UI ва ҳалли мизоҷон эътимод доранд.
Набудани филтрҳои 'иҷорагир '/' соҳиб' дар дархостҳо ба пойгоҳи додаҳо (хонда мешавад).
Ҳангоми тағир додани нақшҳо/муносибатҳо маъюбии ҳалли кэш вуҷуд надорад.
JWT-ҳои дарозмуддат бидуни ёдоварӣ/гардиш.
18) Рӯйхати санҷиши омодагии Prod
- Захираҳо/фаъолиятҳо, иерархияҳо ва бисёрҳуҷрагӣ муайян карда мешаванд.
- Матритсаи асосии RBAC + Маҳдудиятҳои ABAC, дар ҷое ки лозим аст - Re
- PDP/PEP тарҳрезӣ шудаанд; кэши ҳалли маҳаллӣ ва маъюбии он мавҷуд аст.
- Сиёсатҳо санҷида мешаванд, санҷишҳои сенарияи манфӣ дар CI.
- BOLA дар ҳар як навиштан/хондан ба 'resource _ id' -и мушаххас тафтиш мекунад.
- JWT бо маркаҳои ҳадди аққал, 'exp' кӯтоҳ; аудит/ёдраскунӣ дар 'jti'.
- Ҳисоботҳои ченакҳо/қарорҳо, панели панелҳо, огоҳиҳо бо рад/таъхир.
- Барои навиштани интиқодӣ пӯшида нест; ҳолати бозгашт ҳуҷҷатгузорӣ карда мешавад.
- Ҳуҷҷатҳои муштариён: 'миқёс', рамзҳои хато (401/403/404/409), намунаҳо.
19) TL; ДР
Сохтани авторизатсияи аввалини BOLA: кэши ҳалли марказии PDP +, RBAC ҳамчун асос, ABAC барои контекст, ReBAC барои муносибатҳо. Ҳама дархостҳо дар заминаи 'иҷорагир' ва 'resource _ id' мушаххас мебошанд; рад-пешфарз, JWT кӯтоҳ, филтрҳои объект дар пойгоҳи додаҳо. Сиёсатҳои версия ва санҷиш, таъхир/инкор, такрори ҳодисаҳоро чен кунед. Барои IGaming - нақшҳои инфиродӣ (KYC/AML/cash cash), маҳдудиятҳои ABAC ва аудити тағйирнопазир.