使用 ENV 变量是个好主意吗?

Flame_Phoenix

背景

我们的应用程序使用 MySQL 数据库和更多服务。

为了将我们的应用程序连接到这些服务器,我们将用户名和密码保存在一个prod.config文件中。如果我们在开发中,我们使用一个dev.config文件等等......

最近,我一直在研究行业中的良好实践(例如https://12factor.net/),其中大多数(如果不是全部)指定用户名和密码等信息连接到数据库和其他服务不应该在 conifg 文件中,而是在 ENV 变量中。

如果您不知道 12 因子规格是什么,您可以查看此免费教程:

问题

现在,起初这看起来不错。无论如何,许多 CI 工具(如 Travis 或 CircleCI)已经迫使您这样做。这里的问题是当您最小的应用程序使用多个服务时。

在我们的例子中,对于我们最小的应用程序,我们需要 13 个 ENV 变量。不会在任何特定文件中的变量,它们都必须在它们运行的​​机器的 ENV 中。

我不明白这怎么能被视为一种好的做法。我理解不使用所有这些敏感数据推送您的配置文件的主要思想,但这种方法带来了几个问题:

  1. 当机器重新启动时,您会丢失所有 ENV 变量。
  2. 如果你想避免之前的问题,你需要在机器启动时运行一个脚本,设置这些变量,这意味着你会将它们存储在一个文件中,从而违背了整个目的。
  3. 你在哪里保存这些变量?他们需要在别处,而不是你这个脆弱的脑袋!

问题

  • 我如何解决以前的问题?
  • 为什么在 ENV 变量中保存私人信息被视为一个好主意?
布兰登·沙贝尔

我将在这里退一步向您提出一个问题:您为什么要尝试从测试环境连接到生产数据库?

CI 工具的美妙之处在于它们允许您启动 Docker 容器以充当测试服务。在您的生产代码中,将密码保存在环境变量中被认为是最佳实践,主要有两个原因:1.) 如果有人掌握了您的代码,他们将可以访问您的数据库。它需要额外的安全级别,这是不现实的。2.) 如果有人确实掌握了您的密码,您希望能够快速更改它们。如果您的代码引用环境变量而不是硬编码字符串,则这更容易做到。

当您转向 CI 系统时,第 2 点变得没有实际意义,但第 1 点变得非常重要。使用 Travis 和 CircleCI,您的配置文件是公开的。如果您将生产密码放入配置文件,我(或更恶意的人)可以扫描您的文件并跳转到您的数据库。我听说过黑客在配置文件中抓取公共存储库以获取硬编码密码的故事。使用像 CircleCI 这样的工具会更容易。

您在 Travis 和 CircleCI 中设置的环境变量应该存储在存储库级别 - 您不需要移动变量或保存它们。

生产系统中的环境变量应该作为启动脚本的一部分进行设置。这在很大程度上取决于您使用的服务类型,因此我不会在这里详细介绍。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用“ is”检查变量中包含哪个函数是一个好主意吗?

来自分类Dev

一个好主意是为此使用复合模式吗?

来自分类Dev

在Entity Framework查询中使用TransactionScope是个好主意吗?

来自分类Dev

在反跳函数中使用requestAnimationFrame是个好主意吗?

来自分类Dev

在Android的Scrollview中使用约束布局是个好主意吗?

来自分类Dev

使用模型检查点是个好主意吗?

来自分类Dev

使用NTFS压缩是一个好主意吗?

来自分类Dev

一个好主意是为此使用复合模式吗?

来自分类Dev

在 TextInputLayout 中使用 MaterialEditText 是个好主意吗

来自分类Dev

AngularJS:使用框架的好主意吗?

来自分类Dev

使用全局变量在Go Web应用程序中存储数据库句柄是一个好主意吗?

来自分类Dev

Javascript-在闭包内使用函数构造函数不是一个好主意吗?

来自分类Dev

在Web服务URL中使用加密的数据库ID代替UUID是个好主意吗?

来自分类Dev

在ASP MVC视图中使用反射是个好主意吗?

来自分类Dev

什么是MongoDB的严格模式,使用它是一个好主意吗?

来自分类Dev

使用boost :: program_options解析文本文件是一个好主意吗?

来自分类Dev

在Grails中使用特征进行水平域类重用,是个好主意吗?

来自分类Dev

使用hgignore忽略* .orig文件不是一个好主意吗?

来自分类Dev

在静态文件上分块使用Transfer-Encoding:是一个好主意吗?

来自分类Dev

使用宏在C中实现通用向量。这是一个好主意吗?

来自分类Dev

在Web应用程序中使用反射是一个好主意吗?

来自分类Dev

在没有身份的情况下使用owin.security是个好主意吗?

来自分类Dev

将Couchbase与Rails一起使用是个好主意吗?

来自分类Dev

在单元测试中使用依赖注入对象不是一个好主意吗?

来自分类Dev

始终使用Java Beans命名约定是一个好主意吗?

来自分类Dev

使用goto避免深度函数调用中的堆栈溢出是一个好主意吗?

来自分类Dev

使用CSS和JS的双语网站不是一个好主意吗?

来自分类Dev

在Firebase中,使用单独的端点为许多关系建模是个好主意吗?

来自分类Dev

在动态分配的2D数组上使用realloc()是个好主意吗?

Related 相关文章

  1. 1

    使用“ is”检查变量中包含哪个函数是一个好主意吗?

  2. 2

    一个好主意是为此使用复合模式吗?

  3. 3

    在Entity Framework查询中使用TransactionScope是个好主意吗?

  4. 4

    在反跳函数中使用requestAnimationFrame是个好主意吗?

  5. 5

    在Android的Scrollview中使用约束布局是个好主意吗?

  6. 6

    使用模型检查点是个好主意吗?

  7. 7

    使用NTFS压缩是一个好主意吗?

  8. 8

    一个好主意是为此使用复合模式吗?

  9. 9

    在 TextInputLayout 中使用 MaterialEditText 是个好主意吗

  10. 10

    AngularJS:使用框架的好主意吗?

  11. 11

    使用全局变量在Go Web应用程序中存储数据库句柄是一个好主意吗?

  12. 12

    Javascript-在闭包内使用函数构造函数不是一个好主意吗?

  13. 13

    在Web服务URL中使用加密的数据库ID代替UUID是个好主意吗?

  14. 14

    在ASP MVC视图中使用反射是个好主意吗?

  15. 15

    什么是MongoDB的严格模式,使用它是一个好主意吗?

  16. 16

    使用boost :: program_options解析文本文件是一个好主意吗?

  17. 17

    在Grails中使用特征进行水平域类重用,是个好主意吗?

  18. 18

    使用hgignore忽略* .orig文件不是一个好主意吗?

  19. 19

    在静态文件上分块使用Transfer-Encoding:是一个好主意吗?

  20. 20

    使用宏在C中实现通用向量。这是一个好主意吗?

  21. 21

    在Web应用程序中使用反射是一个好主意吗?

  22. 22

    在没有身份的情况下使用owin.security是个好主意吗?

  23. 23

    将Couchbase与Rails一起使用是个好主意吗?

  24. 24

    在单元测试中使用依赖注入对象不是一个好主意吗?

  25. 25

    始终使用Java Beans命名约定是一个好主意吗?

  26. 26

    使用goto避免深度函数调用中的堆栈溢出是一个好主意吗?

  27. 27

    使用CSS和JS的双语网站不是一个好主意吗?

  28. 28

    在Firebase中,使用单独的端点为许多关系建模是个好主意吗?

  29. 29

    在动态分配的2D数组上使用realloc()是个好主意吗?

热门标签

归档