数据主权正在把云原生架构从“选区域”推向“控权限”

2026-07-03 36 预计阅读时间: 1 分钟
来源: cncf.io AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:8 分钟

数据主权过去常被简化成一个下拉框:把工作负载部署到某个国家或地区的云区域,数据就算“留在本地”。但真正的问题并不只是服务器摆在哪里,而是谁有法律、运营或技术能力被要求交出数据。这个变化正在重塑云原生基础设施设计:架构师需要同时考虑地理位置、控制平面、加密密钥、运维权限、审计链路和跨境依赖。

主权不只是机房位置

传统云原生设计喜欢把“区域”当作合规边界:数据库在本国区域,备份也在本国区域,访问入口走本地负载均衡器。这仍然重要,但已经不够。

更关键的问题包括:

  • 云厂商的控制平面是否在境外运行?
  • 谁能访问快照、日志、备份和对象存储?
  • 加密密钥由客户、云厂商还是第三方托管?
  • 支持工程师是否可以跨境进入生产环境排障?
  • IaC、CI/CD、监控、告警和工单系统是否把敏感元数据发到境外?

换句话说,数据主权从“数据驻留”升级成了“可被强制访问面的治理”。如果一个境外主体可以通过控制平面、密钥服务或运维通道间接拿到数据,那么单纯选择本地区域并不能消除风险。

云原生架构要重新画边界

在 Kubernetes、服务网格、托管数据库和多云平台普及之后,数据路径变得更分散。应用容器可能在本地集群里,镜像仓库、CI Runner、日志平台、APM SaaS、备份控制器却在另一个司法辖区。

因此,主权架构通常要从几个层面拆开设计:

  • 数据平面:业务数据、文件、数据库、缓存、消息队列实际存放和流动的位置。
  • 控制平面:谁能创建资源、读取配置、导出快照、修改路由和访问策略。
  • 密钥平面:加密密钥在哪里生成、谁能轮换、谁能解封。
  • 运维平面:管理员、SRE、供应商支持人员如何登录、审计和提权。
  • 可观测平面:日志、指标、Trace 是否包含个人数据、租户 ID、IP、请求体或业务字段。

一个常见改造方向是:业务数据留在受监管环境,控制权限尽量本地化,密钥由客户控制;跨境系统只接收脱敏、聚合或不可逆处理后的数据。

可以这样实践:用策略阻止敏感工作负载跨区域部署

下面是一个可以改造的 Kubernetes 示例:用命名空间标签标记主权边界,再用 Kyverno 策略阻止带有敏感标记的工作负载部署到非本地主权节点池。假设你的节点已经用 topology.kubernetes.io/region 标注区域,例如 eu-central-sovereign

先创建一个命名空间:

apiVersion: v1
kind: Namespace
metadata:
  name: payments-prod
  labels:
    data.sovereignty/class: regulated

再应用一条 Kyverno 策略:

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: require-sovereign-region-for-regulated-data
spec:
  validationFailureAction: Enforce
  background: true
  rules:
    - name: regulated-workloads-need-sovereign-node-selector
      match:
        any:
          - resources:
              kinds:
                - Deployment
              namespaceSelector:
                matchLabels:
                  data.sovereignty/class: regulated
      validate:
        message: "Regulated workloads must target the sovereign region node pool."
        pattern:
          spec:
            template:
              spec:
                nodeSelector:
                  topology.kubernetes.io/region: eu-central-sovereign

应用方式:

kubectl apply -f namespace.yaml
kubectl apply -f sovereign-policy.yaml

然后,一个缺少本地区域 nodeSelector 的 Deployment 会被拒绝。可以这样修正:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: payments-api
  namespace: payments-prod
spec:
  replicas: 2
  selector:
    matchLabels:
      app: payments-api
  template:
    metadata:
      labels:
        app: payments-api
    spec:
      nodeSelector:
        topology.kubernetes.io/region: eu-central-sovereign
      containers:
        - name: app
          image: nginx:1.27
          ports:
            - containerPort: 80

这不是完整的数据主权方案,但它把一个关键原则变成了可执行控制:敏感工作负载不能只靠人工约定部署到正确位置。

还要管住密钥、日志和供应链

只限制 Pod 调度还远远不够。云原生系统里,数据泄露面经常藏在“辅助系统”中。

可以采用这些工程做法:

  • 客户托管密钥:优先使用 Customer Managed Keys,关键场景评估外部 KMS、HSM 或 Bring Your Own Key。
  • 日志最小化:禁止把请求体、身份标识、支付字段、医疗字段写入集中日志。
  • 分区备份:备份、快照、恢复演练也必须遵守同一主权边界。
  • 本地化运维访问:生产访问通过堡垒机、Just-in-Time 权限和强审计控制。
  • 策略即代码:用 OPA、Kyverno、Terraform Policy 或云平台原生策略阻止违规资源创建。

例如,可以用一个简单的 shell 检查集群中哪些敏感命名空间缺少主权节点选择器:

kubectl get deploy -A -o json \
  | jq -r '
    .items[]
    | select(.metadata.namespace as $ns
      | $ns != "kube-system")
    | select(.spec.template.spec.nodeSelector["topology.kubernetes.io/region"] != "eu-central-sovereign")
    | [.metadata.namespace, .metadata.name, "missing sovereign nodeSelector"]
    | @tsv
  '

运行前需要安装 jq,并把 eu-central-sovereign 改成你的受控区域名称。这个检查不能替代准入控制,但适合放进 CI 或定期审计任务。

落地时的取舍清单

数据主权设计会带来成本:可用区选择变少,跨区域灾备更复杂,SaaS 工具可用性下降,运维流程也会变慢。架构上不要追求口号式“绝对主权”,而要把风险拆成可审计、可执行的控制项。

落地前可以问五个问题:

  • 数据、密钥、备份、日志和元数据分别在哪里?
  • 哪些组织或供应商能被要求交出这些内容?
  • 控制平面是否可以绕过数据平面的本地限制?
  • 跨境依赖拿到的是原始数据、脱敏数据还是聚合数据?
  • 违规部署、错误日志和越权访问能否被自动阻止或快速发现?

真正成熟的主权云原生架构,不是把所有东西搬进某个国家的机房,而是让每一条访问路径、每一把密钥、每一份副本都有明确的管辖边界和技术约束。


相关推荐