选择加密方法
基本加密
要使用单个静态密钥进行简单加密,请设置LANGGRAPH_AES_KEY 环境变量。LangGraph 将自动使用 AES 加密检查点 blob。
-
在
langgraph.json的依赖项中添加pycryptodome: -
将
LANGGRAPH_AES_KEY环境变量设置为 16、24 或 32 字节的密钥(分别对应 AES-128、AES-192 或 AES-256)。
加密 JSON 字段
要同时加密特定的 JSON 字段,请将LANGGRAPH_AES_JSON_KEYS 设置为逗号分隔的要加密的键列表:
langgraph_version、langgraph_api_version、langgraph_plan、langgraph_host、langgraph_api_url、langgraph_request_id、langgraph_auth_user_id 和 langgraph_auth_permissions。
自定义加密
需要 Agent Server 版本 0.6.22+ 和 Python SDK 版本
langgraph-sdk>=0.3.1。- 每租户密钥隔离 —— 为不同客户使用不同的加密密钥
- KMS 集成 —— 使用 AWS KMS、Google Cloud KMS 或 HashiCorp Vault 进行密钥管理、轮换和审计日志记录
- 选择性字段加密 —— 加密敏感元数据字段,同时保持其他字段可搜索
工作原理
- 配置
langgraph.json中的加密模块路径 - 定义您的加密模块,包含 blob 和 JSON 加密的处理程序
- 通过
X-Encryption-Context头 传递加密上下文(如租户 ID) - LangGraph 在存储数据前和检索数据后调用您的处理程序
配置
将您的加密模块添加到langgraph.json:
如果您从基本加密迁移过来,请保持
LANGGRAPH_AES_KEY
已配置。自定义加密处理新的写入,而现有的 AES 加密数据仍然可读。定义您的加密模块
Blob 加密(检查点)
Blob 处理程序加密检查点数据——来自图执行的序列化状态。这是一个使用 Fernet(来自cryptography 库的对称加密方案)的每租户密钥的简化示例:
ctx.metadata 字典来自 X-Encryption-Context 头,并以明文形式与加密数据一起存储,以便在解密时使用正确的密钥。
JSON 加密(元数据)
JSON 处理程序加密结构化数据,如线程元数据、助手上下文和运行 kwargs。与 blob 加密不同,您可以选择要加密哪些字段——保持某些字段未加密以用于搜索和过滤。JSON 加密注意事项
迁移注意事项:
在加密值中使用可识别的前缀或格式,以便您的解密器可以检测并跳过未加密的数据。这使您将来可以加密额外的字段,而无需重新加密现有记录。上面的示例使用了这种模式。
性能注意事项:
每键加密意味着每个字段一次加密调用。如果您的加密涉及与外部服务(例如
KMS)的往返,这可能会显著影响延迟。考虑在本地缓存数据密钥,或使用信封加密,您使用
KMS 加密本地数据密钥并将其用于多个字段。
tenant_id、owner)通常应保持未加密,用于搜索和过滤的字段也应如此。此外,某些系统管理的字段永远不会被加密:
- 资源标识符(
thread_id、run_id、assistant_id、graph_id、checkpoint_id、task_id) - 大多数以
langgraph_开头的字段(langgraph_auth_user除外) - 必需的检查点元数据(
source、step、parents、run_attempt) - 用于调度和编排的内部字段(
__after_seconds__、__request_start_time_ms__、大多数以__pregel开头的字段) - 在运行的
config中指定的运行级执行限制(max_concurrency、recursion_limit) - 在运行的
config.configurable中指定的线程 TTL 更新(ttl)
加密内容
JSON 处理程序(@encryption.encrypt.json / @encryption.decrypt.json)递归应用于以下字段:
thread.metadata、thread.valuesassistant.metadata、assistant.contextrun.metadata、run.kwargscron.metadata、cron.payloadstore.value
@encryption.encrypt.blob / @encryption.decrypt.blob)应用于检查点 blob(图执行状态)。
从认证派生上下文
无需显式传递X-Encryption-Context,可以从经过身份验证的用户派生加密上下文:
ctx.metadata。
传递加密上下文
通过X-Encryption-Context 头传递加密上下文。上下文是您定义的任意数据——您控制模式,并可以包含加密逻辑所需的任何字段(例如 tenant_id、key_version)。上下文在您的处理程序中作为 ctx.metadata 可用,并以明文形式存储以供解密时使用。
加密上下文以明文形式存储。解密时,它会自动恢复——调用者在读取时不需要传递该头。
使用 AWS Encryption SDK 的信封加密
对于 AWS 上的生产部署,请使用 AWS Encryption SDK 与 AWS KMS,或在您的云提供商中使用等效方案。此方法:- 自动处理信封加密(无需手动打包密钥)
- 提供密钥轮换和审计日志记录
- 将密文绑定到加密上下文(租户隔离)
- 在本地缓存数据密钥以避免重复的 KMS 调用、延迟和速率限制
完整示例
encryption_context 通过 KMS 在密码学上绑定到密文——如果上下文不匹配,解密将失败。上下文嵌入在密文中,因此解密处理程序不需要引用 ctx.metadata。
密钥轮换
KMS 自动处理主密钥轮换。当您在 KMS 密钥上启用自动轮换时,旧的加密数据密钥仍然可以解密,而新操作使用轮换后的密钥材料。无需重新加密现有数据。相关内容
将这些文档连接到 Claude、VSCode 等,通过 MCP
获取实时答案。

