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

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(使用前将#替换为@)

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

  • 如何将工作树与提交进行比较?

    我在用着 git diff mycommit 用于比较我的工作树mycommit 但它似乎忽略当前索引中不存在的文件 您可以按如下方式重现它 git init echo A gt A txt git add git commit m A g
  • git 日志历史记录图,每次提交一行,彩色,带有日期

    我需要的格式如下 git log decorate graph oneline date order 但我也需要它 包含日期 短 具有相同的颜色 I tried git log decorate graph oneline date ord
  • 使用 Docker 在本地主机上的“requests”连接错误

    我正在尝试开发客户端服务器应用程序 但遇到了一些问题 我的两个服务都是在单独的 docker 容器中本地开发的 客户端使用 api 从 api 获取数据requestspython 库 它可以在生产中使用 但在本地 我无法使用 reques
  • 使用 Docker 文件分配附加功能

    我需要部署 Docker 映像 但我只想使用 Docker run 命令而不使用其任何参数 我想在运行容器时分配特殊权限 这是我的 Docker 运行命令 docker run cap add SYS ADMIN cap add DAC R
  • 从镜像创建 Docker 容器而不启动它

    作为我的部署策略的一部分 我使用 Upstart 管理 Docker 容器 为此 我需要从注册表中提取图像并创建一个命名容器 如建议的那样 用于运行容器的新贵脚本不会管理生命周期 https stackoverflow com questi
  • Git 将一个分支合并到所有其他分支中

    我知道这个问题已经在这里被问过 https stackoverflow com questions 2329716 merging changes from master into all branches using git https
  • Docker Compose 保持容器运行

    我想使用 docker compose 启动一个服务并保持容器运行 这样我就可以通过 docker检查 获取它的IP地址 然而 容器总是在启动后立即退出 我尝试将 command sleep 60 和其他内容添加到 docker compo
  • 无法初始化 NVML:几个小时后 Docker 中出现未知错误

    我遇到有趣而奇怪的问题 当我使用 GPU 启动 docker 容器时 它工作正常 并且我看到 docker 中的所有 GPU 然而 几个小时或几天后 我无法在docker中使用GPU 当我做nvidia smi在泊坞窗机器中 我看到这条消息
  • 带有 git Remote 的 Gem 文件在 Heroku 推送上失败

    我的 gemfile 中有以下行 gem client side validations git gt email protected cdn cgi l email protection Dakuan client side valida
  • 如何通过 Apache Airflow 中的 Docker Operator 使用卷

    我正在开发一个 ETL 流程 使用 DockerOperator 通过 Apache Airflow 进行调度和编排 我正在使用 Windows 笔记本电脑 因此我只能从 Docker 容器内运行 Apache Airflow 我能够在我的
  • Git 在哪里存储标签?

    Git 在哪里存储标签 我执行 git tag v0 1 0 v0 10 0 v0 11 0 但目录 git refs tags是空的 Git 将这些标签存储在哪里 谢谢 它们也可以存储在 git packed refs
  • git 排除与忽略

    I use Tower http www git tower com 用于在 Mac 中使用 Git Tower 中的设置具有创建 gitignore 的 忽略 部分 但它还有另一个名为 排除 的部分 似乎可以将排除与 git ls fil
  • FreeBSD 可以在 Docker 中运行吗?

    我一直在寻找一个Docker的图像FreeBSD但找不到 FreeBSD可以在docker中运行吗 如果没有 为什么不呢 从未来编辑 不 你不能 以下项目都没有超越原型 从技术上讲是可以的 但是你需要一个 FreeBSD 主机来完成它 而
  • 无法通过 Git Bash 克隆 git 存储库

    在尝试使用克隆存储库时git clone 它显示以下错误 致命 无法访问 https github com microsoft c9 python getting started git https github com microsoft
  • Windows 上的 boot2docker 缺少 apt-get / 包管理器

    我在 boot2docker 中 我不确定我完全理解它 但它似乎是我正在进行的项目所需要的 我已经通过 ssh 登录了 并且尝试对我们的项目进行 make 但是我得到了 make not found 然后我尝试了一个 apt get ins
  • 使当前提交成为 Git 存储库中唯一(初始)提交?

    我目前有一个本地 Git 存储库 我将其推送到 Github 存储库 本地存储库有约 10 次提交 Github 存储库是其同步副本 我想要做的是从本地 Git 存储库中删除所有版本历史记录 以便存储库的当前内容显示为唯一提交 因此存储库中
  • Git 更改丢失 - 为什么?

    我们的开发团队正在使用 git 最近我们至少两次丢失了文件更改 我们正在使用私人 Github 存储库 在当前情况下 我们可以返回 Github 上的日志并查看我对文件所做的一些更新 后来 另一位团队成员更改了文件的不同部分 它似乎破坏了我
  • `git push` -- 没有输出,什么也没有发生

    touch test git add test git commit m test git push u origin master 这奏效了 该文件已上传到存储库 rm test cp R website website git rm t
  • 什么会阻止 Docker 容器中运行的代码连接到单独服务器上的数据库?

    我有一个在 Ubuntu 14 04 上的 Docker 容器中运行的 NET Core 1 1 应用程序 它无法连接到在单独服务器上运行的 SQL Server 数据库 错误是 未处理的异常 System Data SqlClient S
  • VSTS:在构建过期的情况下自动变基/合并和重新排队构建验证门

    我们最近对 PR 上的构建验证门进行了更改 这样 如果另一个提交在当前 PR 完成之前进入主分支 则构建会 立即 过期 看here https stackoverflow com questions 49418800 vsts invali

随机推荐

  • 通过 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