如何在微服务/容器/云环境中管理机密?

2024-01-03

微服务和云是一回事。每个人都在谈论和写作。就我个人而言,我对这个主题思考了很多:如何利用它从中受益?可能面临哪些挑战?这如何加速日常开发?以及如何管理一切? 几天来困扰我的一个问题是“如何在微服务/云环境中管理机密?”。

想象一下一家拥有 150 名软件工程师和拥有各种产品的不同团队的公司。每个团队都在创建一个软件,每个服务都需要不同数量的秘密(API 密钥、密码、SSH 密钥等)。 “老式”方法是创建一些 ini / yaml / txt 格式的配置文件并从中读取。 12Factor 应用程序说:根据环境变量执行此操作。

可以为每台机器设置环境变量,并且配置文件也可以放置在那里。 如果您有很多机器并且部署是由几个系统管理员完成的,那么这很有效。 一般规则之一是:“不要将机密存储在 Git 存储库中。”。

现在新世界进来了。 每个团队都对他们自己开发的应用程序负责。 它们应该由团队部署和运行。 因此,我们公司正在转向容器和自助服务方式(例如 Mesos 和 Marathon 或 Kubernetes)。

当然,Dockerfiles 也可以设置环境变量。是的,您可以在构建期间将配置文件添加到 Docker 容器中。 但这样每个人都可以访问秘密(例如来自其他团队的秘密)。没有人知道谁利用了这个秘密并做了一些危险的事情。

您还想对 Dockerfile 进行版本化。您想要在 Marathon 上运行的应用程序也应该进行版本化(Git 或其他)(并通过 REST API 应用)。那么在哪里存储和管理这个容器/应用程序的所有秘密呢? 因为使用 Swarm 和 Machine(适用于 Docker)、Mesos 和 Marathon(也适用于 Docker)或 Kubernetes 等调度程序框架,您不知道您的应用程序将在哪里运行。这将在多台机器上安排。 而且大多数此类工具都没有身份验证(默认情况下,当然这可以通过 Nginx 代理或其他东西添加)。

管理秘密的一个想法是使用类似的工具Vault https://vaultproject.io/。但我从未在应用程序中看到过“原生”支持。这同样适用于Blackbox https://github.com/StackExchange/blackbox。我不知道配置管理如何解决这个问题。我知道 Chef 支持加密数据包,但据我所知,不可能使用 Chef 来设置/构建 Docker 容器。

如何在微服务/容器/云环境中与多个工程师一起管理多团队环境中的机密?


有几种解决方案。

First, DO NOT将你的秘密放入图像中。正如您已经意识到的那样,这只是一个坏主意。如果您不在构建时添加机密,则必须在运行时添加。这给我们留下了几个选择:

  • 按照建议使用环境变量12 因素应用程序 http://12factor.net/。然后,您需要编写一个脚本,在容器启动时使用这些变量的值填充配置文件。这可行,但我不太喜欢它,因为环境变量很容易泄漏(它们可以在链接的容器中看到,docker inspect并且经常包含在错误报告中)。另请参阅Summon https://github.com/conjurinc/summon.

  • 使用卷。只需在运行时挂载包含机密的配置文件即可。这可行,但确实意味着您有一个包含主机上秘密的文件。当您不知道容器将在哪个主机上运行时(例如使用 Swarm 和 Mesos 等框架时),这会变得更加复杂。

  • 使用安全的 k/v 存储,例如Vault https://hashicorp.com/blog/vault.html/Keywhiz https://github.com/square/keywhiz。正如您所指出的,您将需要执行一些脚本来将值获取到应用程序中(与环境变量一样)。您还需要以某种方式对 k/v 存储进行身份验证(您可能需要查看卷驱动程序Keywhiz https://github.com/calavera/docker-volume-keywhiz and Vault https://github.com/calavera/docker-volume-vault,或使用通过环境变量传递的一次性令牌)。

Kubernetes 已经有了对秘密的相当先进的支持 http://kubernetes.io/v1.0/docs/user-guide/secrets.html,我希望看到其他框架采用自己的解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在微服务/容器/云环境中管理机密? 的相关文章

