第五章:身份与访问管理(IAM)概论

“在数字世界中,身份是新的安全边界。”

        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

常见误区

# ❌ 错误:把认证当授权
@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 等核心协议。