paint-brush
发现一些秘密管理的最佳实践经过@pragativerma
1,022 讀數
1,022 讀數

发现一些秘密管理的最佳实践

经过 Pragati Verma1m2022/05/25
Read on Terminal Reader
Read this story w/o Javascript

太長; 讀書

证书才能运行,但存储和访问这些资源会使开发人员容易受到安全风险的影响。 在本文中,您将了解机密管理的挑战以及在 Web 应用程序中管理、存储和读取机密的一些最佳实践。 什么是秘密? 机密是用于身份验证和授权的数字凭证。他们在人到应用程序和应用程序到应用程序级别管理访问权限。

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - 发现一些秘密管理的最佳实践
Pragati Verma HackerNoon profile picture


Web 应用程序通常需要 API 密钥、密码和私有证书等机密才能运行,但存储和访问这些资源会使开发人员容易受到安全风险的影响。


在本文中,您将了解机密管理的挑战以及在 Web 应用程序中管理、存储和读取机密的一些最佳实践。


什么是秘密?

机密是用于身份验证和授权的数字凭证。他们在人到应用程序和应用程序到应用程序级别管理访问权限。


常见的秘密类型包括:


  • 自动生成的密码
  • 用户密码
  • 系统到系统密码
  • 数据库密码
  • 授权令牌
  • 应用程序密钥和 API
  • 私人加密密钥
  • SSH 密钥
  • 私有证书(TLS、SSL)
  • 一次性密码


机密为用户和应用程序提供对敏感数据、系统和服务的访问权限。这就是为什么在传输和休息时保持机密安全至关重要的原因。


存储机密最常用的方法是使用.env文件,通常称为环境变量;但是,这些文件可能会将数据暴露给未经授权的用户,并且手动管理文件可能会导致错误。


有关.env文件带来的风险的更多详细信息,请阅读此处


秘密管理提供了一种更安全的选择。


什么是秘密管理?

要了解秘密管理,您首先需要了解秘密生命周期。

秘密生命周期

一个健康的秘密应该遵循这个过程:


  • 生成/创建:秘密由用户手动生成或根据需要自动生成。密码通常遵循管理其创建和使用的政策。


  • 轮换:一旦使用秘密,应定期更改,自动创建或通过提示手动创建。如果机密已过时或过期,则在更改机密之前将阻止访问。


  • 撤销:当不再需要或不需要某个秘密时——例如,当员工离开公司或发现可疑活动时——它会从用户或程序中删除,从而有效地阻止对资源的访问。删除不必要的、过期的、泄露的或薄弱的秘密是保持良好秘密卫生的重要一步。


秘密管理是在整个秘密生命周期中安全有效地管理凭证的生产、轮换、撤销和存储的过程。将其视为密码管理的改进版本。虽然托管凭证的范围正在扩大,但目的保持不变:保护重要资产免受不必要的访问。


为什么秘密管理很重要?

秘密管理减少或消除了用户对秘密管理的参与,以限制潜在的故障点。


一般来说,它在三个层面上有助于安全:


  • 基础设施安全可防止未经授权访问用户和应用程序帐户、设备和其他网络元素。


  • 云服务安全性限制和管理对云帐户和基于云的关键服务的访问。


  • 数据安全可防止重要系统、存储、数据库和其他资源的数据泄露。


但是,实施秘密管理意味着将安全措施集成到组织基础设施(云、代码、数据和设备)最易受攻击的级别中,这可能很困难。


秘密管理的挑战

秘密管理的一些常见风险包括:


  • 不完整的可见性和意识:这是分散模型中的一个特殊缺陷,其中管理员、开发人员和其他团队成员单独保守秘密,如果有的话。这里的监督意味着肯定存在安全漏洞以及审计挑战。


  • 硬编码/嵌入式凭据:应用程序和物联网设备提供和部署了硬编码的默认凭据,使用扫描工具和简单的猜测或字典式攻击很容易破解这些凭据。


  • 特权凭证和云:云和虚拟化管理员控制台(例如 AWS 或 Office 365 提供的控制台)授予用户广泛的超级用户权限,允许他们立即大规模启动和关闭虚拟机和应用程序。这些虚拟机中的每一个都有自己的一组必须控制的特权和机密。


  • DevOps 工具: DevOps 团队通常使用多种工具和技术进行编排、配置管理和其他目的(例如,Chef、Puppet、Ansible、Salt 和 Docker 容器),这些工具和技术依赖于自动化和其他需要机密才能运行的脚本。


  • 第三方供应商帐户/远程访问解决方案:很难确保正确使用通过远程访问或向第三方提供的授权。


  • 手动秘密管理流程:更多的手动秘密管理技术意味着更高的安全漏洞和错误风险。


但是,有一些解决方案和最佳实践可以解决这些问题并确保您的敏感数据安全。


秘密管理的最佳实践

您可以使用多种方法为您的用户和应用程序提供一种安全可靠的方式来检索他们访问系统所需的内容。


以下是在您的组织内构建有效的秘密管理系统所需要做的事情。


集中访问/控制

首先,你需要集中你的秘密。许多项目将机密存储在 GitHub、Bitbucket 和 GitLab 等版本控制系统中。


集中您的数据可以更轻松地控制谁可以访问机密以及在什么时间访问。


要集中秘密,您可以将它们保存在数据库中或使用 Secrets Manager。


在此处阅读有关秘密经理的更多信息。


创建密钥管理策略

统一的秘密管理政策应为秘密的结构(最小长度、复杂性、特殊字符的使用、禁止密码、重用和持续时间)提供严格的指导,同时禁止使用默认或硬编码的秘密。


该政策应包括一些基本功能:


  • 限制使用硬编码密码和默认密码。
  • 设置严格的密码格式限制。
  • 在特定情况下,指定所需的秘密撤销。
  • 设置强制秘密轮换的时间限制。


自动化秘密管理流程

如果操作不是自动化的,您将面临人为错误造成损害的风险。尝试依靠技术而不是人类来开发、管理、传播和维护秘密,并删除任何硬编码或嵌入的秘密。


使用可撤销的细化权限

在粒度级别向唯一的个人或实体提供临时凭证,也称为动态机密,以便在发生任何违规情况时,可以撤销受影响的凭证,而不会影响整个开发基础设施。


至少,应该为不同的生产系统或团队创建不同的凭据集,最好是为每个环境创建。


随时加密秘密

秘密应该在传输和静止时加密,以确保网络内的最大安全性。


您的加密密钥应整合到机密管理解决方案中,使您能够对有权访问这些密钥的人员进行适当控制。


审计特权会话

为了改进监督和问责制,使用特权会话监控来记录、审计和监控帐户、用户、脚本和自动化工具的所有特权会话。


捕获击键和屏幕也是一种选择,允许实时查看和回放。


一些业务权限会话管理解决方案还允许 IT 团队检测可疑的正在进行的会话行为并暂停、锁定或终止会话,直到可以彻底调查该活动。


保持数据分离

利用当今网络的分布式特性。将机密和敏感数据分开,而不是将它们集中在同一个位置。这使得在开发基础架构中使用和更新机密变得更加容易。


结论

秘密管理对于维护组织的网络安全至关重要。您的组织应制定核心机密管理策略,为机密生命周期的所有阶段定义统一规则和流程,以便安全有效地管理机密。