每周知识点介绍 - 权限系统实现方案

Hello, 大家好,我是小毛驴。欢迎大家来到每周知识点介绍栏目。本周我将带领大家一起来了解下业内较为成熟的权限系统设计方案,包含 ACL, DAL, MAC, RBAC, ABAC

通过本文的介绍,大家可以了解一些关于权限系统的概念,方案,还有一些在方案选型上的建议。好了,废话不多说,我们进入正题吧。

什么是权限控制

在现实场景中有些操作只能由某个特定的人或特定岗位来完成,例如对外的公章,只能由老板来在确认后使用,或者你的请假条,将由你的直属上线来进行审批。

将这些 “权限要求” 搬到信息化系统之后,就要求我们的信息化系统也能进行相应的权限控制,保证某些资源,操作只能由特定的人员,岗位来访问,操作。

权限管理模式有哪些

在 IT 届长时间的演化后,将一些权限系统设计的思路抽象化,形成了一些模式,这些模式就是:

权限方案发展历史

  • ACL
  • DAC
  • MAC
  • RBAC
  • ABAC

重要名称解释

  • Subject 实体,可指代人,群组等
  • Object 对象,需要权限才能操作的对象,有时也会用 Resources 资源替代
  • Action 操作,对 Object 进行的权限操作,有时也会用 Operation 替代
  • Permission 权限,有时也会用 Privileges
  • Group 群组,Subject 的群组
  • Role 角色,权限的群组,集合

ACL: Access Control List 访问控制列表

定义

  • Subject 能对 Object 进行 Action
  • Subject 可以是单个用户也可以是群组

示例

  1. 给张三授予文档的创建权限。

    1
    2
    3
    Subject: 张三
    Action: 创建
    Object: 文档
  2. 张三现在可以创建文档了。

DAC: Discretionary Access Control 自主访问控制

DAC

DAC 是 ACL 的一种实现,强调灵活性。纯粹的 ACL,权限由中心管理员统一分配,缺乏灵活性。为了加强灵活性,在 ACL 的基础上,DAC 模型将授权的权力下放,允许拥有权限的用户,可以自主地将权限授予其他用户。
比如,在纯粹 ACL 模型下,每次新人培训,人事总监都要通知 IT 部,将培训文档的访问权限授予新人。在 DAC 模型下,人事总监只需将文档的访问权限授予人事专员。之后,每次新人培训,由人事专员将文档的访问权限授予不同的新人。

定义

  • Subject 能对 Object 进行 Action
  • Subject 能给其他 Subject 授权

示例

  1. 给张三授予文档的创建权限。

    1
    2
    3
    Subject: 张三
    Action: 创建
    Object: 文档
  2. 张三现在可以创建文档了,并且张三可以将这个权限授予给其他人。

  3. 张三给李四授权创建文档权限。

    1
    2
    3
    Subject: 李四
    Action: 创建
    Object: 文档
  4. 李四现在可以创建文档了。

MAC: Mandatory Access Control 强制访问控制

定义

  • Subject 能对 Object 进行 Action
  • Object 能被 Subject 进行 Action
  • Subject 可以是单个用户也可以是群组

注意,MAC 中的权限控制是双向的,既要确认用户是否有对资源的操作权限,也要确定资源是否能被这个用户进行操作的权限。适合保密程度要求高的场景。

示例

  1. 给张三授予文档的创建权限。

    1
    2
    3
    Subject: 张三
    Action: 创建
    Object: 文档
  2. 将文档的被创建权限授权给张三。

    1
    2
    3
    Subject: 文档
    Action: 被创建
    Object: 张三
  3. 张三现在可以创建文档了。

RBAC: Role-Based Access Control 基于角色的访问控制

RBAC

定义

  • Subject 拥有一个角色 , 这个角色拥有对 Object 进行 ActionPermission
  • 具体的权限设计可以实现 MAC 或者 DAC
  • 结构(Subject or Group) - Role - Permission - Object
  • 核心概念
    • Subject
    • Role
    • Permission
    • Operation

群组 Group VS 角色 Role

  • Group: 实体的集合
    • 张三,张四,张五都是张家人。(张家是一个群组)
  • Role: 权限的集合
    • 文档管理员是一个角色,可以对文档进行查阅,编辑,创建。
    • 角色可以分配给实体或者群组,例如将文档管理员分配给张家人,或者分配给张三。

