在Docker容器中获取弹性beantalk环境变量

Wil*_*con 5 amazon-web-services docker amazon-elastic-beanstalk

因此,我正在尝试不要在dockerfile上放置敏感信息。合理的方法是将凭据放入ebs配置(GUI)中作为ENV变量。但是,docker build似乎无法访问ENV变量。有什么想法吗?

在此处输入图片说明

FROM jupyter/scipy-notebook

USER root

ARG AWS_ACCESS_KEY_ID
RUN echo {$AWS_ACCESS_KEY_ID}
Run Code Online (Sandbox Code Playgroud)

Von*_*onC -1

在 Docker 中使用秘密或敏感信息包含两个潜在的时间范围:

  1. 构建时间:构建 Docker 镜像时。
  2. 运行时:当 Docker 映像中的容器正在执行时。

对于AWS Elastic Beanstalk 中的运行时机密:

Elastic Beanstalk环境变量可用于将运行时机密传递给应用程序。这些变量可以通过 AWS 管理控制台、EB CLI 或 AWS 开发工具包进行设置,并在运行时注入到 Docker 容器中。然后您的应用程序可以读取这些环境变量。

但是,对于构建时的秘密

  • --build-argDocker 有一种本机机制,可以在命令期间使用参数传递构建时秘密docker build。该方法使用ARGDockerfile 中的指令。

  • 然而,截至上次更新,Elastic Beanstalk 的 Docker 集成不允许在映像构建过程中传递构建参数。这意味着您在使用 Elastic Beanstalk 进行部署时无法使用ARG构建时机密机制。

因此,如果您的用例特别需要 Elastic Beanstalk 的构建时机密,您可能需要考虑替代策略:

  1. 预构建镜像:在安全的环境中构建 Docker 镜像,您可以在其中使用构建时机密。将这些预构建的映像推送到私有注册表(例如 Amazon ECR),然后在 Elastic Beanstalk 中引用这些映像。
    请记住:将机密存储或烘焙到 Docker 映像中存在安全风险。相反,更喜欢在运行时注入秘密或在没有显式凭据的情况下授予权限的方法。
  2. IAM 角色:对于 AWS 特定密钥(例如访问 S3 或 DynamoDB),无需传递密钥,而是将 IAM 角色附加到您的 Elastic Beanstalk 环境的 EC2 实例以授予必要的权限。容器内的 AWS 开发工具包将自动使用这些权限,无需显式凭证。例如,此处
    用于访问AWS 秘密管理器

  • 但是这个命令是从哪里调用的呢?.eb 扩展名?随机文件?dockerfile?ebs 配置 GUI?(此外,如果在 .ebextensions 或 dockerfile 上,它就达不到不提交密钥或凭据的目的) (4认同)
  • 遗憾的是,目前您无法将 ARG 馈送到基于 EB 的 Dockerfile 中。或者看起来是这样。他们应该做的是将所有定义的环境变量自动传递给“docker build”,但他们没有。或者看起来是这样 (3认同)