3. 身份认证与访问控制(IAM):多因素认证(MFA)、基于角色的访问控制(RBAC)、最小权限原则
聊到跨境做市系统的安全,我第一个想到的就是「门锁」。你想想看,一个交易系统每天处理几亿甚至几十亿的资金流动,如果门锁不牢,那后果不堪设想。身份认证与访问控制(IAM),说白了就是给系统装上一套靠谱的门禁系统。
我个人习惯把 IAM 拆成三个层次来看:你是谁(认证)、你能干什么(授权)、你只能干必要的(最小权限)。这三个层次缺一不可,而且必须层层递进。
3.1 多因素认证(MFA):别只靠一把钥匙
我记得刚入行那会儿,很多系统还停留在「用户名+密码」的单一认证方式。那时候我就觉得不踏实——密码太容易被攻破了。后来在跨境做市项目中,我坚持必须上 MFA。
MFA 的核心逻辑很简单:至少使用两种不同类型的认证因子。常见的因子分三类:
- 你知道的:密码、PIN码、安全问题答案
- 你拥有的:手机(短信验证码)、硬件令牌、U盾
- 你本身的:指纹、人脸、虹膜
在跨境做市系统里,我建议至少组合「你知道的」和「你拥有的」两种因子。举个例子:
// 伪代码:MFA 认证流程示例
function authenticateUser(username, password, totpCode) {
// 第一步:验证密码(你知道的)
if (!verifyPassword(username, password)) {
return "密码错误";
}
// 第二步:验证 TOTP 动态码(你拥有的)
if (!verifyTOTP(username, totpCode)) {
return "动态码无效";
}
// 第三步:记录审计日志
auditLog(username, "MFA_AUTH_SUCCESS", getClientIP());
return "认证成功,生成会话令牌";
}
3.2 基于角色的访问控制(RBAC):给每个人贴个标签
认证通过之后,接下来就是授权。RBAC 是我最常用的授权模型,没有之一。为什么?因为它简单、直观、好管理。
RBAC 的核心思想是:不直接给用户分配权限,而是给角色分配权限,再把用户分配到角色里。你想想看,一个做市系统里可能有几十种操作权限,如果每个用户单独配,那运维人员得疯掉。
我一般会把跨境做市系统的角色分成这么几类:
| 角色名称 | 权限范围 | 典型用户 |
|---|---|---|
| 交易员 | 查看行情、提交订单、撤销订单 | 前台交易人员 |
| 风控员 | 查看所有订单、设置风控阈值、冻结账户 | 风险管理团队 |
| 审计员 | 查看所有日志、导出报表 | 合规与审计部门 |
| 系统管理员 | 用户管理、角色管理、系统配置 | IT 运维团队 |
这里有个坑,我曾经踩过。一开始我把「查看所有订单」的权限同时给了风控员和审计员,后来发现审计员能看到交易员的个人信息,这其实是不合规的。所以 RBAC 的粒度一定要细,权限要精确到「能看什么字段」这个级别。
3.3 最小权限原则:给得少,错得少
最小权限原则,说白了就是「够用就好」。一个交易员只需要下单和撤单的权限,你就不该给他配置风控参数的权限。这个道理听起来简单,但实际落地时很容易走样。
我见过不少系统,一开始权限控制做得挺好,但时间一长,各种「临时权限」越堆越多,最后变成了「最大权限」。嗯,这里要注意,权限的「膨胀」是安全的大敌。
在跨境做市系统里,我一般会这样落地最小权限原则:
- 默认拒绝:所有权限默认关闭,只有明确授权才开放
- 按需申请:用户需要某个权限时,必须提交申请并说明理由
- 定期审计:每季度检查一次所有用户的权限,清理不必要的授权
- 临时权限自动过期:临时权限设置有效期,到期自动回收
举个例子,一个交易员需要临时查看某个风控报表,正确的做法是:
// 临时权限授予示例
function grantTemporaryPermission(userId, permissionId, durationHours) {
// 记录授权原因
var reason = getApprovalReason(userId, permissionId);
// 设置过期时间
var expireTime = Date.now() + durationHours * 3600 * 1000;
// 写入权限缓存
tempPermissionCache.set(userId + ":" + permissionId, {
expireAt: expireTime,
reason: reason,
grantedBy: getCurrentAdmin()
});
// 发送通知
notifyUser(userId, "您已获得临时权限,将于 " + new Date(expireTime) + " 过期");
}
3.4 三者如何协同工作?
MFA、RBAC、最小权限原则,这三者不是孤立的。我习惯把它们串成一条链路:
- MFA 负责第一道门:确认「你是谁」
- RBAC 负责第二道门:确认「你能进哪个房间」
- 最小权限 负责第三道门:确认「你在房间里能碰哪些东西」
下面这张图是我自己总结的 IAM 三层防护模型,你可以看看:
你看,这三层就像三道防线。第一层防住外部攻击,第二层规范内部权限,第三层把权限精确到最小范围。少了任何一层,整个安全体系都会有漏洞。
最后说一句,IAM 不是一次性的工作。用户会变、角色会变、业务需求也会变。定期 review 权限配置,及时清理僵尸账号和过期权限,这应该成为运维团队的常规操作。嗯,安全这件事,永远在路上。