惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

aimingoo的专栏
aimingoo的专栏
腾讯CDC
Y
Y Combinator Blog
L
LangChain Blog
B
Blog
U
Unit 42
P
Proofpoint News Feed
G
Google Developers Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 【当耐特】
WordPress大学
WordPress大学
月光博客
月光博客
Vercel News
Vercel News
雷峰网
雷峰网
T
The Blog of Author Tim Ferriss
MyScale Blog
MyScale Blog
大猫的无限游戏
大猫的无限游戏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
酷 壳 – CoolShell
酷 壳 – CoolShell
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
云风的 BLOG
云风的 BLOG
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 叶小钗

土法炼钢兴趣小组的算法知识备份

国密算法与国密 TLS 系列索引 【系统架构设计】架构质量属性:不只是"高可用高性能" 【系统架构设计百科】告警策略:如何避免"狼来了" 【系统架构设计】CQRS:读写分离的架构哲学 【系统架构设计】空间架构:极端扩展场景的解法 【系统架构设计】微服务架构深度审视:优势、代价与适用边界 【系统架构设计】扩展性原理:水平、垂直与对角扩展 【系统架构设计】无状态设计:扩展的第一步也是最难的一步 【系统架构设计】缓存架构:从本地到分布式的多级缓存体系 【系统架构设计】管道与过滤器:Unix 哲学的架构表达 【系统架构设计】复杂性管理:架构的核心战场 【系统架构设计】消息队列架构:异步解耦的设计与陷阱 【系统架构设计】CDN 架构:全球加速的设计原理 【系统架构设计】连接池设计:被忽视的性能杀手 【系统架构设计】弹性设计模式:熔断器、舱壁与超时 【系统架构设计】高可用设计模式:冗余、故障转移与仲裁 【系统架构设计】容量规划:从拍脑袋到数据驱动 【系统架构设计】数据库扩展:分库分表的工程实践与替代方案 【系统架构设计】SLO 工程:可靠性的量化管理 【系统架构设计】性能建模:用数学思维分析系统瓶颈 【系统架构设计】混沌工程:主动验证系统的韧性 【系统架构设计】零拷贝与内存映射:数据搬运的极致优化 【系统架构设计】线程模型:从 thread-per-request 到协程 【系统架构设计】容灾架构:多活与灾备设计 【系统架构设计】数据库性能模式:索引、查询与连接管理 【系统架构设计】数据建模:从关系范式到文档模型的真实权衡 【系统架构设计】吞吐量优化:批处理、流水线与并发模型 【系统架构设计】流处理架构:从批处理到实时的范式迁移 【系统架构设计】搜索引擎架构:倒排索引之上的系统设计 【系统架构设计】时序数据架构:监控与 IoT 的存储设计
【零信任安全架构】零信任数据安全:加密、分类与数据访问治理
Liao Tonglang · 2026-06-12 · via 土法炼钢兴趣小组的算法知识备份

零信任讨论的焦点通常在网络层(微分段、mTLS)和身份层(MFA、SPIFFE)。但攻击者的最终目标不是网络,不是身份——是数据。当网络控制和身份验证都失败时(任何安全架构都可能失败),数据本身的保护是最后一道防线。

前置阅读:零信任策略引擎

一、数据层的 Blast Radius 控制

在零信任中,每一层的 blast radius(爆炸半径)都应该被最小化。对于数据层,blast radius 不是”攻击者能访问多少服务器”,而是攻击者能读到多少条数据记录

一个常见的盲区:服务 A 的数据库凭据被泄露了——攻击者用这些凭据连接数据库后能读取多少数据?如果服务 A 只需要访问 users 表,但数据库凭据提供了 SELECT * ON *.* 权限,blast radius 就是整个数据库(可能有几百张表)。

零信任数据安全的第一个原则:数据库授权也应该是最小权限的——每个服务账号只被授予它必要的表和操作权限:

-- 不要: GRANT ALL ON database.* TO 'payment-service';
-- 要:
GRANT SELECT, INSERT, UPDATE ON payment.transactions TO 'payment-service';
GRANT SELECT ON payment.users TO 'payment-service';
-- payment-service 不能访问 payment.audit_logs,
-- 也不能访问 user_service.profiles

二、应用层加密 vs 存储层加密

存储层加密(全盘加密、LUKS/dm-crypt、AWS EBS 加密)保护的是物理介质被窃取的场景——硬盘被从数据中心偷走,数据不可读。但它不保护运行中的系统——当攻击者通过 SQL 注入或凭据泄露获得了数据库的读取权限时,数据库服务会自动解密磁盘上的数据并返回明文结果。

应用层加密(Application-Level Encryption, ALE)在数据进入数据库之前就被应用代码加密了——数据库存储的是密文,即使是数据库管理员也无法直接读取:

// 应用层加密: 在写入数据库之前加密敏感字段
encryptedSSN, _ := kms.Encrypt(ctx, user.SSN, dataKey)
db.Exec("INSERT INTO users (name, ssn_encrypted) VALUES (?, ?)", user.Name, encryptedSSN)

// 读取时解密
rows, _ := db.Query("SELECT ssn_encrypted FROM users WHERE id = ?", userID)
var encryptedSSN []byte
rows.Scan(&encryptedSSN)
plainSSN, _ := kms.Decrypt(ctx, encryptedSSN, dataKey)

