在应用安全领域,密钥是指在身份验证和授权过程中,用于证明持有者身份及其所声明属性的任何信息。如果恶意行为者获取了密钥,就会获得对系统的非预期访问权限,并可能将其用于多种目的,包括窃取企业机密和客户信息,甚至以数据为要挟索取赎金。

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

什么是密钥管理?

密钥管理是组织用于执行以下操作的流程:

  • 识别敏感数据
  • 对数据进行分类
  • 为数据添加标签
  • 安全存储数据
  • 分发密钥
  • 定期轮换(替换)密钥

当组织从单体架构迁移到微服务架构时,独立的应用和基础设施组件数量会增加,而每个组件都有自己的凭据,因此需要管理的密钥也会大幅增加。

密钥存储方式

下面详细介绍两种安全存储密钥的方式:

Vault

密钥库方法需要安装第三方机密管理工具。密钥库解决方案会加密每项机密,防止未经授权的用户访问。密钥库通过API,根据既定策略授予用户访问机密的权限。API用户通过身份验证后,只能访问已获授权的机密。

缺点:

  • 必须自行管理解决方案和凭据
  • 需要围绕该解决方案构建基础设施,否则团队很难独立使用

优点:

  • 业界熟悉度高(大多数开发人员都知道如何使用此类工具)
  • 可轻松与保管库供应商提供的其他工具集成
  • 部分密钥保管库可免费使用

市面上有许多工具可供开发人员存储和管理加密的机密信息。如需了解如何使用集中式自动化机密信息管理工具,请阅读我们的博客文章《使用HashiCorp Vault保护NGINX中的SSL私钥》。

云服务提供商

另一种方法是使用云提供商提供的密钥管理服务。其优势之一是,密钥管理工具通常可与托管数据库等其他云服务紧密集成。云提供商的服务还可能提供自动轮换等功能,但仍需进一步研究,以确定该选项是否会导致停机。

缺点:

  • 通常不免费

优点:

  • 访问权限和用户界面由云服务提供商设置和管理
  • 可与云提供商的其他服务顺畅集成
  • 可使用基础设施即代码工具进行管理

不应存储密钥的位置

必须谨慎管理密钥,避免在解锁和访问密钥时导致应用中断。切勿将密钥签入源代码控制系统,这是一项重要实践。将密钥存储在源代码控制系统中可能给组织带来严重风险,因为团队或个人更新代码或应用时,密钥可能会被意外访问或泄露。因此,只要密钥曾被签入源代码控制系统,即使时间很短,也必须将其视为已泄露。必须将敏感数据从存储库中移除,并从源代码控制系统的历史记录中彻底清除。