什么是密钥?
在应用安全领域,密钥是指在身份验证和授权过程中,用于证明持有者身份及其所声明属性的任何信息。如果恶意行为者获取了密钥,就会获得对系统的非预期访问权限,并可能将其用于多种目的,包括窃取企业机密和客户信息,甚至以数据为要挟索取赎金。
一个典型示例是允许应用访问其数据库的用户名和密码,但密钥还可以是API密钥、凭据、证书和私钥等其他类型的信息。由于密钥用于控制对组织资产的访问,因此安全地存储和保护密钥对于降低组织遭入侵的风险至关重要。
什么是密钥管理?
密钥管理是组织用于执行以下操作的流程:
- 识别敏感数据
- 对数据进行分类
- 为数据添加标签
- 安全存储数据
- 分发密钥
- 定期轮换(替换)密钥
当组织从单体架构迁移到微服务架构时,独立的应用和基础设施组件数量会增加,而每个组件都有自己的凭据,因此需要管理的密钥也会大幅增加。
密钥存储方式
下面详细介绍两种安全存储密钥的方式:
Vault
密钥库方法需要安装第三方机密管理工具。密钥库解决方案会加密每项机密,防止未经授权的用户访问。密钥库通过API,根据既定策略授予用户访问机密的权限。API用户通过身份验证后,只能访问已获授权的机密。
缺点:
- 必须自行管理解决方案和凭据
- 需要围绕该解决方案构建基础设施,否则团队很难独立使用
优点:
- 业界熟悉度高(大多数开发人员都知道如何使用此类工具)
- 可轻松与保管库供应商提供的其他工具集成
- 部分密钥保管库可免费使用
市面上有许多工具可供开发人员存储和管理加密的机密信息。如需了解如何使用集中式自动化机密信息管理工具,请阅读我们的博客文章《使用HashiCorp Vault保护NGINX中的SSL私钥》。
云服务提供商
另一种方法是使用云提供商提供的密钥管理服务。其优势之一是,密钥管理工具通常可与托管数据库等其他云服务紧密集成。云提供商的服务还可能提供自动轮换等功能,但仍需进一步研究,以确定该选项是否会导致停机。
缺点:
- 通常不免费
优点:
- 访问权限和用户界面由云服务提供商设置和管理
- 可与云提供商的其他服务顺畅集成
- 可使用基础设施即代码工具进行管理
不应存储密钥的位置
必须谨慎管理密钥,避免在解锁和访问密钥时导致应用中断。切勿将密钥签入源代码控制系统,这是一项重要实践。将密钥存储在源代码控制系统中可能给组织带来严重风险,因为团队或个人更新代码或应用时,密钥可能会被意外访问或泄露。因此,只要密钥曾被签入源代码控制系统,即使时间很短,也必须将其视为已泄露。必须将敏感数据从存储库中移除,并从源代码控制系统的历史记录中彻底清除。

