当前位置: 首页 > 科技观察

软件开发中的密码学和密钥管理

时间:2023-03-22 11:51:17 科技观察

让我们深入探讨DevOps和DevSecOps管道中密码学密钥管理的各个方面。当今的数字业务有望以闪电般的速度创新、执行和推出产品。自动化工具的广泛采用,加上DevOps和DevSecOps工具,正在帮助这些企业实现更高的开发速度和更快的反馈循环。这最终有助于缩短发布周期并迭代地提高产品质量。虽然向微服务和容器化应用程序的转变以及开源的采用正在帮助开发人员更快地交付产品,但它们也带来了与合规性和安全性相关的挑战。根据1Password的HiddenInPlainSight报告,企业中的DevOps和IT团队继续面临由泄露的机密、不安全的机密共享和手动机密管理带来的挑战。管理大型项目的机密信息(如API密钥、密码、加密密钥等)非常复杂。让我们在本文中深入探讨机密管理的各个方面。什么是加密密钥管理?简而言之,密码是非人类特权凭证,为开发人员提供对应用程序、容器等资源的访问权限。与密码管理类似,秘密管理是存储秘密(例如,访问令牌、密码、API密钥等)的做法.)在具有更严格访问控制的安全环境中。随着应用程序的复杂性和规模随着时间的推移而增加,管理密码可能会变得混乱。此外,在某些情况下,技术堆栈中的不同块可能会共享秘密。这可能会造成严重的安全威胁,因为它会为恶意行为者打开后门来访问您的应用程序。密码管理确保敏感信息永远不会被硬编码,并且仅以加密格式提供。安全访问敏感数据以及RBAC(基于角色的访问控制)是密码管理的秘诀。加密密钥管理的挑战在许多情况下,开发人员可能会不小心在他们的代码或配置文件中使用明文形式的硬编码凭据。如果将包含机密的相应文件推送到GitHub(或任何其他流行的代码托管平台)上指定的公共存储库,业务影响可能会很大。通过同时关注机密的有效管理,可以最大限度地发挥多云基础设施、容器化应用程序、IoT/IIoT、CI/CD和类似进步所提供的优势。对开发和DevOps团队进行应用程序安全方面的教育是在您的团队中建立安全第一文化的最重要步骤。以下是DevOps和DevSecOps团队在管理机密时面临的主要挑战:密码密钥蔓延当团队(和/或组织)的密码在整个组织中分发时,通常会发生这种情况。数字优先的组织越来越多地使用容器和基于云的工具来提高开发人员的速度、节省成本并加快发布速度。同样的原则也适用于基于物联网的应用程序的开发和测试。根据应用程序的大小和复杂性,机密可能分布在:基于微服务的容器化应用程序(例如Kubernetes、OpenShift、Nomad)自动化E2E测试/跟踪平台(例如Prometheus、Graphite)内部开发的工具/流程上面列表中的应用程序服务器和数据库DevOps工具链项目因应用程序的大小、大小和复杂性而异。提供RBAC、使用强旋转密码和避免密码共享是团队/组织内每个级别都必须遵循的一些简单实践。云开发人员和测试工具的激增无论项目的大小和规模如何,开发团队都希望充分利用GCP(谷歌云平台)、MicrosoftAzure、AWS(亚马逊网络服务)、Kubernetes等云开发工具.云工具肯定会加快与开发和测试相关的流程,但必须在使用它们的同时将安全实践放在首位。用于访问相应云平台的密钥(例如AWS密钥)的任何泄露都可能导致经济损失。由于涉及如此多的风险,DevOps和开发团队必须确保任何类型的密钥都不会以人类可读的格式出现在公共领域,例如GitHub存储库。专注于社区主导增长(CLG)以推广其产品或开发人员工具的组织需要确保其用户不会将任何密钥公开给公众!如果密钥可公开访问,黑客可能出于恶意原因利用您的平台。管理机密的手动流程、使用API等第三方资源时的数据安全以及通过安全镜头实现的端到端可见性是组织在机密管理方面面临的其他挑战。加密密钥管理最佳实践没有一种万能的方法可以安全地管理机密,因为它在很大程度上取决于基础设施、产品要求和其他此类变量。除了变量,这里还有一些高效和可扩展的秘密管理的最佳实践:使用RBAC(基于角色的访问控制)每个项目和组织都有敏感数据和资源,只能由受信任的用户和应用程序访问。系统中的任何新用户都必须分配默认权限(即最小访问控制)。提升的权限必须仅对项目或组织的少数成员可用。管理员(或超级管理员)必须有权根据需要添加或撤销其他成员的权限。特权升级也必须根据需要进行,并且只能在有限的时间内进行。在授予/撤销权限时必须添加适当的注释,以便所有相关的项目涉众都具有完全的可见性。使用安全保险库简单来说,保险库是一种主要用于保护任何敏感信息(例如,密码、API密钥、证书等)的工具。以人类可读的形式在本地存储机密信息是最糟糕的管理方式之一。这是安全保险库非常有用的地方,因为它们为任何秘密提供统一的接口并提供详细的审计日志。SecurityVault还可用于通过指定访问权限(授权)来检测基于角色的访问控制(RBAC)。HashicorpVaultHelmchart和VaultforDocker是两个流行的保险库管理器,可用于运行保险库服务、访问和存储机密等。由于大多数应用程序都利用了云的潜力,因此在数据传输或静止时关注数据安全性非常重要。这就是EaaS(加密即服务)可用于在静态存储数据之前将应用程序的加密需求卸载到保管库的地方。定期轮换密钥并在几周或几个月后重置它们是一种很好的安全做法。一种选择是手动重新加密,因为使用这些秘密的应用程序可能会在日志文件或集中式日志记录系统中留下痕迹。攻击者可以获得对日志的后门访问并使用它来泄露秘密。此外,同事可能会无意中将机密信息泄露到组织外部。为避免此类情况,建议在相应的秘密管理工具中启用秘密轮换。例如,AWSSecretsManager中的SecretsManager轮换使用AWSLambda函数来更新密钥和数据库。最重要的是,团队应该有适当的实践来检测对系统的未授权访问。这将有助于在对企业造成重大损害之前采取适当的行动。为什么要在DevSecOps管道中实施机密管理?只有通过在CI/CD管道中对代码进行自动化测试,才能加快发布周期并加快开发人员反馈速度。在CI管道中运行的测试可能需要访问关键的受保护资源,如数据库、HTTP服务器等。即使在Docker容器内运行单元测试也是一种常见的做法,但开发人员和QA需要确保秘密不存储在Dockerfile中.机密管理工具可与Jenkins等流行的CI/CD工具结合使用,以在集中位置管理密钥和其他机密。秘密也通过加密和令牌化来存储。