ABAC:基于属性的访问控制

使用可信属性表达带条件的授权规则


Speedle 如何实现 ABAC

基于属性的访问控制(Attribute-Based Access Control,ABAC)使用主体、资源或请求环境的属性判断访问权限。在 Speedle 中,SPDL 条件会结合身份、操作和资源评估运行时属性。应用或可信集成组件需要收集这些属性,并约定一致的名称与类型。

例如,角色确定 Alice 是读者,密级属性进一步决定她能否阅读某类信息。角色分配部分见 RBAC。

验证密级条件

将下面的策略粘贴到 Playground:

grant user alice read book if clearance >= 3

用户填 alice,资源填 book,操作填 read。添加名为 clearance 的属性,选择数值类型,值填 4,结果为允许;将值改为 2,结果为拒绝。字符串 4 与数值 4 并不相同,应使用条件所要求的类型。

对应的 Playground 请求为:

{
  "subject": {"principals": [{"type": "user", "name": "alice"}]},
  "resource": "book",
  "action": "read",
  "attributes": [{"name": "clearance", "type": "numeric", "value": 4}]
}

Playground 使用带类型的属性数组。对已部署 ADS 构造请求时,应以决策 API 参考为准,浏览器适配层不能替代服务 API 契约。

确保属性可信

密级、租户归属等属性应来自可信服务,而不是任由客户端填写。资源分类也需要显式映射到请求中,Speedle 不会自动读取应用数据库字段。不同身份域中的同名用户应通过身份域区分。

属性缺失可能引发评估错误。应用应区分错误与正常的拒绝响应,并在出错时拒绝访问。除了允许情况,还应测试缺失属性、类型错误和边界值。外部自定义函数需要服务端集成,浏览器 Playground 不提供这一能力。

继续阅读 SPDL 条件、授权决策和身份与 IAM 集成。