下载工作台
企业级架构运维

安全架构:认证鉴权与零信任

试读上半部分 · 解锁后可读全文

第 6 章 · 安全架构:认证鉴权与零信任

本章讲解企业级 安全纵深防御:身份认证、授权模型、网络隔离、密钥管理、常见漏洞防护与审计合规。

前置:PaaS Keycloak(ch14);网关 ch12;架构第 1 章 NFR 安全项。


6.1 安全纵深防御

互联网
  │
  ▼
┌─────────────┐   ┌─────────────┐   ┌─────────────┐   ┌─────────────┐
│ WAF / DDoS  │──►│ 网关鉴权    │──►│ 服务间认证  │──►│ 数据加密    │
│ 边缘过滤    │   │ JWT/OAuth   │   │ mTLS / SA   │   │ 传输+静态   │
└─────────────┘   └─────────────┘   └─────────────┘   └─────────────┘
       │                 │                 │                 │
       └─────────────────┴─────────────────┴─────────────────┘
                         审计日志(谁、何时、何种操作)

零信任原则:不信任内网位置;每次访问验证 身份 + 设备/上下文 + 策略

层级控制目标失败假设
边缘挡扫描、CC、已知漏洞利用WAF 可被绕过
网关统一认证、粗粒度授权Token 泄露
服务细粒度数据权限网关被攻破
数据加密、脱敏、最小权限账号应用漏洞 SQL 注入
运维RBAC、审计、密钥轮换内部人误操作

6.2 认证(Authentication)

方案适用Token 生命周期小紫组件
Session + Cookie传统服务端渲染 Web服务端会话 TTLRedis Session
JWT前后端分离、微服务Access 15min + RefreshAPISIX jwt-auth
OAuth2 / OIDC第三方登录、企业 SSO依 IdPKeycloak
mTLS服务间证书有效期cert-manager

6.2.1 JWT 实践

// Access Token Payload(示例)
{
  "sub": "U10086",
  "iss": "https://auth.xiaozi.local",
  "aud": "order-api",
  "exp": 1734480000,
  "roles": ["user"],
  "scope": "orders:read orders:write"
}
规则说明反模式
短过期Access 15~30min7 天 JWT 无刷新
Refresh 轮换用后作废旧 refreshrefresh 永不过期
敏感操作二次验证/MFA仅密码改手机号
算法RS256 / ES256alg=none
存储Web:HttpOnly Cookie;移动端 KeychainlocalStorage 存长期 token
# APISIX jwt-auth 消费者(概念)
consumers:
  - username: order-api
    plugins:
      jwt-auth:
        key: order-api-key
        secret: "${JWT_SECRET}"   # 来自 Secret,非明文

行业案例 · 某社交平台:JWT 放 localStorage + 过期 30 天,XSS 后 批量账号接管。整改:HttpOnly Cookie + 15min access + 同源 CSP。


6.3 鉴权(Authorization)

模型说明适用
RBAC角色 → 权限集合后台管理、固定岗位
ABAC属性(部门、职级、数据范围)复杂组织、行级权限
ReBAC关系(用户-订单所有者)资源实例级
资源级只能操作自己的订单C 端 API 必做
请求 ──► 网关:验证 JWT 有效 + scope 粗筛
      ──► 服务:校验 resource.ownerId == jwt.sub
      ──► DB:WHERE user_id = ? 参数绑定
def get_order(order_id, current_user):
    order = repo.find(order_id)
    if not order:
        raise NotFound()
    if order.user_id != current_user.id and not current_user.is_admin:
        raise Forbidden()  # 403,非 404(避免枚举)
    return order
网关 vs 服务网关做服务必须做
认证校验 JWT 签名不信任未验签的内部头
粗授权/admin/* 需 admin 角色数据行级 owner 校验
限流IP/用户 QPS业务级配额

6.4 网络与零信任(K8s)

实践K8s 实现目标
最小暴露仅 Ingress 对外;Service 默认 ClusterIP缩小攻击面
NetworkPolicy限制 Pod 互访app 仅能连 data NS
服务账号每 Deployment 独立 SA最小 RBAC
密钥Secret + 禁止日志打印无明文 env 入 Git
Pod Securityrestricted / 非 root降容器逃逸影响
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: order-api-ingress
  namespace: app
spec:
  podSelector:
    matchLabels:
      app: order-api
  policyTypes: [Ingress, Egress]
  ingress:
    - from:
        - namespaceSelector:
            matchLabels:
              name: app
        - podSelector:
            matchLabels:
              app: apisix
      ports:
        - protocol: TCP
          port: 8080
  egress:
    - to:
        - namespaceSelector:
            matchLabels:
              name: data
      ports:
        - protocol: TCP
          port: 3306
    - to:
        - namespaceSelector:
            matchLabels:
              name: middleware
      ports:
        - protocol: TCP
          port: 6379

量化:生产 Namespace 100% 应有 NetworkPolicy(至少默认拒绝 + 白名单)。


6.5 密钥与合规

规则做法频率
不入 Git.gitignore + gitleaks 扫描每次 PR
轮换DB 密码、API Key、JWT 签名密钥季度 / 泄露即换
分级L1 公开 / L2 内部 / L3 密钥 / L4 PII标注数据地图
审计Secret 变更、管理员登录留存 ≥ 180 天

以下内容需解锁后阅读

试读已结束。解锁本章 ¥5.00,或开通年度会员畅读全部教程。
年度会员 ¥199.00/年; 小紫 AI 工作台有效会员 ¥99.00/年

正文仅在服务端鉴权后下发,未付费无法获取下半部分内容。