访问控制核心目标:依据安全策略,判定主体能否对客体执行指定操作,整体流程可以概括为:标识鉴别 → 策略获取 → 决策判定 → 执行放行 / 拒绝 → 审计。下面从模型分类、通用实现框架、落地组件、典型策略模型实现方式、工程要点依次说明。
一、基础概念
主体(Subject):发起访问的实体,用户、进程、服务、API 账号
客体(Object):被访问资源,文件、数据库表、接口、容器、存储桶
权限(Action/Operation):读、写、执行、删除、查询、调用
安全策略:规则集合,描述「谁、在什么条件下、可以对什么资源、做什么操作」
二、访问控制通用实现链路(标准流水线)
身份标识与认证(Authentication) 先确认主体是谁:账号密码、证书、OIDC/JWT、AK/SK、生物识别。
认证是访问控制的前置,访问控制本身做授权(Authorization)。
属性采集 提取决策需要的全部属性:
主体属性:角色、部门、安全等级、设备标签、IP
客体属性:资源密级、归属、类型
环境属性:时间、地理位置、网络区域、终端风险状态
策略查询 向策略引擎拉取匹配该访问请求的安全策略;策略持久化在策略库。
策略决策(Policy Decision Point,PDP) 核心判断点:评估请求是否匹配策略,输出决策:
Permit / Deny / NotApplicable / Indeterminate策略执行(Policy Enforcement Point,PEP) 网关、中间件、内核、SDK、防火墙等拦截点,强制执行 PDP 结果。
PEP 是入口,PDP 是大脑,二者解耦是现代模型(XACML、OPA)的典型设计。
策略管理(Policy Administration Point,PAP) 管理员编辑、版本化、下发安全策略。
策略信息(Policy Information Point,PIP) 外部数据源,给 PDP 补充属性:LDAP、IAM、CMDB、威胁情报。
审计日志 记录请求、属性、策略、决策结果,用于追溯、合规、告警。
这套 PDP/PEP/PAP/PIP 架构,是所有标准化访问控制模型的底层实现范式。

三、主流访问控制模型 & 各自实现方式
1. DAC 自主访问控制 Discretionary Access Control
策略逻辑:资源所有者自主分配权限,所有者可以授权给其他人。
典型:Linux 文件
rwx、Windows NTFS 自主 ACL实现:
每个客体绑定 ACL(访问控制列表)
内核 / 文件系统作为 PEP;收到访问请求,匹配客体上的 ACL
策略依附资源本身,没有全局集中策略引擎
缺点:权限可流转,容易权限扩散,不适合高安全等级系统
2. MAC 强制访问控制 Mandatory Access Control
策略逻辑:系统强制统一安全标签策略,用户不能自主修改;由安全管理员集中定义安全级别(密级)。
典型:SELinux、Trusted Solaris、等保 / 涉密系统分级标记
实现:
给主体、客体都打安全标签(密级:公开 / 秘密 / 机密)
PDP 执行固定规则,例如简单安全规则(不上读)、*- 规则(不下写)
标签由系统强制绑定,用户无法自行修改标签和规则
特点:强安全、管控严格;灵活性差,策略变更成本高
3. RBAC 基于角色的访问控制 Role-Based Access Control(工业最常用)
策略逻辑:权限不直接分配给用户,分配给角色;用户分配角色,通过角色获得权限。 分为 RBAC0(基础)、RBAC1(角色继承)、RBAC2(约束:互斥角色、基数约束)、RBAC3(合并)
实现:
IAM 系统维护三张映射:用户 ↔ 角色、角色 ↔ 权限、权限 ↔ 资源操作
PEP(网关 / 应用)拿到用户身份 → 查询用户角色列表
PDP 校验:该角色是否拥有本次资源 + 操作的权限
扩展:ABAC 是 RBAC 的超集,RBAC 可以理解为只使用 “角色属性” 的 ABAC
4. ABAC 基于属性的访问控制 Attribute-Based Access Control(云原生、零信任主流)
策略逻辑:不依赖固定角色 / ACL,基于主体、客体、环境的多属性组合做动态策略判断。
零信任访问控制大多基于 ABAC 实现。
策略示例:
if user.department == "研发" AND resource.label == "测试库" AND source_ip in 内网段 AND time between 9:00-18:00: permit
else: deny
实现:
所有实体打属性标签(结构化 key-value)
策略使用类布尔表达式编写(OPA Rego、XACML、AWS IAM Policy、阿里云 RAM)
PDP 实时拉取动态属性(PIP),动态求值
优势:策略可全局统一、适配动态云资源、支持细粒度、适配零信任;策略复杂后可读性和调优成本上升
5. PBAC 基于策略的访问控制 Policy-Based Access Control
广义概念,常和 ABAC 混用;指独立、可外部化的策略引擎驱动,典型代表 OPA(Open Policy Agent),解耦业务代码和安全策略。
6. 其他
Rule-based:简单规则访问控制(防火墙 IP + 端口规则)
ReBAC 基于关系的访问控制 Relationship-Based Access Control:通过实体间关系授权(如文档的所有者、群组关系,Google Zanzibar 模型,用于多租户、共享文档场景)
四、两种典型工程化实现方案对比
方案 A:内置式访问控制(简单系统)
策略硬编码或存在数据库,在应用代码内部判断
if currentUser.roles contains "admin" and op == "write" and res == "/user":
allow
PEP、PDP 耦合在业务服务里
缺点:策略散落在各个服务,难以统一审计、统一管控、策略变更需要发版本
方案 B:外部策略引擎(OPA / XACML,安全高要求、微服务、零信任)
PEP(API 网关、Sidecar、SDK)拦截请求,把属性打包发给独立 PDP(OPA),PDP 加载 Rego 策略文件返回决策。
优势:策略集中管理、热更新、跨服务统一、可独立审计;是信创、零信任、可信数据空间常用方案

五、访问控制策略的约束与增强机制
在模型之上,安全策略还会叠加这些控制:
职责分离(SoD):互斥角色,同一个人不能同时拥有审核 + 提交权限(RBAC2 约束)
会话控制:会话绑定角色,登录时激活角色,超时回收
条件控制:时间、位置、设备风险、MFA 二次校验(ABAC 条件)
权限生命周期:自动回收、离职权限清理、临时权限(时效授权)
默认拒绝原则(默认 Deny):没有匹配策略 → 拒绝,是安全基线
六、和安全模型的关系(比如 BLP、Biba)
BLP(Bell-LaPadula,保密性模型)、Biba(完整性模型)属于安全公理模型,通常用 MAC 方式落地:
BLP:不上读、不下写,保护机密不泄露
Biba:不上写、不下读,保护数据不被篡改 它们定义安全公理,而访问控制架构(PDP/PEP)是这套公理的执行载体。
七、一句话总结
访问控制在安全策略模型里,通过身份认证前置 + PEP 拦截请求 + PDP 加载并评估安全策略(DAC/MAC/RBAC/ABAC/ReBAC)、依赖 PIP 补充属性 + 强制执行决策结果 + 审计实现;现代安全体系(零信任、云原生、可信平台)优先采用解耦的 ABAC + 独立策略引擎(OPA)实现集中化、动态可管控的安全策略。
本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。
原文链接
欢迎访问 小易撩挨踢