身份与访问管理(IAM)

IAM 在安全架构里有多重要?这么说吧,每次有数据泄露的新闻,你去翻根因,十有八九都能在 IAM 上找到突破口。我从做安全的第一天就被告知:身份就是新的边界。你想想看,防火墙能挡住外网攻击,但挡不住一个员工的弱口令被猜到。

这章我会把自己踩过的坑、总结的套路都抖出来。咱们从四个块聊:身份生命周期、认证机制、授权模型、还有 LDAP/AD 集成。嗯,下面这张图先把整体脉络捋清楚。

身份与访问管理(IAM)知识框架 IAM 核心引擎 身份生命周期管理 创建 → 变更 → 禁用 → 删除 认证机制 口令 / MFA / SSO 授权模型 RBAC / ABAC LDAP / AD 集成 统一用户目录 📌 四块相互关联, 缺一个都可能出大问题

1. 身份生命周期管理

说白了,就是管一个人从进公司到离开公司的全过程。很多公司只做到了“入职加账号,离职删账号”,但中间的变更呢?转岗、晋升、权限调整……我在项目里见过最离谱的事:一个员工调了三个部门,权限还挂着老部门的数据库访问权。结果某天他好奇,把老数据导出来发到了外部论坛——虽然是无意,但合规事故是实打实的。

我建议你把生命周期拆成四个阶段:

  • 创建(Provisioning):HR 系统触发,同步到 IAM。要自动化的,别手动建。
  • 变更(Modification):岗位变化时自动触发权限重审。我习惯加一个“90天无访问自动回收”规则。
  • 禁用(Disable):离职当天立即禁用账号,不是删除——万一有审计追溯需求呢。
  • 删除(Deprovisioning):保留 30 天后彻底删除,所有关联权限一并清掉。
实战经验:我曾经在一个金融项目里用身份治理与管理员(IGA)工具做自动化。最值得投入的是“继承规则”——比如新员工默认加入“所有员工组”后,再根据部门标签自动附加角色。这能省掉 80% 的手工操作。

2. 认证机制:你真的相信口令吗?

口令是最古老的认证方式,但也是最容易被攻破的。2023 年 Verizon 数据泄露报告里,超过 60% 的入侵都跟弱口令或撞库有关。我个人习惯是:能不用口令就尽量不用,实在要用,必须叠 MFA。

2.1 口令策略

别再要求“必须包含大小写+数字+特殊字符,还每 90 天强制换一次”了。NIST 在 2023 版指南里已经明确:口令长度比复杂度重要。8 位随机字符的安全复杂度,不如一个 15 位的短语。

我推荐的做法:

  • 最小长度 12 位
  • 不强制定期更换,除非怀疑泄露
  • 启用密码黑名单(禁止常见弱口令)
  • 支持 Passkey 或硬件安全密钥的优先

2.2 MFA:多因子不是终点

MFA 现在基本是标配。但注意,短信验证码其实不算安全——SIM 卡劫持太常见了。我倾向于:

  • 首选:FIDO2/WebAuthn 硬件密钥
  • 次选:TOTP(基于时间的一次性密码,比如 Google Authenticator)
  • 底线:推送通知(并且要求用户看清楚地点)
曾经踩过的坑:我为客户部署 MFA 时,一开始允许了用户选择“记住此设备 30 天”。结果大量用户在家用电脑上勾选,然后设备丢失……安全策略一旦给“方便”留太多口子,就等于没防。我的教训:敏感操作(改密、加金)必须每次都重新认证,不能跳过。

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))
注意:LDAP 绑定密码要以密文存储,并且定期轮换。我曾经发现一个项目的 LDAP 绑定密码写死在配置文件里,而且明文存储在 git 仓库……这等于把整个 AD 的钥匙拱手送人。正确做法:用密钥管理服务(Vault 或 AWS Secrets Manager)动态获取。

4.3 AD 域的架构考量

如果公司有多个域林(Forest),集成复杂度会陡增。我建议:

  • 统一用全局目录(Global Catalog)查询跨域用户
  • 避免跨域信任配置过于复杂,能用云 IdP 就上云
  • 注意 AD 的 LDAP 查询性能:不要直接用 sAMAccountName 做模糊匹配,用 indexed 属性

最后说一句:IAM 不是一次性地做完就完了。你需要持续监控、定期审计,并且跟上新的威胁模型。嗯,这一块内容其实挺多的,但今天能把这四个核心模块讲透,你应该就能在项目中踩对第一脚了。