通过 Dockerfile/docker-compose 管理机密

问题描述 投票:0回答:1

背景

我正在 Dockerfile 和 docker-compose 之间切换,以找出部署 docker 映像并将其推送到 docker 注册表的最佳安全实践,以便每个人都可以使用它。

目前,我有一个 FastAPI 应用程序,它为 AWS 服务使用 AWS API 令牌。我正在尝试找出一种可以在 Docker for Windows (GUI) 和 Docker for Linux 中工作的解决方案。

在 Docker Windows GUI 中,很清楚,当我从注册表中提取映像后,我可以在映像环境中添加 API 令牌并旋转容器。

我需要知道

说到 Docker for Linux,我正在尝试找出一种通过 Dockerfile 或 docker-compose.yml 使用 AWS API 令牌构建映像的方法。

我尝试过的事情

  • 遵循此博客
  • 的解决方案

正如我之前所说,如果我做了博客中提到的那样的事情。适合我个人使用。从注册表中提取我的 docker 映像的用户也将拥有我的 AWS Secret。我该如何更好地处理这种情况

Dockerfile 的当前状态

FROM python:3.10

# Set the working directory to /app
WORKDIR /src

# Copy the current directory contents into the container at /app
ADD ./ /src

# Install any needed packages specified in requirements.txt
#RUN /usr/local/bin/python -m pip install --upgrade pip
RUN pip install --upgrade pip
RUN pip install --no-cache-dir -r requirements.txt

# Make port 80 available to the world outside this container
EXPOSE 8000

# Run app.py when the container launches
CMD ["python", "main.py"]
docker docker-compose dockerfile docker-registry
1个回答
0
投票

以下是如何使用 Docker 构建时机密在 Docker for Linux 中管理机密:

首先,创建一个包含您的秘密的文件。例如,假设您有一个 AWS API 令牌,请创建一个名为 aws_token.txt 的文件并将您的令牌放入其中。

现在,修改您的 Dockerfile 以在构建过程中使用构建时密钥。

以下是如何做到这一点的示例:

来自Python:3.10

将工作目录设置为/app

工作目录/src

将当前目录内容复制到 /app 的容器中

添加./ /src

安装requirements.txt中指定的任何需要的包

运行 pip install --升级 pip 运行 pip install --no-cache-dir -rrequirements.txt

使端口 80 可供该容器之外的世界使用

暴露8000

使用构建时秘密设置环境变量

ARG AWS_TOKEN ENV AWS_TOKEN=$AWS_TOKEN

容器启动时运行 app.py

CMD [“python”,“main.py”] 构建 Docker 映像:构建 Docker 映像时,将构建时密钥作为构建参数传递。您可以这样做: docker build --build-arg AWS_TOKEN=$(cat aws_token.txt) -t your_image_name .

最后,在构建过程中,aws_token.txt 文件中的 AWS 令牌将作为构建时参数安全地传递到 Docker 映像。然后它将作为容器内的环境变量进行访问。

由于 Docker 构建时机密存储在 Docker 构建缓存中,这意味着它们不会保留在最终映像中。这有助于维护您的秘密的安全。

© www.soinside.com 2019 - 2024. All rights reserved.