TL;DR: Workers 中的机密管理遵循分层方法:用于开发环境的本地
.dev.vars,用于生产环境的wrangler secret,以及用于访问的类型化环境变量。本指南涵盖了机密生命周期、轮换策略和安全最佳实践。
简介
每个 SaaS 应用程序都会使用机密信息:API 密钥、数据库凭据、加密密钥。泄露机密是最常见的安全漏洞之一。Workers 提供了一个简明直接的机密管理系统。有关保障 SaaS 安全的全面概述,请参阅我们的 SaaS 安全最佳实践 指南。
机密管理分层
| 层级 | 本地开发 | 预发环境 | 生产环境 |
|---|---|---|---|
| 存储 | .dev.vars | wrangler secret put | Cloudflare Dashboard |
| 访问 | 文件系统 | CLI | Dashboard UI |
| 轮换 | 手动 | wrangler secret put | Dashboard |
| 审计 | 无 | CLI 历史记录 | Dashboard 审计日志 |
设置机密
# 本地开发
echo "STRIPE_SECRET_KEY=sk_test_xxx" >> .dev.vars
# 生产环境
wrangler secret put STRIPE_SECRET_KEY
# 命令行将安全地提示输入值
# 从 .env 批量导入机密
wrangler secret bulk .env.production
类型安全的机密访问
export const processPaymentFn = createServerFn({ method: 'POST' })
.handler(async ({ context }) => {
const stripeKey = context.env.STRIPE_SECRET_KEY as string
const stripe = new Stripe(stripeKey)
// 处理支付...
})
最佳实践
- 永远不要在源代码中硬编码机密
- 在本地开发中使用
.dev.vars(已加入 gitignore) - 每 90 天轮换一次机密
- 为不同环境使用不同的机密
- 定期审计机密访问记录
- 永远不要在日志中输出机密值
结论
Workers 的机密管理系统简单却非常有效。在生产环境中使用 wrangler secret,在开发环境中使用 .dev.vars,并将所有机密视为服务端函数(server functions)中的类型化环境变量。要深入了解 TanStack Start 中的环境变量配置,请查看我们的环境变量指南。对于企业级高级机密管理,请参阅 使用 Vault 进行机密管理。