软件开发中的密码与密钥管理

让我们深入探讨 DevOps 和 DevSecOps 管道中密码密钥管理的各个方面 。 
当今的数字业务有望以闪电般的速度创新、执行和发布产品 。自动化工具的广泛采用,加上 DevOps 和DevSecOps 工具,有助于这些企业实现更高的开发速度和更快的反馈循环 。这最终有助于缩短发布周期并以迭代方式提高产品质量 。
尽管向微服务和容器化应用程序的转变以及开源的采用正在帮助开发人员更快地交付产品,但它们也带来了与合规性和安全性相关的挑战 。根据 1Password 的Hidden In Plain Sight 报告,企业中的 DevOps 和 IT 团队不断面临由机密泄露、机密共享不安全和手动机密管理等带来的挑战 。
管理大型项目的 API 密钥、密码、加密密钥等机密信息非常复杂 。让我们在本文中深入探讨机密管理的各个方面 。
 
什么是密码密钥管理? 
简而言之,密码是非人类特权凭证,为开发人员提供访问应用程序、容器等资源的权限 。类似于密码管理,秘密管理是一种将秘密(例如,访问令牌、密码、API 密钥等)存储在具有更严格访问控制的安全环境中的做法 。
随着应用程序的复杂性和规模随着时间的推移而增长,管理密码可能会变得混乱 。此外,可能会出现跨技术堆栈的不同块共享秘密的情况 。这可能会造成严重的安全威胁,因为它会为恶意行为者打开后门来访问您的应用程序 。
密码管理确保敏感信息永远不会被硬编码,并且只能以加密格式提供 。与 RBAC(基于角色的访问控制)一起安全访问敏感数据是密码管理的秘诀 。
 
密码密钥管理的挑战 
在许多情况下,开发人员可能不小心在他们的代码或配置文件中使用了硬编码的纯文本格式凭证 。如果将包含机密的相应文件推送到 GitHub(或任何其他流行的代码托管平台)上指定的公共存储库,对业务的影响可能会很大 。
多云基础设施、容器化应用程序、IoT/IIoT、CI/CD 和类似进步所提供的好处可以通过同时关注秘密的有效管理来最大限度地利用 。对开发和 DevOps 团队进行应用程序安全教育是在团队中建立安全第一文化的最重要步骤 。
以下是 DevOps 和 DevSecOps 团队在管理机密时面临的主要挑战:
 
这种情况通常发生在团队(和/或组织)的密码分布在整个组织中时 。数字优先的组织越来越多地使用容器和基于云的工具来提高开发人员的速度、节省成本并加快发布速度 。同样的原则也适用于基于物联网应用程序的开发和测试 。
根据应用程序的规模和复杂性,机密很可能分布在:
 

  1. 基于容器化微服务的应用程序(例如,Kube.NETes、OpenShift、Nomad)
  2. 自动化 E2E 测试/跟踪平台(例如,Prometheus、Graphite)
  3. 内部开发的工具/流程
  4. 应用服务器和数据库
  5. DevOps 工具链
 
以上列表中的项目因应用程序的规模、大小和复杂性而异 。提供 RBAC、使用强旋转密码和避免密码共享是团队/组织内每个级别都必须遵循的一些简单实践 。
 
云开发人员和测试工具的激增 
无论项目的大小和规模如何,开发团队都希望最大限度地利用 GCP(谷歌云平台)、Microsoft Azure、AWS(亚马逊网络服务)、Kubernetes 等云开发工具 。
云工具肯定会加快与开发和测试相关的流程,但必须在使用它们的同时将安全实践放在首位 。用于访问相应云平台的密钥(例如 AWS 密钥)的任何泄露都可能导致经济损失 。
软件开发中的密码与密钥管理

文章插图
在存储库中公开公开的 AWS 凭证
鉴于如此多的风险,DevOps 和开发团队必须确保任何类型的密钥在公共领域(例如 GitHub 存储库)中都不会以人类可读的格式提供 。专注于社区主导增长 (CLG) 以宣传其产品或开发人员工具的组织需要确保其用户不会将任何密钥公开遗漏!如果密钥可公开访问,黑客可能出于恶意原因利用您的平台 。
用于管理机密的手动流程、使用第三方资源(例如 API)时的数据安全以及安全镜头的端到端可见性是组织在机密管理方面面临的其他挑战 。
 
密码密钥管理最佳实践 
在安全管理机密方面没有一种放之四海而皆准的方法,因为这在很大程度上取决于基础设施、产品要求和其他此类变化因素 。
撇开变量不谈,这里有一些关于高效和可扩展的秘密管理的最佳实践:
 


推荐阅读