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 零信任架构基础:永不信任,始终验证
说到零信任,我得先泼盆冷水。很多人觉得零信任是个产品,买回来装上就行。其实不是,零信任是一种思想。
传统安全模型是什么?「内网是安全的,外网是危险的」。所以防火墙一围,里面的人随便跑。但现实呢?我参与过好几个安全事件调查,发现攻击者一旦进了内网,基本就是畅通无阻。这就是「信任」带来的代价。
零信任的核心原则就三条:
- 明确验证:每次访问都要认证,不管你在内网还是外网
- 最小权限:只给完成任务所需的最小权限
- 假设被攻破:默认网络已经被入侵,所以每个请求都要检查
为了让你更直观地理解,我画了一张零信任架构的逻辑图:
这张图想表达什么?说白了,就是每一次访问请求,都要经过策略决策点的检查。这个决策点会问:你是谁?你的设备安全吗?你之前的行为正常吗?然后综合判断给不给过。
我曾经踩过一个坑:在一个零信任项目中,我们只做了「登录时验证」,但没做「持续验证」。结果攻击者利用一个合法用户的会话,在凌晨三点批量下载数据。后来我们加上了「异常行为检测」——比如半夜下载大量数据、从陌生IP登录等,都会触发二次验证或直接阻断。
3.4 三者如何协同工作?
你可能会问:MFA、RBAC、零信任,这三者到底是什么关系?
我打个比方你就明白了:
- MFA 是「你是谁」——进门的时候查三遍身份证
- RBAC 是「你能去哪」——根据你的工牌颜色决定能进哪个房间
- 零信任 是「你每次进门都要查」——就算你已经在楼里了,进每个房间都要重新刷卡
在实际项目中,我通常这样组合:
- 用户登录时,强制MFA(至少密码+TOTP)
- 登录后,根据RBAC角色分配初始权限
- 每次访问敏感资源时,零信任策略引擎重新评估风险
- 如果检测到异常行为(如从异地登录),触发MFA重新验证
一个小建议:别一上来就搞全套零信任。我建议先从MFA和RBAC入手,把基础打牢。等团队和系统都适应了,再逐步引入零信任的「持续验证」和「最小权限」理念。步子迈太大,容易扯着蛋。
好了,这一章的内容就到这儿。身份认证和访问控制,说白了就是「认对人、给对权、持续查」。这三板斧砍好了,你的通信安全架构就稳了一大半。
公众号:蓝海资料掘金营,微信deep3321