第五章:身份与访问管理(IAM)概论
“在数字世界中,身份是新的安全边界。”
mindmap
root((IAM 概论))
核心概念
身份 Identity
认证 AuthN
授权 AuthZ
审计 Accounting
身份类型
人类身份
机器身份
工作负载身份
架构模式
集中式
联邦式
去中心化
云 IAM
AWS IAM
Azure AD
GCP IAM
5.1 IAM 的核心概念
IAM(Identity and Access Management)是信息安全的核心支柱,回答三个基本问题:
你是谁?(身份识别 + 认证)
你能做什么?(授权)
你做了什么?(审计)
IAAA 模型
┌─────────────────────────────────────────────────────┐
│ IAAA 模型 │
├──────────────┬──────────────────────────────────────┤
│ Identification │ 身份识别:声明"我是谁" │
│ (身份识别) │ 用户名、邮箱、SPIFFE ID │
├──────────────┼──────────────────────────────────────┤
│ Authentication │ 身份认证:证明"你确实是你" │
│ (认证) │ 密码、MFA、证书、生物识别 │
├──────────────┼──────────────────────────────────────┤
│ Authorization │ 访问授权:决定"你能做什么" │
│ (授权) │ RBAC、ABAC、ReBAC、策略引擎 │
├──────────────┼──────────────────────────────────────┤
│ Accounting │ 审计记录:记录"你做了什么" │
│ (审计) │ 访问日志、操作审计、合规报告 │
└──────────────┴──────────────────────────────────────┘
5.2 认证(AuthN)vs 授权(AuthZ)
这是安全领域最重要的区分之一:
维度 |
认证(Authentication) |
授权(Authorization) |
|---|---|---|
问题 |
你是谁? |
你能做什么? |
时机 |
先于授权 |
后于认证 |
输入 |
凭证(密码、证书、Token) |
身份 + 资源 + 操作 |
输出 |
身份确认(是/否) |
权限决策(允许/拒绝) |
协议 |
OIDC、SAML、FIDO2 |
OAuth2、XACML、OPA |
数据 |
用户目录、证书库 |
策略库、关系图 |
变更频率 |
较低(身份不常变) |
较高(权限经常调整) |
请求处理流程:
┌──────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ 请求 │───▶│ 认证 │───▶│ 授权 │───▶│ 资源 │
│ │ │ 你是谁? │ │ 你能做? │ │ 访问成功 │
└──────┘ └────┬─────┘ └────┬─────┘ └──────────┘
│ 失败 │ 拒绝
▼ ▼
401 Unauthorized 403 Forbidden
常见误区
# ❌ 错误:把认证当授权
@app.get("/admin/users")
async def list_users(token: str = Depends(verify_token)):
# 只验证了 Token 有效(认证),没检查是否有管理员权限(授权)
return db.get_all_users()
# ✅ 正确:认证 + 授权
@app.get("/admin/users")
async def list_users(
user: User = Depends(verify_token), # 认证
_: None = Depends(require_role("admin")) # 授权
):
return db.get_all_users()
5.3 身份生命周期管理
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ 创建 │───▶│ 使用 │───▶│ 变更 │───▶│ 撤销 │
│ Provision │ │ Active │ │ Modify │ │ Revoke │
└──────────┘ └──────────┘ └──────────┘ └──────────┘
│ │ │ │
▼ ▼ ▼ ▼
注册/入职 日常访问 角色变更/转岗 离职/过期
分配角色 认证授权 权限调整 回收权限
初始密码 审计日志 重新认证 归档数据
人类身份 vs 机器身份
维度 |
人类身份 |
机器身份(工作负载身份) |
|---|---|---|
标识符 |
用户名、邮箱 |
Service Account、SPIFFE ID |
认证方式 |
密码 + MFA |
证书、Token、密钥 |
生命周期 |
入职到离职 |
部署到下线 |
数量级 |
数千 |
数十万到数百万 |
管理方式 |
HR 流程驱动 |
自动化(IaC) |
凭证轮换 |
90 天密码策略 |
短生命周期(小时级) |
交互方式 |
交互式登录 |
API 调用 |
身份数量的增长趋势:
┌─────────────────────────────────────────┐
│ 人类身份: ████ (数千) │
│ 服务账号: ████████████ (数万) │
│ 工作负载: ████████████████████ (数十万) │
│ API 密钥: ██████████████████████████ (数百万) │
└─────────────────────────────────────────┘
机器身份的数量已远超人类身份!
5.4 IAM 架构模式
集中式 IAM
┌──────────────────────────────────────┐
│ 集中式 IAM 服务 │
│ ┌──────────┐ ┌──────────────────┐ │
│ │ 用户目录 │ │ 策略引擎 │ │
│ │ (LDAP/AD) │ │ (RBAC/ABAC) │ │
│ └──────────┘ └──────────────────┘ │
└──────────┬───────────────────────────┘
│
┌─────┼─────┐
▼ ▼ ▼
┌────┐ ┌────┐ ┌────┐
│App1│ │App2│ │App3│
└────┘ └────┘ └────┘
优点:统一管理、一致的策略 缺点:单点故障、扩展性受限
联邦式 IAM
┌──────────┐ ┌──────────┐ ┌──────────┐
│ IdP A │ │ IdP B │ │ IdP C │
│ (Google) │ │ (Okta) │ │ (Azure AD)│
└─────┬────┘ └─────┬────┘ └─────┬────┘
│ │ │
│ 信任关系 │ 信任关系 │
▼ ▼ ▼
┌─────────────────────────────────────────┐
│ 服务提供者(SP) │
│ 接受多个 IdP 的身份断言 │
│ SAML / OIDC Federation │
└─────────────────────────────────────────┘
优点:跨组织协作、用户体验好(SSO) 缺点:信任关系管理复杂
去中心化身份(DID)
┌──────────┐ ┌──────────┐
│ 持有者 │ │ 验证者 │
│ (Holder) │ │(Verifier) │
│ │ 出示可验证凭证 │ │
│ │───────────────────▶│ │
└─────┬────┘ └─────┬────┘
│ │
│ 获取凭证 │ 验证签名
▼ ▼
┌──────────┐ ┌──────────┐
│ 签发者 │ │ 区块链/ │
│ (Issuer) │ │ DID 注册表│
└──────────┘ └──────────┘
优点:用户自主控制、隐私保护 缺点:生态不成熟、标准化进行中
5.5 云 IAM 对比
特性 |
AWS IAM |
Azure AD (Entra ID) |
GCP IAM |
|---|---|---|---|
身份类型 |
User、Role、Group |
User、Group、SP |
User、SA、Group |
策略模型 |
JSON 策略文档 |
RBAC + 条件访问 |
IAM Policy |
工作负载身份 |
IAM Role + IRSA |
Managed Identity |
Workload Identity |
联邦 |
SAML/OIDC |
SAML/OIDC/WS-Fed |
OIDC |
细粒度授权 |
IAM Policy + SCP |
Conditional Access |
IAM Conditions |
审计 |
CloudTrail |
Azure Monitor |
Cloud Audit Logs |
SPIFFE 支持 |
SPIRE Node Attestor |
SPIRE Node Attestor |
SPIRE Node Attestor |
AWS IAM 策略示例
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
],
"Condition": {
"StringEquals": {
"aws:PrincipalTag/department": "engineering"
},
"IpAddress": {
"aws:SourceIp": "10.0.0.0/8"
}
}
}
]
}
5.6 从 IAM 到零信任
传统 IAM 和零信任 IAM 的对比:
维度 |
传统 IAM |
零信任 IAM |
|---|---|---|
信任模型 |
内网可信 |
永不信任 |
认证时机 |
登录时一次 |
每次请求 |
授权粒度 |
粗粒度(角色) |
细粒度(属性+关系) |
网络依赖 |
VPN + 防火墙 |
身份驱动 |
凭证类型 |
长期密码 |
短期 Token/证书 |
设备信任 |
不考虑 |
设备健康度 |
上下文 |
静态 |
动态(时间、位置、行为) |
零信任 IAM 技术栈
┌─────────────────────────────────────────────────┐
│ 零信任 IAM 技术栈 │
├─────────────────────────────────────────────────┤
│ 身份认证层 │
│ ├── 人类身份:OIDC + MFA (Passkey) │
│ ├── 工作负载身份:SPIFFE/SPIRE │
│ └── 设备身份:MDM + 设备证书 │
├─────────────────────────────────────────────────┤
│ 访问授权层 │
│ ├── 粗粒度:RBAC (角色) │
│ ├── 细粒度:OpenFGA (关系) + OPA (策略) │
│ └── 动态:风险引擎 + 自适应策略 │
├─────────────────────────────────────────────────┤
│ 策略执行层 │
│ ├── API Gateway:认证卸载 + 速率限制 │
│ ├── Service Mesh:mTLS + AuthorizationPolicy │
│ └── 应用层:中间件 + 装饰器 │
├─────────────────────────────────────────────────┤
│ 审计与监控层 │
│ ├── 访问日志:结构化日志 + 关联 ID │
│ ├── SIEM:异常检测 + 告警 │
│ └── 合规报告:SOC 2 / ISO 27001 │
└─────────────────────────────────────────────────┘
5.7 本书技术路线图
第二部分:身份认证(AuthN)
┌──────────────────────────────────────────────┐
│ TLS → OAuth2 → OIDC → JWT → MFA → SSO │
│ "证明你是谁" │
└──────────────────────────────────────────────┘
│
▼
第三部分:访问授权(AuthZ)
┌──────────────────────────────────────────────┐
│ RBAC/ABAC/ReBAC → OpenFGA → OPA → 策略即代码│
│ "决定你能做什么" │
└──────────────────────────────────────────────┘
│
▼
第四部分:工作负载身份与零信任
┌──────────────────────────────────────────────┐
│ SPIFFE → SPIRE → WIMSE → 零信任 → Service Mesh│
│ "机器如何证明自己" │
└──────────────────────────────────────────────┘
│
▼
第五部分:实战与展望
┌──────────────────────────────────────────────┐
│ 安全框架 → API安全 → 密钥管理 → DevSecOps │
│ "如何落地实践" │
└──────────────────────────────────────────────┘
5.8 小结
本章介绍了身份与访问管理的核心概念:
IAAA 模型(识别、认证、授权、审计)是 IAM 的四大支柱
认证(AuthN)和授权(AuthZ) 是两个不同的概念,不能混淆
身份生命周期需要从创建到撤销的全流程管理
机器身份的数量已远超人类身份,需要自动化管理
IAM 架构从集中式演进到联邦式,再到去中心化
零信任 IAM 是未来趋势:永不信任、始终验证、最小权限
从下一章开始,我们将深入探讨身份认证的具体技术,从 TLS 协议开始,逐步学习 OAuth2、OIDC、JWT 等核心协议。