示例

  1. 设备权限集合名叫编辑文档(write articel)管理文档(manage articel)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Permission:
    - Name: write article
    - Operations:
    - Object: Article
    Action: Created
    - Object: Article
    Action: Updated
    - Object: Article
    Action: Read
    - Name: manage article
    - Operations:
    - Object: Article
    Action: Delete
    - Object: Article
    Action: Read
  2. 新建一个角色叫写手(Writer),给它绑定编辑文档(write articel) 权限;一个角色叫管理员 , 给它绑定管理权限;再新建一个 CEO 角色,它拥有所有权限。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Role:
    - Name: Writer
    Permissions:
    - write article
    - Name: Manager
    Permissions:
    - manage article
    - Name: CEO
    Permissions:
    - write article
    - manage article
  3. 给张三绑定写手(Writer) 角色

  4. 张三现在可以创建,修改,读取文档了

    1
    2
    3
    Subject: 张三
    Roles:
    - Writer
  5. 给李四绑定管理员角色

    1
    2
    3
    Subject: 李四
    Roles:
    - Manager
  6. 李四现在可以读取,删除文档了

  7. 给王五绑定 CEO 角色

    1
    2
    3
    Subject: 王五
    Roles:
    - CEO
  8. 王五现在可以读取,创建,修改,删除文档了

ABAC: Attribute-Based Access Control 基于属性的访问控制

ABAC

定义

  • 拥有 xx 属性的 Subject 在 xx 环境属性 Environment 的约束下可以对 xxx 的 Object 进行 Action
  • 概念:
    • 主要策略:规定哪些属性的主体可以对哪些属性的资源在哪些属性的情况下进行哪些操作
    • 属性:
      • Subject
        • age, clearance, department, role, job title.
      • Action
        • read, delete, view, approve
      • Resouce
        • the object type (medical record, bank account…), the department, the classification or sensitivity, the location
      • Contextual (environment)
        • attributes that deal with time, location or dynamic aspects of the access control scenario
    • 实现标准

示例

张三作为销售部门写手,可以在 2022-01-012022-12-31 期间,对归属于科技,软件草案文档进行创建和更新.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Subject:
Name: 张三
Department: 销售
Role: Writer
Action:
- create
- update
Resource:
Type: Article
Tag:
- technology
- software
Mode:
- draft
Contextual:
Location: 上海
StartTime: 2022-01-01
EndTime: 2022-12-31

AWS 和阿里的资源管理策略都是使用 ABAC

  • 阿里

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    {
    "Version": "1",
    "Statement":
    [{
    "Effect": "Allow",
    "Action": ["oss:List*", "oss:Get*"],
    "Resource": ["acs:oss:*:*:samplebucket", "acs:oss:*:*:samplebucket/*"],
    "Condition":
    {
    "IpAddress":
    {
    "acs:SourceIp": "42.160.1.0"
    }
    }
    }]
    }
  • AWS

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Effect": "Allow",
    "Action": [
    "ec2:TerminateInstances"
    ],
    "Resource": [
    "*"
    ]
    },
    {
    "Effect": "Deny",
    "Action": [
    "ec2:TerminateInstances"
    ],
    "Condition": {"NotIpAddress": {"aws:SourceIp": [
    "192.0.2.0/24",
    "203.0.113.0/24"
    ]}},
    "Resource": [
    "arn:aws:ec2:<REGION>:<ACCOUNTNUMBER>:instance/*"
    ]
    }
    ]
    }

ABAC 协议变种 PBAC: Policy-Based Access Control 基于策略的访问控制

和 ABAC 的区别,ABAC 使用一些 XML 的标准,但 PBAC 并未进行明确的规则限制,更加灵活一些。具体可以查阅这里

ABAC 协议变种 CBAC: Context-based access control 基于声明的访问控制

这是微软在 ABAC 基础的改版协议,具体可以查阅这里

对比

DACMACRBACABAC
灵活性非常高
实现复杂度
权限验证基础实体上绑定的权限实体和对象相对设定的要求角色上的权限属性的验证
当前使用广度非常高国内不多

总结

虽说随着时间的前景,权限管理的模式不断的在推陈出新,新模式的灵活性也越来越强,但也相应的带来了一些复杂性。在实际的生产过程中需要根据项目的实际需求来抉择使用哪一种模式。

参考资料