3. Agent身份认证机制

3.1 模块边界

身份认证是 Agent 操作权限控制的第一个安全关口,其职责是确认请求方“你是谁”。该模块位于 Agent 与权限策略引擎之间,向上承接 Agent 注册与身份申明,向下输出经过认证的身份上下文(Subject 与 Claims)。模块边界清晰:

  • 输入:Agent 携带的身份标识 + 凭证,以及可选的附带环境信息(IP、设备指纹等)。
  • 输出:认证通过的 AuthenticatedIdentity 对象,包含身份 ID、角色、属性集合以及可信等级。
  • 外部依赖:信任锚点(CA 根证书 / OIDC Issuer / 区块链锚点)、凭证存储(KMS / 硬件安全模块)。
  • 不负责:授权决策、会话管理、审计日志记录(这些由后续章节覆盖)。
核心原则:身份认证必须独立于授权,且认证结果应携带足够的可信度信息供下游策略引擎评估。

3.2 系统分层与组件职责

身份认证在 Agent 权限控制架构中处于基础层,通常分为三层:

层 组成 核心职责
身份标识层 AgentID、Subject、全局唯一标识符 为每个 Agent 分配不可变、可验证的身份标识,隔离不同 Agent 的身份空间。
凭证类型层 JWT、mTLS 证书、API Key、SPIFFE SVID 提供多样性凭证,满足不同部署环境(边缘、云、混合)的安全与性能要求。
信任锚点层 CA 根证书、OIDC Issuer 公钥、硬件信任根 决定是否信任所呈现的凭证,是认证链的最终裁决者。

组件职责明细:

  • 身份提供者(IdP):注册 Agent 身份,签发初始凭证。
  • 凭证验证引擎:接收凭证,解析并验证签名、有效期、展期策略。
  • 信任锚点存储:维护受信任的根证书或公钥列表,定期轮换。
  • 身份缓存:缓存最近认证通过的 AuthenticatedIdentity 以减少实时验证开销。
Agent 身份认证架构与信任链路 身份标识层 Agent ID / Subject 全局唯一标识 (UUID) 命名空间/租户 凭证类型层 JWT Token mTLS 证书 API Key SPIFFE SVID 信任锚点层 CA 根证书 OIDC Issuer 公钥 硬件信任根 (TPM) 凭证验证引擎 每层输出下一层的凭证/公钥

3.3 数据流 / 控制流 / 信任链路

一次典型的 Agent 身份认证流程如下:

  1. 身份注册:Agent 管理员在 IdP 中创建 Agent 身份标识,绑定公钥或预共享密钥。
  2. 凭证签发:IdP 根据可信锚点(如 CA)签发包含 Agent ID 的凭证(JWT / X.509 证书)。
  3. 认证请求:Agent 向验证引擎提交凭证,附带身份标识。
  4. 信任链验证:验证引擎逐级向上校验签名,直到信任锚点(根证书 / 公钥)。
  5. 身份输出:验证通过后,引擎构造 AuthenticatedIdentity 并缓存或直接传递给策略引擎。
最佳实践:信任锚点采用硬件安全模块(HSM)保护私钥,且公钥分发应通过安全发布通道(如 SPIFFE 工作负载 API)进行。

3.4 凭证类型选型权衡

凭证类型 安全强度 性能开销 运维复杂度 适用场景 风险点
JWT (带有密钥) 中(依赖私钥保管) 低(无状态验证) 低 云环境、短生命周期事务 密钥泄露、未及时吊销
mTLS 证书 高(双向校验) 中(TLS 握手消耗) 高(证书生命周期管理) 零信任网络、跨集群通信 证书过期导致中断、CA 被攻破
API Key 低(明文传输风险) 极低 最低 内部开发调试、低安全级别场景 泄露后难以轮换、缺乏身份绑定
SPIFFE SVID 高(X.509 或 JWT 格式、标准绑定) 中 中(需 SPIFFE 基础设施) 服务网格、容器化 Agent SPIFFE 信任域配置错误
风险警示:绝不使用静态、不过期的凭证。所有凭证应包含 exp 字段,且 Agent 必须在过期前通过带外通道刷新凭证。信任锚点若被攻破,整个认证系统将失效 – 必须实施锚点审核与轮换计划。

3.5 落地步骤

  1. 定义身份标识规范:制定 AgentID 格式(如 agent://{namespace}/{agent-name}),确保全局唯一且可审计。
  2. 部署信任锚点:搭建内部 CA 或接入外部 OIDC Provider;配置公钥存储(如 AWS Secret Manager / 本地 HSM)。
  3. 实现凭证签发服务:IdP 为每个 Agent 签发短期凭证(如 JWT 有效期为 1 小时),并支持轮换。
  4. 集成凭证验证引擎:在策略执行点前加入拦截器,校验凭证签名、有效期、撤销状态。
  5. 建立身份缓存与审计:缓存认证结果(TTL ≤ 凭证有效期),并记录每次认证的标识、时间、结果到审计日志。
# 伪代码:凭证验证引擎核心逻辑
def authenticate(agent_identity, credential):
    # 1. 解析凭证类型
    cred_type = detect_credential_type(credential)
    # 2. 获取对应信任锚点公钥
    trusted_pubkey = fetch_anchor_pubkey(cred_type)
    # 3. 验证签名与有效期
    if not verify_signature(credential, trusted_pubkey):
        raise AuthFailed("Invalid signature")
    if is_expired(credential):
        raise AuthFailed("Expired credential")
    # 4. 返回身份对象
    return AuthenticatedIdentity(agent_identity, claims=extract_claims(credential))

3.6 验收标准

  • 身份标识唯一性:系统应拒绝重复注册,相同 AgentID 在有效期内不允许第二个凭据存在。
  • 凭证有效性:所有 Agent 使用的凭证必须包含 exp 且过期时间 ≤ 24 小时(生产环境建议 ≤ 1 小时)。
  • 信任链路可审计:每次认证应记录信任锚点版本(如 CA 序列号),便于事后追溯锚点变更。
  • 失效处理:信任锚点被轮换后,旧凭证在 5 秒内应被认定为无效(通过 CRL 或在线状态检查)。
  • 性能指标:认证响应 99.9% 在 10ms 内完成(不含网络延迟),避免成为瓶颈。
关键检查点:在启用新认证机制前,先用模拟 Agent 进行端到端冒烟测试,确认身份标识、凭证、信任锚点三层均正确连接。