企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
# ABAC 基于属性的访问控制 ### **ABAC 基于属性的访问控制** > 规定哪些**属性的主体**可以对哪些**属性的资源**在哪些**属性的情况**下进行哪些**操作**, `ABAC`是`Attribute-based access control`的缩写, 称为基于属性的访问控制. 权限和资源当时的状态(属性)有关, 属性的值可以用于正向判断(符合某种条件则通过), 也可以用于反向判断(符合某种条件则拒绝): #### 典型应用 1. 论坛的评论权限, 当帖子是锁定状态时, 则不再允许继续评论; 2. Github 私有仓库不允许其他人访问; 3. 发帖者可以编辑/删除评论(如果是RBAC, 会为发帖者定义一个角色, 但是每个帖子都要新增一条用户/发帖角色的记录); 4. 微信聊天消息超过2分钟则不再允许撤回; 5. 12306 只有实名认证后的账号才能购票; 6. 已过期的付费账号将不再允许使用付费功能; 场景:防火墙 适用资源:端口访问 ABAC其中的属性就是与主体、资源、情况相关的所有信息。 - 主体的属性:指的是与主体相关的所有信息,包括主体的年龄、性别、职位等。 - 资源的属性:指的是与资源相关的所有信息,包括资源的创建时间、创建位置、密级等。 - 情况的属性:指的是客观情况的属性,比如当前的时间、当前的位置、当前的场景(普通状态、紧急状态)。 - 操作:含义还是一样,比如增删改查等。 设定一个权限,就是定义一条含有四类属性信息的策略(Policy)。 ``` <pre class="calibre10">``` 策略表 效果:允许 操作:流入 主体:来自上海IP的客户端 资源:所有以<span class="token6">33</span>开头的端口(如<span class="token6">3306</span>) 情况:在北京时间 <span class="token6">9</span><span class="token3">:</span><span class="token6">00</span><span class="token1">~</span><span class="token6">18</span><span class="token3">:</span><span class="token6">00</span> 效果:禁止 操作:流出 主体:任何 资源:任何 情况:任何 ``` ``` 一个请求会逐条匹配策略,如果没有匹配到策略,则返回默认效果,默认效果可以根据场景定制,可以是默认拒绝或是默认允许。另外,匹配方式也可以根据场景定制,可以使用**逐条顺序匹配**,匹配到策略直接返回。也可以使用**完全匹配**,匹配所有的策略,如果有一个拒绝(允许),则拒绝(允许)。 阿里云的RAM访问控制运用的就是ABAC模型: ``` <pre class="calibre10">``` 阿里云RAM策略配置表 <span class="token3">{</span> <span class="token2">"Version"</span><span class="token3">:</span> <span class="token2">"1"</span><span class="token3">,</span> <span class="token2">"Statement"</span><span class="token3">:</span> <span class="token3">[</span><span class="token3">{</span> <span class="token2">"Effect"</span><span class="token3">:</span> <span class="token2">"Allow"</span><span class="token3">,</span> <span class="token2">"Action"</span><span class="token3">:</span> <span class="token3">[</span><span class="token2">"oss:List*"</span><span class="token3">,</span> <span class="token2">"oss:Get*"</span><span class="token3">]</span><span class="token3">,</span> <span class="token2">"Resource"</span><span class="token3">:</span> <span class="token3">[</span><span class="token2">"acs:oss:*:*:samplebucket"</span><span class="token3">,</span> <span class="token2">"acs:oss:*:*:samplebucket/*"</span><span class="token3">]</span><span class="token3">,</span> <span class="token2">"Condition"</span><span class="token3">:</span> <span class="token3">{</span> <span class="token2">"IpAddress"</span><span class="token3">:</span> <span class="token3">{</span> <span class="token2">"acs:SourceIp"</span><span class="token3">:</span> <span class="token2">"42.160.1.0"</span> <span class="token3">}</span> <span class="token3">}</span> <span class="token3">}</span><span class="token3">]</span> <span class="token3">}</span> ``` ``` 复制 ABAC可以发挥权限系统最大的灵活性,但在灵活的同时,如果不对策略加以管理,也有可维护性的问题。