GH GambleHub

API中的访问控制和RBAC

1)为什么API中的访问控制

授权是对"此代理人现在可以对该资源执行此操作吗?».错误导致BOLA/IDOR泄漏,权利升级和违反监管机构的要求。目的是构建一个分层模型:外围→服务市政厅→业务规则,在对象级别上具有明确的策略和检查。

2)授权模式: 何时选择

RBAC(基于角色的访问控制)-角色→权限。简单,稳定,但容易出现"角色爆炸"。
ABAC(基于属性)-针对主体/对象/上下文属性(国家/地区、KYC级别、资源所有者、风险)的解决方桉。
ReBAC(基于关系的)是关系图(所有者,团队成员,"项目经理");解决复杂的层次结构。
Scopes(OAuth)是客户端与资源服务器之间有关"访问区域"(例如"payments:write")的合同。
实践:基本矩阵的RBAC、上下文和约束的ABAC、复杂层次结构(文件夹、组织、限制和子目录)的ReBAC。

3)资源和行动的分类法

层次结构:'org → project → wallet → transaction'。自上而下的权利继承与可能的"限制"。
行动:CRUD+域特异性("approve","refund","settle")。
资源属性:所有者,区域,状态,风险标签(AML/KYC),限制。
多重性:所有解决方案均包含"tenant_id";默认情况下禁止交叉限定请求(deny-by-default)。

4)体系结构: 在哪里做出决定

PEP (Policy Enforcement Point)-验证位置:网关/API网关,sidecar市政厅,服务本身。
PDP(政策决策点)是策略引擎:集中(OPA服务,Cedar引擎)或内置库。
PIP (Policy Information Point)-属性源:用户/角色目录、tenant配置文件、KUS/风险、资源所有权卡。
PAP(策略管理点)-策略版本控制、发布、审核。

建议:在PEP中集中化PDP+本地解决方桉缓存;当存在域不变性时,服务中的复杂对象检查。

5)代币,污名和身份

OIDC/OAuth2:"sub"(主题标识符),"aud"(目标服务),"scope"/"roles","tenant","kyc_level","risk_tier"。
JWT:RS/ES签名,简短的"exp",重新发行。不要放下PII;使用"jti"进行召回/跟踪审核。
mTLS/HMAC:服务台服务和合作伙伴;粘合剂通过"client_id"从目录中拉出。
Device/Context: IP/ASN, geo, Day Time-登录ABAC解决方桉(例如,禁止在工作时间之外写入)。

6)对象级别授权(BOLA-first)

每个操作都必须响应"对象是否拥有"resource_id"?

所有权检查:'资源。owner_id == subject.id"或具有角色的'org'成员资格。

样本过滤: 始终迭加"WHERE资源"。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(国家/地区/tenant)的限制,
  • "临时升级"(Just-In-Time Access,有效期)。

8) AVAS/上下文限制

地理/管辖权:禁止来自被禁国家的写作(制裁/监管)。
时间/风险:大型操作的'risk_score <threshold'。
KUS/限制:"kyc_level>=2"用于>X结论;控制事务之间的"冷却"。
"受信任的设备":要求危险路线上的合作伙伴使用mTLS。

9) ReBAC和权利图

适用于复杂的业务结构(组、团队、品牌、分支机构)。

关系:"成员","admin","owner","viewer"。
衍生权利:资源的"查看者"是从"org"拥有的"成员"项目继承而来的。
图存储库:具有关系矩阵的DB,专业服务(本着Zanzibar方法的精神)。缓存响应"check(主题、关系、对象)"。

10)解决方桉缓存和性能

PEP级别的PDP缓存(例如网关中的PDP缓存)按键为:"sub'tenant"资源"action" policy_version"。
TTL短(秒数至分钟)+事件致残:改变角色/关系/特南特。
列表的batch检查(bulk authz):减少PDP charges。
测量解决方案的后端;退化-graceful-degradation仅用于阅读(绝不用于写作/现金)。

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 policy)

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尝试份额,缓存命中率。
Dashbords:在行动/tenant上排名第一,政策发布后的趋势。

14)安全和可持续性

Deny-by-default:没有显式分辨率=禁令。
失败封闭:当PDP不可用时,关键的写作→禁止(或降级为严格验证角色的"最小集")。
关键不变量(例如"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/结论操作不变;按照监管期限进行存储。
Partnership API: mTLS+路线上的合同"scopes" 、周边的地理/ASN过滤器。

16)测试和验证

Negative矩阵:列出显式"禁止"桉例并通过测试固定。
Fuzz授权:变换"tenant_id","owner_id",在分区/排序时绕过过滤器。
PDP负载测试:检查p95/p99缓存的潜在性和行为。
策略发布:dry-run+canary+自动验证与预期的deny/allow。
事件:在看台上使用策略的精确版本进行查询。

17)反模式

仅依靠"scope"而不进行对象检查(BOLA)。
在没有集中化模型的情况下,将业务逻辑和权限验证溷为一谈。
在UI中扮演角色并信任客户解决方桉。
DB查询中缺少"tenant"/"owner"过滤器(leaky reads)。
在改变角色/关系时,不会导致缓存决策失效。
长寿的JWT,没有召回/旋转。

18)准备就绪支票清单

  • 定义资源/活动、层次结构和多范围。
  • 基本的RBAC矩阵+需要的ABAC限制器是ReBAC。
  • PDP/PEP设计;有一个本地解决方桉缓存及其残疾。
  • 政策制定者在CI中进行反向场景测试。
  • 在每个write/read中对特定的"resource_id"进行BOLA检查。
  • JWT具有最小的烙印,短的"exp";"jti"审计/召回。
  • 决策度量/logs、dashbords、alerta by deny/latency。
  • 对于关键的写作是失败的;折返模式已记录下来。
  • 客户文档:"scopes",错误代码(401/403/404/409),示例。

19) TL;DR

建立BOLA第一授权:中央PDP+解决方桉缓存,RBAC作为基础,ABAC为上下文,ReBAC为关系。所有查询都在"tenant"和特定的"resource_id"上下文中;deny-by-default,JWT短,DB中的对象过滤器。测试和测试策略,量度latency/deny,事件再现回放.对于iGaming,是单独的角色(KYC/AML/收银员),刚性ABAC限制器和不可更改的审计。

Contact

联系我们

如需任何咨询或支持,请随时联系我们。我们随时准备提供帮助!

开始集成

Email — 必填。Telegram 或 WhatsApp — 可选

您的姓名 可选
Email 可选
主题 可选
消息内容 可选
Telegram 可选
@
如果填写 Telegram,我们也会在 Telegram 回复您。
WhatsApp 可选
格式:+国家代码 + 号码(例如:+86XXXXXXXXX)。

点击按钮即表示您同意数据处理。