在应用安全的背景下,秘密是任何可以在身份验证和授权过程中证明持有者是谁以及持有者声称是什么的信息。  如果恶意行为者获得了机密信息,他们就会意外地访问您的系统,并将其用于各种目的,包括窃取公司机密和客户信息,甚至扣留您的数据以索要赎金。

一个典型的例子是允许应用访问其数据库的用户名和密码,但秘密也可以是 API 密钥、凭据、证书和私钥以及其他类型的信息。 由于秘密用于控制对组织资产的访问,因此安全地存储和保护它们对于降低组织受到损害的风险至关重要。

什么是机密管理?

机密管理是组织用于以下操作的过程:

  • 识别敏感数据
  • 对数据进行分类
  • 标记数据
  • 安全存储数据
  • 分发机密Distribute secrets
  • 定期轮换(替换)机密

组织从单一架构转向微服务架构时,独立的应用和基础设施组件的数量(每个组件都有自己的凭证)会增加,这意味着需要管理更多的秘密。

存储秘密的方法

让我们仔细看看安全存储机密的两种选择:

保险库

保险库方法涉及安装第三方秘密管理工具。 保险库解决方案对每个秘密进行加密,以防止未经授权的用户访问。 该保险库公开一个 API,让用户根据既定的策略访问秘密。 当 API 用户通过身份验证时,他们只能访问他们被授权的秘密。

缺点:

  • 您必须自行管理解决方案和凭证
  • 需要围绕它构建基础设施,否则团队很难独立工作

优点:

  • 行业熟悉度(大多数开发人员知道如何使用此类工具)
  • 可轻松与保险库供应商提供的其他工具集成
  • 有些保险库是免费使用的

市场上有许多工具可供开发人员用来存储和管理加密机密。 有关如何使用集中自动化机密管理工具的示例,请阅读我们的博客“使用 HashiCorp Vault 保护 NGINX 中的 SSL 私钥”。

云提供商

另一种方法是使用云提供商提供秘密管理服务。 一个好处是,秘密管理工具通常与其他云服务(例如托管数据库)紧密集成。  云提供商服务可能还提供自动轮换等功能,但还需要未来的研究来了解该选项是否会导致停机。

缺点:

  • 通常不免费

优点:

  • 访问和 UI 由云提供商设置和管理
  • 与其他云提供商服务完美集成
  • 可以使用基础设施即代码工具进行管理
机密不宜存放在何处

必须谨慎管理秘密,以防止在解锁和访问时对应用造成中断。 最佳做法是永远不要将机密放入源代码控制系统中。 如果在团队或个人更新代码或应用时机密被意外访问或泄露,那么将机密存储在那里可能会给组织带来灾难。 因此,如果秘密被纳入源代码控制,即使时间很短,也必须被视为已被泄露。 必须从存储库中删除敏感数据并将其从源代码控制系统的历史记录中清除。