基于属性的访问控制概述

基于属性的访问控制 (ABAC) 是一种通过评估属性来确定访问权限的授权模型。属性可以与主体(请求访问的用户或实体)、对象(主体想要访问的资源或文件)甚至环境(其他参数,如一天中的时间、IP 地址等)相关。 

ABAC 策略与 RBAC(基于角色的访问控制)和部门协同工作,以提供更多的访问控制粒度。这些策略是布尔逻辑语句,其中条件被评估为真或假结果。每个策略都针对特定的一组 API 调用(称为目标)并适用于特定的用户子集(称为主题)。

要开始使用 ABAC,启用基于属性的访问控制第一的。

目前支持以下策略:

  • 无法授予新角色– 防止非管理员用户授予他们自己不拥有的角色
  • 无法更新某些用户个人资料字段– 防止已定义的用户资料字段被除主管或管理员以外的人员修改

ABAC 中使用的定义

术语 描述
策略名称 策略创建者在创建或更新策略时设置的策略名称。 
描述 (可选)策略创建者设置的策略的简短描述。
目标

策略适用的目标资源。资源目标的形式如下domain:entity:action并反映主体试图执行的动作(directory:userprofile:edit )。 

目标反映了用户正在尝试执行的操作,通常等同于编辑、查看或删除资源的 API 调用。政策与目标相关。

主题

策略的主体是该策略适用的用户、组或客户端。政策只能有一个主题。该主题具有以下成员:

  • 类型:指示策略是否适用于单个用户、一组用户、特定的 OAuth 客户端或访问资源的所有用户/客户端。type 属性必须是下列之一:用户、组、客户端或全部。
  • ID :用户/组/客户端的 GUID。当主题类型为全部时,此值将被忽略。
影响

策略的效果表示策略在满足条件时是否允许访问,或者在满足条件时立即拒绝访问。如果用户满足 ALLOW 策略的条件,具有必要的权限,并且没有被 DENY 策略阻止,则允许他们访问该资源。

ABAC 不会取代现有的基于角色的访问和部门访问控制。它与它们协同工作,提供更细粒度的访问控制。如果 ABAC 策略评估的结果为允许,则系统会检查主体是否具有必要的权限,然后才允许访问。

具有 DENY 效果的策略指定必须拒绝访问资源的条件。如果用户符合 DENY 策略的条件,则无论他们是否也符合同一资源的 ALLOW 策略的条件,都会被拒绝访问。

如果资源附加了至少一条策略,但用户不匹配任何策略的条件,则默认情况下用户将被拒绝访问该资源。

健康)状况

(可选)建立策略允许或拒绝访问的特定条件。

每个评估条件都由以下基本模式表示(以 JSON 表示): "attribute.one": { "comparison_operation": "attribute.two" }

当评估策略时,系统会检索与提供的属性名称相对应的属性,并使用提供的操作对它们进行比较。

多个条件也可以嵌套在 Any(表示逻辑或)或 All(表示逻辑与)结构中,以允许更复杂的条件逻辑。

预设属性

(可选)静态、预定义属性的映射,与系统中的属性数据进行比较。例如,策略创建者可能希望允许具有特定角色 ID 的任何用户访问,并且他们会将相关角色 ID 作为策略中的预设属性提供。

策略创建者设置预设的属性名称。与系统提供的现有属性相冲突的名称将在验证时被拒绝。预设属性名称可以包含字母数字字符、句点 (.) 和下划线 (_),但不能包含空格或除列出的字符之外的其他特殊字符。

每个映射条目都有一个键(即预设属性的名称)和一个值(即 TypedAttribute 对象),具有以下成员:

  • 类型:属性的基本数据类型。
  • 价值:属性值的字符串表示形式。

有关详细信息,请参阅创建访问策略