Hasty Briefsbeta

双语

Instrumenting Next.js with runtime secret injection

10 months ago
  • #Runtime Secrets
  • #Next.js
  • #Security
  • Next.js 14 引入了 instrumentation 特性,允许通过 `instrumentation.ts/js` 文件在应用启动时运行自定义逻辑
  • instrumentation 文件中的 `register()` 函数非常适合初始化日志、遥测或运行时密钥注入等服务
  • 通过 instrumentation 进行运行时密钥注入可以将密钥排除在代码、版本控制和构建产物之外,从而增强安全性和可移植性
  • 在 Next.js 中使用 `.env` 文件管理密钥存在安全风险和扩展性差等缺点,使用密钥管理工具是更好的替代方案
  • 演示配置包括创建 `instrumentation.ts` 文件从 Phase 等服务获取密钥,并将其注入全局作用域 (`globalThis.secrets`)
  • 可以通过 `globalThis` 全局访问密钥,或使用受控的模块本地缓存以提高安全性
  • 客户端环境变量应避免使用 `NEXT_PUBLIC_` 前缀,而应通过服务器向客户端组件传递 props 或使用上下文提供器
  • 这种方法确保密钥仅在 Node.js 运行时可用,不会不必要地暴露给客户端