身份与访问管理(IAM)
IAM 在安全架构里有多重要?这么说吧,每次有数据泄露的新闻,你去翻根因,十有八九都能在 IAM 上找到突破口。我从做安全的第一天就被告知:身份就是新的边界。你想想看,防火墙能挡住外网攻击,但挡不住一个员工的弱口令被猜到。
这章我会把自己踩过的坑、总结的套路都抖出来。咱们从四个块聊:身份生命周期、认证机制、授权模型、还有 LDAP/AD 集成。嗯,下面这张图先把整体脉络捋清楚。
1. 身份生命周期管理
说白了,就是管一个人从进公司到离开公司的全过程。很多公司只做到了“入职加账号,离职删账号”,但中间的变更呢?转岗、晋升、权限调整……我在项目里见过最离谱的事:一个员工调了三个部门,权限还挂着老部门的数据库访问权。结果某天他好奇,把老数据导出来发到了外部论坛——虽然是无意,但合规事故是实打实的。
我建议你把生命周期拆成四个阶段:
- 创建(Provisioning):HR 系统触发,同步到 IAM。要自动化的,别手动建。
- 变更(Modification):岗位变化时自动触发权限重审。我习惯加一个“90天无访问自动回收”规则。
- 禁用(Disable):离职当天立即禁用账号,不是删除——万一有审计追溯需求呢。
- 删除(Deprovisioning):保留 30 天后彻底删除,所有关联权限一并清掉。
2. 认证机制:你真的相信口令吗?
口令是最古老的认证方式,但也是最容易被攻破的。2023 年 Verizon 数据泄露报告里,超过 60% 的入侵都跟弱口令或撞库有关。我个人习惯是:能不用口令就尽量不用,实在要用,必须叠 MFA。
2.1 口令策略
别再要求“必须包含大小写+数字+特殊字符,还每 90 天强制换一次”了。NIST 在 2023 版指南里已经明确:口令长度比复杂度重要。8 位随机字符的安全复杂度,不如一个 15 位的短语。
我推荐的做法:
- 最小长度 12 位
- 不强制定期更换,除非怀疑泄露
- 启用密码黑名单(禁止常见弱口令)
- 支持 Passkey 或硬件安全密钥的优先
2.2 MFA:多因子不是终点
MFA 现在基本是标配。但注意,短信验证码其实不算安全——SIM 卡劫持太常见了。我倾向于:
- 首选:FIDO2/WebAuthn 硬件密钥
- 次选:TOTP(基于时间的一次性密码,比如 Google Authenticator)
- 底线:推送通知(并且要求用户看清楚地点)
2.3 SSO:单一登录,但要小心金库效应
SSO 用户体验确实好——一次登录,所有应用通。但你要知道,SSO 是一个单点故障。如果 IdP(身份提供者)被拿下,攻击者就能控制所有关联应用。我建议:
- SSO 的 IdP 必须启用 MFA,管理员登录更是要硬件密钥
- 关键应用(财务、代码仓库)额外加一层应用级 MFA
- 使用 OAuth 2.0 + OIDC 标准协议,别自己造轮子
3. 授权模型:谁可以干什么
认证通过之后,接下来就是授权——决定这个人能看到多少数据、操作哪些功能。最常用的两个模型:RBAC 和 ABAC。
| 特性 | RBAC(基于角色) | ABAC(基于属性) |
|---|---|---|
| 核心 | 用户 → 角色 → 权限 | 用户属性 + 资源属性 + 环境条件 → 策略 |
| 粒度 | 粗(按角色分组) | 细(可到字段级别) |
| 动态性 | 低,角色变更需管理员操作 | 高,策略引擎实时计算 |
| 复杂度 | 低,容易理解 | 高,需要属性字典和策略引擎 |
| 典型场景 | 大部分企业应用 | 金融风控、医疗数据隔离 |
我个人的选择标准:如果部门固定、权限变化少,就用 RBAC,简单可靠。如果业务需要基于时间、地点、设备、数据分类做判断,那就得上 ABAC。举个例子:一个客户经理只有在工作时间(9-18点)在公司内网才能查看客户手机号,下班回家就不行——这个用 RBAC 很难定义,ABAC 一行策略就搞定。
4. LDAP/AD 集成实践
大部分企业的身份目录就是 Active Directory(AD)或者开源的 OpenLDAP。IAM 系统要跟它们做集成,核心就两件事:同步人员和认证委托。
4.1 同步策略
千万别搞成“全量同步”!我在项目中见过一个坑:每天夜里全量同步 10 万用户,网络带宽打满,同步时间超过半小时,还经常失败。正确的做法是增量同步:
- 使用 LDAP 的 USNChanged 或 DirSync 控制
- 只同步最近变更的条目
- 频率可以做到分钟级(比如 5 分钟一次)
- 加上一次全量校验(比如每周一次)
4.2 认证委托
我建议把认证操作委托给 LDAP/AD,而不是把用户密码存在 IAM 本身的数据库里。这样密码策略由 AD 统一管理,IAM 只负责接收“验证成功/失败”的结果。配置示例(OpenLDAP 绑定):
# ldap.conf 中的认证配置
URI ldap://ldap.example.com:389
BASE dc=example,dc=com
BINDDN cn=admin,dc=example,dc=com
BINDPW secret
TIMEOUT 5
# 搜索用户过滤条件
SCOPE sub
FILTER (&(objectClass=user)(sAMAccountName=%s))
4.3 AD 域的架构考量
如果公司有多个域林(Forest),集成复杂度会陡增。我建议:
- 统一用全局目录(Global Catalog)查询跨域用户
- 避免跨域信任配置过于复杂,能用云 IdP 就上云
- 注意 AD 的 LDAP 查询性能:不要直接用 sAMAccountName 做模糊匹配,用 indexed 属性
最后说一句:IAM 不是一次性地做完就完了。你需要持续监控、定期审计,并且跟上新的威胁模型。嗯,这一块内容其实挺多的,但今天能把这四个核心模块讲透,你应该就能在项目中踩对第一脚了。