gpt4 book ai didi

deployment - 运行时使用的 Docker 和敏感信息

转载 作者:行者123 更新时间:2023-12-04 20:38:57 25 4
gpt4 key购买 nike

我们正在对接一个应用程序(用 Node.js 编写),该应用程序需要在运行时访问一些敏感数据(不同服务的 API token ),我找不到任何推荐的方法来处理这个问题。

一些信息:

  • 敏感信息不在我们的代码库中,但它以加密格式保存在另一个存储库中。
  • 在我们当前的部署中,没有 Docker,我们使用 git 更新代码库,然后我们通过 SSH 手动复制敏感信息。
  • docker 镜像将存储在一个私有(private)的、自托管的注册表中

  • 我可以想到一些不同的方法,但它们都有一些缺点:
  • 在构建时将敏感信息包含在 Docker 镜像中。这当然是最简单的一个;但是,它使任何有权访问图像的人都可以使用它们(我不知道我们是否应该那么信任注册表)。
  • 与 1 类似,但在仅数据图像中具有凭据。
  • 在镜像中创建一个链接到主机系统目录的卷,并像我们现在所做的那样通过 SSH 手动复制凭据。这也很方便,但是我们不能轻易启动新服务器(也许我们可以使用 etcd 之类的东西来同步它们?)
  • 将信息作为环境变量传递。但是,我们现在有 5 对不同的 API 凭证,这有点不方便。然而,最重要的是,我们需要在配置脚本(将执行以运行 Docker 镜像的命令)中保留另一个敏感信息副本,这很容易产生问题(例如,git 中意外包含凭据等)。

  • PS:我做了一些研究,但找不到与我的问题类似的东西。其他问题(如 this one )是关于构建时所需的敏感信息;在我们的例子中,我们需要运行时的信息

    最佳答案

    我过去使用过您的选项 3 和 4 来解决此问题。改写/详细说明:

    Create a volume in the image that links to a directory in the host system, and manually copy the credentials over SSH like we're doing right now.



    我使用配置管理(Chef 或 Ansible)在主机上设置凭据。如果应用程序需要一个需要 API token 或数据库凭据的配置文件,我会使用配置管理从模板创建该文件。 Chef 可以从加密的数据包或属性中读取凭据,在主机上设置文件,然后使用您描述的卷启动容器。

    请注意,在容器中,您可能需要一个包装器来运行应用程序。包装器将配置文件从安装的任何卷复制到应用程序期望的任何位置,然后启动应用程序。

    Pass the information as environment variables. However, we have 5 different pairs of API credentials right now, which makes this a bit inconvenient. Most importantly, however, we would need to keep another copy of the sensitive information in the configuration scripts (the commands that will be executed to run Docker images), and this can easily create problems (e.g. credentials accidentally included in git, etc).



    是的,使用 -e key=value 传递一堆环境变量很麻烦语法,但这是我更喜欢这样做的方式。请记住,这些变量仍然会暴露给任何有权访问 Docker 守护程序的人。如果您的 docker run命令以编程方式组成,它更容易。

    如果没有,请使用 --env-file讨论的标志 here in the Docker docs .您创建一个包含 key=value 对的文件,然后使用该文件运行一个容器。
    $ cat >> myenv << END
    FOO=BAR
    BAR=BAZ
    END
    $ docker run --env-file myenv

    myenv如上所述,可以使用 chef/config 管理创建文件。

    如果您在 AWS 上托管,则可以在此处利用 KMS。保持通过 KMS 加密的 env 文件或配置文件(在卷中传递给容器)。在容器中,使用包装脚本调用 KMS,解密文件,将其移入并启动应用程序。这样配置数据就不会暴露在磁盘上。

    关于deployment - 运行时使用的 Docker 和敏感信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30089677/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com