随机推荐

  • 通过 C API 从字符串创建并调用 python 函数

    是否可以从字符串加载 python 函数 然后使用参数调用该函数并获取返回值 我正在使用 python C API 从我的 C 应用程序内部运行 python 代码 我可以使用以下命令从文件加载模块PyImport Import 从中获取一
  • 有 Yahoo 查询语言 (YQL) 的 .NET 示例吗?

    我想打一些简单的电话雅虎查询语言 YQL http developer yahoo com yql 有人在 NET 中实现过这个吗 这是我想从 NET 进行的查询 select MarketCapitalization from yahoo
  • Sammy 路由不工作

    我无法让 sammy js 路由按预期工作 我有以下 JavaScript function var app sammy main function this get function context context log start p
  • 硒未找到元素

    这是 HTML https www dropbox com s aiaw2u4j7dkmui2 Untitled 20picture png https www dropbox com s aiaw2u4j7dkmui2 Untitled
  • Newtonsoft.Json SerializeObject 不带转义反斜杠

    给出代码 dynamic foo new ExpandoObject foo Bar something string json Newtonsoft Json JsonConvert SerializeObject foo 输出如下 Ba
  • 在 JavaScript 中缩放到没有画布的光标

    我有一个 img 通过调整鼠标滚轮滚动来缩放transform scale 我希望缩放像 Google 地图一样 您可以缩放到鼠标光标所在的位置 而不是图像的中心 不过 我不想使用画布 只是为了学习体验 这也是我发现的其他问题并没有真正帮助
  • WSO2 Identity Server Service Pack 的来源

    WSO2 Identity Server 5 0 0 的 Service Pack 1 的源是否公开可用 我在哪里可以找到 SVN 存储库中的源代码 Service Pack 没有任何源代码 服务包是通过聚合为 WSO2 中的产品提供的补丁
  • Rails 中的 Kerberos 身份验证

    是否可以使用 kerberos 对 Rails 下的用户进行身份验证 是否有任何现有插件 最好是扩展 authlogic 的功能 来执行此操作 我希望其他人能够向我们展示一种纯粹的 Rails 方法来做到这一点 但在那之前 让事情顺利进行的
  • 开发cocos-lua游戏时,Android中string.find中文字符失败,PC上成功

    我尝试使用string find 中国 中 我开发cocos lua游戏时 在PC上成功 但在Android上失败 在安卓上 string find return nil 首先 我认为它们的编码可能不同 所以我尝试打印出它们的字节 Andr
  • 使用 `*((*(&array + 1)) - 1)` 获取自动数组的最后一个元素是否安全?

    假设我想获取大小未知的自动数组的最后一个元素 我知道我可以利用sizeof运算符来获取数组的大小并相应地获取最后一个元素 正在使用 array 1 1 safe Like char array SOME SIZE printf Last e
  • 从android中的地址获取纬度和经度

    我尝试从地址获取纬度和经度 问题是 当我只给出城市名称时 它会给出正确的纬度和经度 而当我给出完整的地址 如州 城市名称 街道号码 时 它会给出正确的纬度和经度没有给我正确的纬度和经度 感谢您的配合回复 我的代码是 String addre
  • Ant 任务检查数据库(连接)是否存在?

    ANT 是否有可能在不导致构建失败的情况下检查数据库 连接 是否存在 例如
  • 按 utc 日期而不是服务器日期滚动文件

    这是我的 log4net xml 文件
  • pyqt:如何从 QVBoxLayout 中删除元素?

    我想要一个多颜色选择小部件 我这样做的方式是有一个 按钮和一个最初为空的 vbox 当按下 时 它会向包含 按钮和 3 个旋转框的 vbox 添加一个 QHBoxLayout 当按下 按钮时 我希望该行消失 并且所有内容都恢复到添加该行之前
  • DLib:train_shape_predictor_ex.cpp

    我正在尝试通过执行来训练 Dlib 的形状预测器train dlib shape predictor ex cpp http dlib net train shape predictor ex cpp html on 海伦数据集 http
  • ng-content 选择绑定变量

    我正在尝试使用 Angular 2 创建一个表单生成器 一个非常基本的示例如下 this fields name Name type text name Age type number 但我也想支持自定义元素 例如 this fields
  • ResourceDictionary 源绑定到模块(用于本地化)

    我有一个 XAML 窗口 其中有一组绑定到对象的字符串 如下所示
  • Sonarqube:查看涵盖源代码的单元测试

    我们在 Bamboo 中有一个 CI 设置 它运行 Junit 测试并使用 Jacoco 计算单元测试覆盖率 然后我们运行Sonar插件进行源代码分析 一切都运行良好 我们可以看到 SonarCube 服务器上的分析 包括覆盖范围 但我们希
  • Symfony 框架的最佳论坛插件解决方案是什么?

    我正在寻找一个好的解决方案整合论坛进入 symfony 应用程序 像 phpBB 这样的东西会很棒 我见过 phpBB 插件与 symfony 集成 但这不足以满足我的目的 而且 在我看来 映射数据库表是一种蹩脚的方法 如果有人知道 Sym
  • 如何在微服务/容器/云环境中管理机密?

    微服务和云是一回事 每个人都在谈论和写作 就我个人而言 我对这个主题思考了很多 如何利用它从中受益 可能面临哪些挑战 这如何加速日常开发 以及如何管理一切 几天来困扰我的一个问题是 如何在微服务 云环境中管理机密 想象一下一家拥有 150