# 第五章:身份与访问管理(IAM)概论 > "在数字世界中,身份是新的安全边界。" ```{mermaid} mindmap root((IAM 概论)) 核心概念 身份 Identity 认证 AuthN 授权 AuthZ 审计 Accounting 身份类型 人类身份 机器身份 工作负载身份 架构模式 集中式 联邦式 去中心化 云 IAM AWS IAM Azure AD GCP IAM ``` ## 5.1 IAM 的核心概念 IAM(Identity and Access Management)是信息安全的核心支柱,回答三个基本问题: 1. **你是谁?**(身份识别 + 认证) 2. **你能做什么?**(授权) 3. **你做了什么?**(审计) ### 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 ``` ### 常见误区 ```python # ❌ 错误:把认证当授权 @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 策略示例 ```json { "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 等核心协议。