3、身份认证与访问控制:多因素认证、基于角色的访问控制(RBAC)、零信任架构基础

聊到通信安全,有个问题我经常被问到:「系统到底该信谁?」

说白了,身份认证和访问控制就是回答这个问题的。你想想看,一个系统如果连进门的人都认不清,那后面的加密、防火墙全是白搭。我在做安全评估的时候,见过太多公司把精力花在「防外部攻击」上,结果内部一个弱口令就全剧终了。

今天咱们就掰开揉碎,把这三个核心概念讲透。

3.1 多因素认证:别只靠一把钥匙

我记得刚入行那会儿,很多系统就靠一个密码。密码一丢,整个系统就跟没穿衣服一样。后来我参与过一个金融项目,就因为员工把密码贴在显示器上,导致内部数据泄露。从那以后,我对多因素认证(MFA)就特别执着。

多因素认证的核心逻辑,其实就一句话:
验证身份时,至少使用以下三类中的两种:

  • 你知道什么(密码、PIN码)
  • 你拥有什么(手机、硬件令牌、智能卡)
  • 你是什么(指纹、人脸、虹膜)

实战经验:我在项目中遇到过一种情况——用户觉得每次输验证码太麻烦,于是偷偷关掉了MFA。结果呢?一个月内账号被盗三次。所以我建议,MFA一定要做成「强制+优雅」的模式。比如:

  • 首次登录或更换设备时,必须MFA
  • 日常操作可以用「记住此设备30天」来降低打扰
  • 敏感操作(转账、改密)必须实时MFA

常见的MFA实现方式,我整理了一张表:

因素类型 常见实现 安全等级 用户体验
知识因素 静态密码、安全问题
持有因素 TOTP(如Google Authenticator)、短信验证码
持有因素(增强) FIDO2硬件密钥、手机推送确认
生物因素 指纹、人脸识别 中高 极高

注意:短信验证码其实没那么安全。我曾经见过一次SIM卡劫持攻击,攻击者通过补办手机卡,直接绕过了短信验证。所以现在我个人更推荐TOTP或硬件密钥。

3.2 基于角色的访问控制:别让每个人都拿着万能钥匙

身份认证搞定了,接下来就是「进门之后能干什么」。RBAC(基于角色的访问控制)是我最喜欢用的模型,没有之一。

为什么?因为它简单、直观、好管理。你想想看,一个公司几百号人,如果每个人都要单独配置权限,那运维得疯掉。RBAC的思路就是:把权限打包成角色,把人塞进角色里。

举个例子,我在一个企业内部系统里,通常会定义这么几个角色:

  • 访客:只能看公开信息
  • 普通员工:能看自己的资料、提交申请
  • 部门经理:能审批下属的申请、查看部门数据
  • 系统管理员:能配置系统、管理用户

每个角色对应一组权限。员工离职了?直接移除角色就行,不用一条条删权限。嗯,这里要注意:角色不要设计得太细。我见过有人把角色拆成「查看A表」「编辑A表」「删除A表」……最后角色数量比员工还多,那就失去RBAC的意义了。

我的习惯:角色数量控制在5-10个以内。如果超过15个,说明你的权限粒度有问题,该考虑用ABAC(基于属性的访问控制)了。

下面是一个简单的RBAC权限判断逻辑,用伪代码表示:

// 判断用户是否有权限执行操作
function checkPermission(user, operation, resource) {
    // 1. 获取用户的角色列表
    roles = getUserRoles(user.id)
    
    // 2. 遍历角色,检查是否有权限
    for (role in roles) {
        permissions = getRolePermissions(role.id)
        if (permissions.contains(operation + ":" + resource)) {
            return true
        }
    }
    
    // 3. 默认拒绝
    return false
}

3.3 零信任架构基础:永不信任,始终验证

说到零信任,我得先泼盆冷水。很多人觉得零信任是个产品,买回来装上就行。其实不是,零信任是一种思想

传统安全模型是什么?「内网是安全的,外网是危险的」。所以防火墙一围,里面的人随便跑。但现实呢?我参与过好几个安全事件调查,发现攻击者一旦进了内网,基本就是畅通无阻。这就是「信任」带来的代价。

零信任的核心原则就三条:

  1. 明确验证:每次访问都要认证,不管你在内网还是外网
  2. 最小权限:只给完成任务所需的最小权限
  3. 假设被攻破:默认网络已经被入侵,所以每个请求都要检查

为了让你更直观地理解,我画了一张零信任架构的逻辑图:

零信任架构核心逻辑 用户/设备 策略决策点 (身份+设备+上下文) 企业资源 策略引擎 (动态风险评估) 持续监控与日志 (行为分析) 反馈调整策略

这张图想表达什么?说白了,就是每一次访问请求,都要经过策略决策点的检查。这个决策点会问:你是谁?你的设备安全吗?你之前的行为正常吗?然后综合判断给不给过。

我曾经踩过一个坑:在一个零信任项目中,我们只做了「登录时验证」,但没做「持续验证」。结果攻击者利用一个合法用户的会话,在凌晨三点批量下载数据。后来我们加上了「异常行为检测」——比如半夜下载大量数据、从陌生IP登录等,都会触发二次验证或直接阻断。

3.4 三者如何协同工作?

你可能会问:MFA、RBAC、零信任,这三者到底是什么关系?

我打个比方你就明白了:

  • MFA 是「你是谁」——进门的时候查三遍身份证
  • RBAC 是「你能去哪」——根据你的工牌颜色决定能进哪个房间
  • 零信任 是「你每次进门都要查」——就算你已经在楼里了,进每个房间都要重新刷卡

在实际项目中,我通常这样组合:

  1. 用户登录时,强制MFA(至少密码+TOTP)
  2. 登录后,根据RBAC角色分配初始权限
  3. 每次访问敏感资源时,零信任策略引擎重新评估风险
  4. 如果检测到异常行为(如从异地登录),触发MFA重新验证

一个小建议:别一上来就搞全套零信任。我建议先从MFA和RBAC入手,把基础打牢。等团队和系统都适应了,再逐步引入零信任的「持续验证」和「最小权限」理念。步子迈太大,容易扯着蛋。

好了,这一章的内容就到这儿。身份认证和访问控制,说白了就是「认对人、给对权、持续查」。这三板斧砍好了,你的通信安全架构就稳了一大半。


公众号:蓝海资料掘金营,微信deep3321