Lobsters | 📄 原文链接 | 2026-07-22 collected

密钥不属于配置文件:SecretSpec 分离声明与存储

source: secretspec.dev — 2026-07-20

概述

应用程序不应在配置文件中要求密码、API 密钥或令牌。配置描述行为(应入 git/代码审查),密钥授予权限(需受限访问和独立轮换)。作者审计了 NixOS 的 445 个模块:其中 110 个(25%)使用 envsubst/sed/jq 将安全获取的密钥重新嵌入配置文件——因为应用只接受配置文件输入。SecretSpec 的解决方案:secretspec.toml 声明需求,不同环境(本地 keyring/CI 环境变量/生产 1Password)各自选择提供者。

核心要点

  • NixOS 审计:445 个处理密钥的模块中,110 个(25%)被迫将密钥重新嵌入配置文件,因为应用只接受配置输入。
  • 核心设计:secretsspec.toml 声明需求(DATABASE_URL、STRIPE_API_KEY 等),各环境独立选择密钥来源。
  • 配置和密钥的耦合意味着轮换密码需要重新生成配置——不同生命周期和受众被强行绑定。
  • Cachix 实践案例:从 ~/.config/cachix/cachix.dhall 中分离 authToken 和 signingKey,通过 SecretSpec 统一管理。

金句

A quarter of the modules retrieve a secret safely, then copy it into configuration because that is the only interface the application accepts.
back to Lobsters