什么是密钥管理?

秘密管理是确保和控制应用程序自动化组件凭据的过程。

学习目标

阅读本文后,您将能够:

  • 定义“秘密”和“秘密管理”
  • 了解秘密管理面临的一些挑战
  • 解释秘密管理解决方案

相关内容


想要继续学习吗?

订阅 TheNET,这是 Cloudflare 每月对互联网上最流行见解的总结!

参阅 Cloudflare 的隐私政策,了解我们如何收集和处理您的个人数据。

复制文章链接

什么是密钥管理?

秘密管理是一种安全存储敏感信息的做法(敏感信息一旦泄露,可能会让恶意方或未经授权方访问应用程序基础设施)。在这个上下文中,“秘密”指的是加密密钥API 密钥、SSH 密钥、令牌、密码或证书,它们使应用程序基础设施的不同部分能够相互连接。

虽然用户可能只需要知道一个密码就能登录一个应用程序,但应用程序本身是由不同部分组成的,这些部分都需要凭据(即这些秘密)才能相互通信。

几乎每个人都知道记住多个应用程序的密码有多困难,尤其是当这些密码需要定期更新时。正因如此,很多人开始使用不安全的密码做法,比如把密码写下来或在所有应用程序中使用相同的密码。

开发人员在制作软件时也面临着类似的挑战。让应用程序正常工作或企业运作所依赖的基础设施可能需要数百甚至数百万个密钥、令牌和密码。由于管理所有这些秘密十分费力,因此它们往往最终被硬编码到应用软件中。它们可能从未更新过,有时还是明文编码,容易受到攻击者攻击。

什么是“秘密”?

在应用程序开发中,秘密是用作凭据的数据。正如一个人需要通过输入用户名和密码来进行身份验证才能访问其电子邮件一样,电子邮件应用程序(或任何应用程序)的非人类组成部分也需要相互进行身份验证,以让应用程序正常工作。这些组成部分包括 API 连接、容器微服务、脚本、函数和自动化工具。为了进行身份验证,它们使用凭据。

秘密可能包括:

  • IPsec 密钥或证书
  • TLS 证书
  • 密钥
  • API 密钥
  • 密码
  • 令牌

想想儿童积木(如乐高®)是如何锁在一起形成一个坚固的微型结构的。秘密就像那些将应用程序固定在一起的锁定机制。没有它们,应用程序就会分崩离析。

为什么更新秘密很重要?

与始终具有用于彼此锁定的相同隆起的积木不同,秘密需要定期更改。如果秘密使用时间过长,攻击者就有可能通过暴力破解密码尝试猜出来。此外,秘密的使用时间越长,泄露的可能性就越大。

秘密需要轮换,这增加了安全管理秘密的复杂性。正如记住一个更新的密码可能很难一样,定期轮换秘密也是一个巨大的挑战。十几个应用程序可能依赖于一个 API,如果 API 需要新的凭据,所有这些应用程序都必须更新其秘密。在某些情况下,组织甚至可能不知道有多少应用程序依赖于这个 API,也不知道更新秘密后会破坏什么东西。

有时,开发团队为了提高效率,会选择完全不更新秘密,就像很多人宁愿不更新密码一样。他们甚至可能将秘密硬编码到脚本和函数中,并假定这些秘密无需更改。

秘密管理还面临哪些挑战?

手动共享:缺乏秘密管理解决方案的开发人员可能会被迫使用手动流程在不同开发团队之间共享秘密,导致文档记录不完善,并将秘密引入不安全的环境中。

第三方帐户:外部用户可能需要访问内部 API 和数据库。由于他们不在组织内,因此很难实施安全的秘密管理。

云计算:环境是庞杂分散且短暂的。新的虚拟机实例会定期启动以支持服务,所有这些实例都需要自己的秘密。云应用程序还允许从几乎不受限制的地点进行广泛访问,因此大大增加了必须管理的凭据和权限的数量。

缺乏集中管理:正如很难让一群人就晚餐时间达成一致一样,管理分散在多个团队和职能部门的秘密也很困难。每个团队记录秘密的方式可能不同,存储秘密的方式可能不同,或者对其他团队正在使用的秘密缺乏可见性。

秘密管理解决方案的工作原理

秘密管理工具可以自动执行安全管理秘密的所有必要流程。它们还将秘密存储在安全的环境中,与应用程序的代码分开。这样一来,开发人员就可以避免对秘密进行硬编码或以明文形式存储,以免秘密被破解。

Cloudflare 如何协助秘密管理?

Cloudflare 为在其全球网络中运行代码提供了一个高度可扩展的开发平台。Cloudflare Secrets Store 使开发人员能够安全地存储和管理应用程序所需的秘密,从 API 令牌到请求授权标头不等。了解 Secrets Store