应用层加密的代价很高——你不能对加密的数据做 WHERE ssn = '123-45-6789' 查询(因为相同的明文用不同的 IV 会加密为不同的密文)。解决方案是盲索引(Blind Index)——在数据旁边存储一个单向哈希,允许等值查询但不能解密:

CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(255),
    ssn_encrypted VARBINARY(256),  -- 密文
    ssn_blind_idx VARBINARY(32)    -- HMAC(ssn, blind_index_key)
);
-- 查询: SELECT * FROM users WHERE ssn_blind_idx = HMAC('123-45-6789', blind_index_key)

零信任的数据安全取舍:应用层加密提供了最强的保护(即使数据库完全被攻破,数据也不可读),但代价是查询能力受限、性能下降(每个字段的加密/解密开销)、以及密钥管理的复杂度。

三、数据分类标签

数据分类是授权决策细化的基础——不是”这个人能不能访问数据库”,而是”这个人能不能访问标记为 PII 的数据”。

数据分类标签的层级:

标签 含义 访问要求
PUBLIC 公开数据 无限制
INTERNAL 内部数据 已认证用户
CONFIDENTIAL 机密数据(财务、商业计划) 特定组 + Trusted 设备
RESTRICTED 受限数据(PII、SSN、健康记录) 特定角色 + Trusted + Step-up MFA + 审计日志

数据分类的系统化实现需要在数据创建或接收时自动打标签:

  • 数据库列级别:customers.ssnRESTRICTEDproducts.priceCONFIDENTIAL
  • 文件级别:Google Drive/Dropbox 的文件标签由数据所有者或 DLP 引擎自动设置
  • API 响应级别:API Gateway 检查响应中的字段是否包含 PII,如果有,自动在访问日志中标记

四、密钥管理的零信任化

零信任的最后一层是密钥管理——加密数据的最强形式依赖于密钥,如果密钥本身被攻击者获取,前面的所有加密都无效。

DEK 和 KEK 的分离

  • DEK(Data Encryption Key):直接加密数据的密钥。每个服务、每个数据类型、甚至是每条数据记录都可以有自己的 DEK。DEK 的生命周期与该数据同步——数据被删除时,DEK 也被销毁。
  • KEK(Key Encryption Key):加密 DEK 的密钥。KEK 存储在 KMS/HSM 中,从不离开硬件安全模块。

DEK 在应用内存中可用,但 DEK 的密文(被 KEK 加密后的 DEK)存储在数据库中与数据一起。即使数据库被完全导出,攻击者也看不到 DEK 的明文——因为 KEK 在 HSM 里,且 HSM 的访问受到严格的身份和授权控制。

KMS 的访问控制应使用零信任原则: - 每次密钥操作(加密/解密)都需要验证调用者的身份(SPIFFE ID) - 调用者只能操作它的 DEK,任何尝试解封其他服务的 KEK 的操作被拒绝 - 所有 KMS 操作写入不可篡改的审计日志

五、总结

零信任数据安全的三层结构:

  1. 数据库授权层:最小权限原则——每个服务账号只被授予必要的表和操作权限
  2. 应用加密层(可选,根据数据敏感度):应用层加密(ALE)——数据库存储的是密文
  3. 密钥管理层:DEK/KEK 分离 + KMS/HSM 强制身份验证——密钥本身是零信任保护的

三个层次独立工作——即使攻击者越过了数据库授权(通过窃取凭据),应用层加密使数据不可读。即使应用层加密的 DEK 被从内存中提取(通过内存 dump),DEK 被 KEK 包裹,而 KEK 在 HSM 中且需要独立身份验证。


下一篇:SaaS 与云原生的零信任

参考资料

  1. NIST SP 800-53. Security and Privacy Controls for Information Systems and Organizations.
  2. HashiCorp. Vault Encryption as a Service. https://developer.hashicorp.com/vault/docs/secrets/transit
  3. AWS. AWS Key Management Service Cryptographic Details.

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。

2026-06-13 · architecture / security

【身份与访问控制工程】IAM 全景:为什么这是高价值赛道

从 2020 年 SolarWinds 到 2024 年 Okta 支持系统泄露,身份基础设施的安全失败反复证明一件事:IAM 不是 IT 支撑系统,而是安全架构的承重墙。本文建立现代 IAM 的全景地图——从认证协议、令牌体系、权限模型到身份治理与平台选型,给出 5 个贯穿全系列的核心问题。

2026-06-17 · architecture / security

【身份与访问控制工程】服务身份:mTLS、SPIFFE/SPIRE 与 Workload Identity

前 9 篇讨论的都是'人'的身份——用户怎么登录、怎么验证。但微服务世界中,80% 的 API 调用是服务之间的。服务身份(Workload Identity)是整个 IAM 体系的另一半:mTLS 解决'传输层你是谁',SPIFFE/SPIRE 解决'在平台层你是谁且怎么证明',JWT Profile for OAuth 解决'我怎么拿到一个服务身份的 Token'。本文从这三条线拆解服务身份的工程实现。

2026-06-12 · architecture / security

【零信任安全架构】NIST SP 800-207 架构深度拆解:不只是 7 条原则

NIST SP 800-207 给了零信任最权威的定义,但大多数讨论只复述了 7 条原则。本文拆解 NIST 文档的完整架构模型:PEP、PDP、Policy Engine、Policy Administrator 的分工与交互协议、信任算法的三种模型、以及 NIST 有意留白留给实现者的工程决策。