1. 安全边界基础:边界、信任与最小权限
各位好,我是老赵。今天咱们开始聊安全边界。说实话,我见过太多团队一上来就搞什么入侵检测、WAF、蜜罐,结果连最基本的边界都没画清楚。你想想看,连自家院子围墙在哪儿都不知道,装再多的摄像头又有什么用?
安全边界,说白了就是一条线。线这边是我信任的,线那边是我要防的。就这么简单。但真正落地的时候,你会发现这条线画在哪儿、怎么画、画完怎么守,全是学问。
1.1 安全边界的定义
我个人的理解,安全边界就是信任的边界。它不一定是物理的防火墙,也不一定是网络拓扑上的一个节点。它可以是任何你用来区分"可信"和"不可信"的逻辑或物理分界。
举个例子。我在2018年帮一家金融科技公司做架构评审,他们的核心数据库直接暴露在应用服务器所在的网段里。我问他们:"你们的边界在哪儿?"他们指着防火墙说:"在那儿。"我又问:"那应用服务器和数据库之间呢?"他们沉默了。你看,这就是典型的边界定义不清——只画了最外层,内部全裸奔。
安全边界可以存在于多个层面:
- 网络层:防火墙、VPC、子网隔离
- 主机层:操作系统权限、容器隔离
- 应用层:API网关、身份认证、会话管理
- 数据层:加密、脱敏、访问控制
你可能会问:"这么多层,我该从哪儿开始?"我的建议是:先画最粗的那条线。把外部网络和内部网络分开,这是底线。然后逐步细化,直到每个服务、每个数据流都有明确的边界归属。
3.2 信任与不信任区域划分
好了,边界画好了,接下来要回答一个关键问题:哪些区域是可信的?哪些是不可信的?
我记得有一次给一个电商平台做安全评估,他们的架构师跟我说:"我们的内网是可信的。"我当场就笑了。内网可信?你想想看,内网里有多少开发人员、运维人员、第三方外包?每个人都有自己的笔记本、手机、U盘。你敢说这些设备全都安全?
所以,我一般把信任区域分为三个等级:
| 信任等级 | 定义 | 典型区域 | 控制强度 |
|---|---|---|---|
| 高信任 | 完全由你控制,经过严格审计 | 核心数据库、密钥管理服务 | 极高 |
| 中信任 | 部分控制,有明确访问策略 | 应用服务器、内部API网关 | 中等 |
| 低信任/不信任 | 完全不可控,默认不安全 | 公网、用户终端、第三方服务 | 最低 |
这里有个坑,我踩过。有一次我把一个第三方日志分析服务划到了"中信任"区域,觉得它只是读日志,不会有什么问题。结果对方的一个漏洞导致日志数据泄露,我们背了个大锅。从那以后,所有第三方服务,我一律按"不信任"处理。宁可过度防御,也不要心存侥幸。
下面这张图是我常用的信任区域划分模型,你可以参考一下:
1.3 最小权限原则
好,边界画好了,信任区域也分清楚了。接下来要解决的是:谁可以做什么?
最小权限原则,英文叫 Principle of Least Privilege,简称 PoLP。它的核心思想很简单:只给完成任务所需的最小权限,不多给一分一毫。
我见过太多系统,一上来就给管理员权限。开发人员要部署代码?给 root。运维要看日志?给 sudo。第三方要调接口?给全量 API Key。结果呢?一个普通员工的账号被钓鱼,整个系统就沦陷了。
最小权限原则在实践中有几个关键点:
- 角色分离:把管理员、操作员、审计员的角色分开。一个人不能既管系统又管审计。
- 临时提权:需要高权限操作时,走审批流程,临时提升权限,用完立即回收。
- 默认拒绝:所有访问请求,默认拒绝。只有明确允许的才能通过。
- 权限粒度:权限要细化到"能读不能写"、"能写不能删"的级别。
举个例子。我之前帮一个医疗系统做权限设计,他们的医生需要查看患者病历,但不需要修改。护士需要录入护理记录,但不能查看全部病历。药房需要看到用药信息,但不能看到诊断信息。你看,同样是"医疗系统"里的用户,权限需求完全不同。
下面这个表格是我常用的权限设计模板:
| 角色 | 可访问资源 | 操作权限 | 有效期 |
|---|---|---|---|
| 医生 | 患者病历、检查报告 | 读、写(仅限自己患者) | 长期 |
| 护士 | 护理记录、用药信息 | 读、写(仅限当前班次) | 班次内 |
| 药房 | 用药信息、库存 | 读、更新库存 | 长期 |
| 审计员 | 所有操作日志 | 只读 | 长期 |
| 临时运维 | 指定服务器 | sudo(需审批) | 24小时 |
最后,我想强调一点:安全边界不是静态的。系统在变,业务在变,威胁也在变。你今天画的边界,可能明天就不适用了。所以,要定期做边界审计,看看有没有新的入口、新的服务、新的数据流没有被覆盖到。
好了,这一章就到这里。记住三件事:画清楚边界、分清楚信任、管清楚权限。这三件事做好了,你的安全基础就稳了八成。