本文是秘管理的指南,涵盖秘密的定义、生命周期(生成、存储、分发、访问控制、轮换、撤销、销毁)、静态与动态秘密的比较、最佳实践(如不硬编码、集中存储、最小权限、自动轮换、审计等),以及DevOps/CI/CD(Kubernetes、Terraform、GitOps)、云秘密管理(AWS、GCP、Azure)和工具选择(HashiCorp Vault、Doppler、Infisical等)的详细讨论。文章强调动态秘密和短凭据对减少泄露风险的重要性,并提供了选择秘密管理工具的关键考量。

许多网络安全攻击看起来并不像精心策划的银行抢劫,而更像是用别人留在锁孔里的钥匙打开一扇门。以优步为例。2014 年,该公司遭到入侵,原因是一名工程师意外地将一个 AWS 访问密钥提交到了公共 GitHub 仓库。威胁行为者利用该密钥访问了超过 10 万名司机的个人数据。
如果像这样简单的入侵都能发生在优步身上,那么它可能发生在任何地方:像 丰田 和 梅赛德斯-奔驰 这样的传统品牌、像 美国网络安全和基础设施安全局 这样的政府机构,以及现代科技公司,都曾在 GitHub 上泄露过敏感的凭据。
这些看似是鲁莽的错误(确实如此),但它们是看似无害的捷径积累成灾难性漏洞的后果:
.env 文件发送给负责网站改版的承包商培训无法解决这个问题。人类会犯错,有时会把便利性置于安全性之上。这是一个被称为 秘密扩散 的系统性问题。
当密钥、Token、证书和其他敏感数据在环境和服务中扩散的速度超过任何团队能够追踪的速度时,就会出现秘密扩散。没有人知道存在的秘密的全部范围、谁能访问它们,或者它们带来了什么风险。用纯文本文件和 Slack 消息来存储和共享秘密,对于少量秘密来说可行(尽管不安全),但在规模上无法手动管理。
限制性的、手动执行的策略(即使可行)也会拖慢工程师的速度。“为什么这个不工作了?” 这样的日子可能会过去好几天,直到新的 API 密钥被手动分享给所有需要它的人。同样的道理也适用于非人类身份:过期的数据库凭据导致不明原因的宕机会产生操作摩擦。处理秘密的快速、便捷方式并不安全,但极度限制性的姿态会使运营陷入停滞。
这就是核心矛盾:工程师和服务需要数百到数千个秘密才能运行,这些秘密必须能够随时可用,同时绝不能冒被暴露的风险。
这就是现代秘密管理的挑战:这是一场军备竞赛,旨在先发制人地对抗威胁行为者,这些行为者配备了能够嗅探广泛使用的基础设施中尖端漏洞和十年旧漏洞的人工智能。
中心化秘密管理对于避免安全事件至关重要,如果事件确实发生,也能够在继续快速交付的同时限制其爆炸半径。
秘密管理是存储和共享秘密的实践。
每一位使用秘密的开发者、团队和公司,都以某种方式管理着秘密,即使他们从未定义过实践。
糟糕的秘密管理,在网络安全领域相当于把密码写在信用卡上。在纯文本文件中存储和共享未加密的秘密是秘密管理的一种形式,但肯定不安全。
良好的秘密管理实践包括访问控制、审计日志、加密存储和其他最佳实践。
良好秘密管理的目标是避免安全漏洞(如果确实发生,则迅速响应并限制其影响),以及避免因应用程序缺少所需内容而导致的停机。
秘密是一种敏感信息,它授予对某物的访问权限,如果泄露可能造成危害。一些常见秘密的例子:
postgres://user:password@host:5432/db。repo:admin)的Token。AKIA… 密钥、GCP 服务账号 JSON 文件、Azure 客户端密钥。在云开发时代,秘密的数量呈爆炸式增长,产生了一种称为 秘密扩散 的现象,在这种情况下,没有人能全面了解存在哪些秘密、它们在哪里以及谁有权访问它们。
这是一个关键问题,因为潜在的攻击面巨大(数百万个可能被暴露的秘密),而且秘密被泄露的后果严重(数据泄露、勒索软件攻击)。这一切使得秘密管理成为任何软件开发团队的必要任务。
因凭据泄露而导致的持续入侵,本身就有足够理由认真对待秘密管理。但法规和合规标准(包括 HIPAA、GDPR 和 SOC 2)也要求严格管理网络安全。
凭据滥用是现代入侵中最常见的初始访问向量。根据 Verizon 的 2025 年数据泄露调查报告,被盗凭据涉及了 88% 的基本 Web 应用攻击。它们出现在大约三分之一的确认泄露中。
随着像 Claude Code 这样的人工智能代理比以前编写更多的代码,代码审查资源变得紧张。这使得情况更加恶化:GitGuardian 的 2025 年秘密扩散状况 报告发现,仅在 GitHub 上硬编码的秘密数量在 2025 年大约翻了一番,而且超过 90% 的这些秘密在泄露后五天内仍然有效且可被利用。
这可能导致严重的入侵:
这些只是几个例子,但我们还能举出数百个。
关键信息是:秘密正在大规模泄露,在泄露后往往长期有效,并且不断被攻击者利用。
秘密既需要保护,又是每位工程师工作所需的工具。除了安全性之外,不佳的秘密管理实践还会在工程团队中造成运营问题并拖慢工作进度。
例如,一次预定的 秘密轮换 会中断所有部署,直到所有工程师手动替换了他们 .env 文件中的凭据。
对于拥有数千名工程师的组织来说,这可能对生产力和协作产生严重后果。
它还可能导致面向客户的宕机。当新凭据尚未传播而旧凭据已失效时,服务之间可能停止通信,从而导致应用(部分)对用户不可用。
一个被泄露的秘密也会危及该秘密有权访问的所有内容。安全团队将此称为爆炸半径:通过这一个凭据可以访问的系统、数据和操作集合。
一个 AWS IAM Token可能允许威胁行为者访问该 AWS 账户上的 EC2 实例、S3 存储桶等等。
当一个被泄露的凭据使攻击者能够访问其他凭据时,这被称为横向移动。一个被泄露的 Slack 会话Token仅授予对 Slack 的访问权限。但在私信中发现的 .env 文件可以解锁整个基础设施。
中心化秘密管理可以限制爆炸半径。动态秘密限制了泄露秘密的可用时间。最小权限访问意味着只提供必要的权限,从而阻止黑客因承包商的缺陷安全实践而获得对基础设施的管理员访问权限。
对于受监管的组织来说,秘密管理不再是可选项,这些组织涵盖的行业、公司规模和地理范围不断扩大。SOC 2、PCI DSS 4.0、GDPR、HIPAA 以及各种其他法规和合规标准,对如何授予、管理和记录对敏感系统的访问提出了各种要求。
带有审计日志的中心化保管库是满足合规要求、加强安全态势而不减慢工程团队速度的标准基础设施。
从架构上看,秘密保管库是一个带有 API 的加密数据库:你向它进行身份验证,请求你需要的特定秘密,接收返回的秘密,并且你的访问会被记录。
在底层,生产级保管库处理加密存储(使用保存在 HSM 或云 KMS 中的根密钥进行信封加密)、在颁发任何秘密之前验证工作负载身份的身份验证后端、细粒度的访问策略、用于不同凭据类型的秘密引擎、仅追加的审计日志,以及自动跟踪和撤销未结凭据的租约管理。
在实践中,这是平台、安全或 DevOps 团队进行与秘密管理相关工作的场所。在这里,他们添加和撤销秘密、定义策略、与第三方工具集成以及审计秘密使用情况。
开发者自身只访问保管库来查看他们有权访问的秘密。在实践中,开发者很少从保管库复制粘贴(在许多情况下,他们不应该能看到纯文本的秘密),而是选择通过 CLI 在运行时注入秘密。
秘密有一个可预测的生命周期。大多数安全失败发生的原因是组织管理了早期阶段(生成和存储)而忽略了后期阶段。
静态秘密在轮换之前保持不变。大多数 API 密钥、数据库密码和证书都是静态的。它们可以管理得很好,但如果被泄露,需要主动进行轮换。
动态秘密 是为特定访问请求生成的临时秘密,生命周期很短(通常只有几分钟)。
以下是数据库凭据的示例:
CREATE ROLE app_abc123 LOGIN PASSWORD 'xK9…' VALID UNTIL '+15 minutes'.DROP ROLE app_abc123。应用程序为一个真实的数据库使用了真实的凭据,但该凭据在请求之前并不存在,并且在 15 分钟后不再有效。除非它在那 15 分钟的特定窗口内泄露,否则对攻击者来说毫无用处。
大多数组织同时使用这两种方法,以保持与遗留基础设施的兼容性,并覆盖动态秘密不实用的用例(例如,气隙环境、速率限制低的 API 等)。以下是如何决定哪种方法适用于哪种情况:
| 方法 | 最适合 | 示例 |
|---|---|---|
| 秘密轮换 | 长期运行的服务、遗留系统、具有既定认证模式的第三方集成 | 使用 Lambda 函数每 30 天轮换一次 RDS 密码 |
| 动态秘密 | 临时工作负载、容器、CI/CD 管道、无服务器函数、临时开发环境 | 为每个 CI 作业生成一个唯一的 Postgres 凭据,15 分钟后自动过期 |
| 混合 | 大多数生产系统 | 对持久化数据库进行自动轮换;对每个 CI/CD 管道运行使用动态凭据 |
与动态秘密一样,自动轮换静态秘密也是一项复杂的技术操作。这可能需要高级的自定义逻辑或一个秘密管理工具。
在这两种情况下,共同的目标是一致的:任何人类都不应该知道生产凭据的当前值,并且任何凭据都不应超过其即时需要。
OWASP Secrets Management Cheat Sheet 是这里的权威参考。以下是其中最重要的部分,以及秘密管理工具如何使它们成为可能或更容易实现。
一个提交到源代码的秘密,对于对该仓库具有读取访问权限的每个人都是可访问的:包括当前和未来的员工以及承包商。在公共仓库中,是任何曾经克隆、分叉或读取过该仓库的人(包括自动凭据扫描器和 LLM 背后的训练管道)。
有各种解决方案可以在代码提交之前发现其中的秘密。你可以通过预提交Hook、CI/CD 管道扫描、IDE 插件以及针对具有已知模式的秘密的 GitHub 推送保护来强制执行这一点。
秘密扫描很重要,但正确的秘密管理策略更健壮,因为它意味着个别开发者从未知道他们正在处理的秘密,因此他们无法将其提交到 Git。
秘密应该放在一个地方,进行版本控制、审计,并通过一致的 API 访问。团队知道去哪里查找,可以在一次操作中撤销访问权限,并且没有秘密会因为开发者笔记本上的 .env 文件而“继续存活”。
每个工作负载只能获取它需要的秘密,而不是为了方便而捆绑的秘密。一个前端服务不应该拥有与数据迁移作业相同的数据库凭据。一个只读的分析工作负载不需要写权限。
一个合适的秘密管理平台通过简化工作流程的每个部分并使寻找最便捷解决方案的诱惑消失,使这变得更容易。
静态凭据应该自动轮换。这会使得任何可能无意中泄露的秘密失效,并且如果威胁行为者获得了它,它也会变得无用。
| 秘密类型 | 推荐频率 | 最佳实践 |
|---|---|---|
| 数据库密码 | 30–90 天 | 替换为动态秘密 |
| 云访问密钥(AWS、GCP、Azure) | 90 天 | 替换为工作负载身份(IRSA、WIF、Managed Identity) |
| API 密钥(第三方 SaaS) | 60–90 天 / 每季度 | 在提供商支持的情况下,使用限定作用域的短期Token |
| TLS 证书 | 到期前;自动化 | 需要 ACME 自动化 — 行业正在向 2029 年 3 月 15 日之前最长 47 天 发展 |
| SSH 密钥 | 90 天 | 替换为 SSH CA 和短期签名的证书 |
| OAuth 刷新Token | 根据 IdP 策略(通常 30–90 天) | 与限定作用域的短期访问Token配对使用 |
| 加密密钥(DEK) | 每年一次或在泄露后 | 信封加密使轮换成本很低 |
一些团队因为担心宕机而犹豫是否要自动化轮换。现代秘密管理工具通过重叠的有效期窗口来缓解这一问题:当秘密轮换时,保管库维护两个有效的秘密版本。服务继续使用当前秘密,直到它们在下次重启或凭据刷新时获取新秘密。一旦确认新凭据已传播,旧凭据才会失效。这确保了零停机。
凭据的生命周期越短,威胁行为者能用它造成的损害就越小。使用短 TTL 的数据库凭据、云 IAM 角色和内部服务认证。当动态秘密不可用时,具有自动轮换的短期Token是次优选择。
每次秘密读取、写入、轮换和撤销都必须产生一个审计事件。这应该尽可能详细,包括:
这些日志对于合规性、入侵后的重建以及异常检测是必要的。
开发、预发布和生产应该使用不同的保管库命名空间或租户,并具有不同的身份。开发者的本地秘密绝不应包含生产值。
现代软件交付链充满凭据,这在构建管道的各个系统之间的每次交接中都创造了潜在的风险面。秘密管理在这里尤其重要。
CI/CD 平台通常有一个原生的秘密功能:GitHub Actions Secrets、GitLab CI Variables、CircleCI Contexts 等。这些很方便,但却是孤立的。它们不能跨系统保护秘密,并且需要维护多个秘密存储,这与最佳实践相冲突。
现代模式是使用 CI/CD 平台的身份服务向你的保管库进行身份验证,并按需获取秘密:
CI/CD 平台中永远不存在长期有效的凭据。
Kubernetes 内置的 Secret 对象是 base64 编码的,而非加密的。任何对对象具有读取访问权限的人都可以解码 base64 字符串。默认情况下,这包括同一命名空间中的任何 Pod。在默认的集群配置中,kubectl get secret my-secret -o jsonpath='{.data.password}' | base64 -d 会向任何具有适当 RBAC 权限的人返回纯文本值。
最基本的缓解措施是使用 KMS 提供商启用 etcd 静态加密。对于生产工作负载,已确立的模式有:
Secret 对象中。唯一真实来源存在于你的保管库中;K8s 秘密是一个同步的副本。ESO 的上游开发目前已暂停,因此采用这种模式的团队通常会评估供应商维护的替代方案,例如 Infisical Kubernetes Operator,它提供相同的同步模型,但仍在积极开发中。Secret,以便加密的 YAML 可以提交到 Git;集群控制器在 apply 时解密。适合 GitOps;在轮换和动态秘密方面较弱。Terraform 存储资源状态,包括提供商返回的任何敏感值,存储在 terraform.tfstate 中。该文件是纯文本,这使得它成为一个潜在的攻击面。任何对你的状态后端具有读取访问权限的人都可以读取 Terraform 曾经接触过的每个数据库密码、生成的密钥和敏感输出。
有一些方法可以通过使用 KMS 提供商加密静态状态来缓解这个问题。你可以像锁定生产数据库一样严格地锁定状态后端的 IAM 访问权限。
但更干净的架构模式是使用 Terraform 来预配身份(一个 IAM 角色、一个服务账户、一个 Kubernetes 服务账户),并让运行时工作负载在启动时动态获取自己的凭据。这使敏感值完全脱离状态文件。
GitOps 工作流(Argo CD、Flux)将 Git 视为基础设施状态的唯一真实来源。秘密不能成为 Git 中的唯一真实来源,因为它们永远不能以纯文本形式存在于那里。
正确的模式是在 Git 中存储对秘密的引用(一个指向你保管库的 ExternalSecret CRD)而将 值 存储在保管库中。Git 提交只包含地址,不包含内容,这使实际秘密脱离了 GitOps。
三大主要云提供商都提供原生的秘密管理服务(AWS Secrets Manager、GCP Secret Manager 和 Azure Key Vault)。每个都有各自的复杂性,但共享相同的优点和缺点:
它们很方便,因为有很多第一方集成,并且是现有供应商的一部分,这意味着它们不需要通过额外的安全审查。
但是,特定于提供商的秘密管理器在扩展时会变得次优:第三方集成很困难,因为每个云都希望将客户留在自己的生态系统中。这使得多云秘密管理变得困难。使用多个提供商原生的秘密管理器会创建并行化的基础设施,这给安全团队带来了额外的工作,并且意味着没有统一的保管库。
此外,这些秘密管理器通常也按使用量定价,这激励了最小化秘密数量,从而抑制了动态秘密或频繁轮换等最佳实践。
每一个都有一些独特的特性:
一旦你遇到了提供商原生秘密管理器的限制,使用专门的秘密管理工具就有意义了。这通常发生在团队希望避免未来的供应商锁定和依赖,或者一旦你从单一云栈扩展出去。
秘密管理器通常实现以下两个功能之一:
使用像 Infisical 这样的秘密管理器可以避免因集成覆盖不均而产生的不良变通方案和自定义集成,并将所有环境的秘密管理集中到一个工具中。
秘密管理工具包括云原生服务、开源平台/SaaS 工具和闭源 SaaS 产品。选择正确的工具需要明确几个比任何功能清单都更重要的维度。
在评估具体产品之前,了解你正在查看的工具类型会有所帮助:
| 类别 | 示例 | 最适合 |
|---|---|---|
| 云原生 | AWS Secrets Manager、GCP Secret Manager、Azure Key Vault | 需求简单的单一云团队 |
| 开源/自托管 | Infisical、OpenBao、HashiCorp Vault、Conjur OSS | 需要数据主权、定制化或托管灵活性的团队 |
| 开发者优先的 SaaS | Infisical Cloud、Doppler、Akeyless | 希望零负担和良好开发者体验的团队 |
秘密管理也被认为是特权访问管理(PAM)的四大核心能力之一,PAM 将类似的控制和日志记录扩展到人类特权用户和紧急访问场景。对于大多数以开发者为中心的团队来说,PAM 和秘密管理是不同的问题,但工具有重叠。
HashiCorp Vault 是最早的秘密管理解决方案之一,其提供商 HashiCorp(HCP)于 2025 年被 IBM 收购。它是一个用于安全存储和访问秘密及其他敏感数据(例如访问Token、API 密钥、加密密钥、密码、证书)的全面工具。
Vault 的局限性在运营它的团队中已有充分记录:
云原生工具(AWS Secrets Manager、GCP Secret Manager、Azure Key Vault)是需求简单的单一云团队的正确起点。它们的核心优势是与该云生态系统的深度原生集成,核心缺点则是局限于同一生态系统。
Doppler 是一个完全闭源的秘密管理解决方案。Doppler 面向开发者,提供一个 UI 仪表板,开发者可以在其中修改静态和动态秘密值、设置权限、监控访问日志等。额外的秘密共享功能使得内部共享更容易。
但 Doppler 也有明显的缺点:
Infisical 是一个开源的数字身份安全平台,专注于开发者和工程团队。大多数团队采用 Infisical 是为了获得一流的秘密管理,包括 针对 AI 代理的专用保管库,但它也具有 证书管理 (PKI)、特权访问管理 (PAM)、秘密扫描 等功能。
这使其成为中小型市场团队的一体化解决方案,以及支持大型企业复杂性和合规性要求的理想选择。
Infisical 提供了一套端到端的工具,涵盖秘密管理的各个方面:从安全的版本控制秘密存储,到秘密轮换,到跨基础设施的集成,再到秘密扫描和泄漏预防。
Infisical 最重要的功能包括:
SaaS 提供最小的运营负担、更快的上手速度,以及供应商管理的可用性和补丁。它会在你的安全模型中引入一个第三方数据托管方,这对某些组织来说是可以接受的,但对某些组织来说是一个硬约束。它还限制了你对底层基础设施的定制程度。
自托管 给你完全的数据主权,适合气隙和受监管的工作负载,并且没有按席位计费的云依赖。你需要自己运营它:高可用性配置、备份、升级、监控,以及伴随 Tier-0 基础设施而来的值班轮换。
对于数据驻留是硬性要求的组织(例如医疗保健、金融服务、国防),可自托管的平台是唯一可行的道路。
表明是时候投资专用秘密管理的信号:
.env 文件来管理你的秘密
- 原文链接: infisical.com/blog/secre...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!
作者暂未设置收款二维码