在 Docker 中保护私有 PyPi 的凭据

Securing credentials for private PyPi in Docker

我正在构建一个 Docker 映像,需要 运行 pip 安装与具有凭据的私有 PyPi。 保护凭据的最佳方法是什么? 使用各种文件配置选项(pip.conf、requirements.txt、.netrc)即使我删除它们仍然是一个漏洞,因为它们可以恢复。 环境变量也是可见的。 什么是最安全的方法?

我知道您想在构建时提供这些凭据并在之后删除它们。

那么,使用 pip 处理此问题的最安全方法是使用多阶段构建过程。

首先,您将声明一个初始 build-image,其中包含文件配置和 download/compile 您所需软件包可能需要的任何依赖项;不要担心恢复这些文件的可能性,因为您只会将它们用于构建过程。

然后定义没有构建依赖项的最终映像,并仅从项目中复制您想要 运行 的源代码和构建映像中的依赖项。生成的图像将没有配置文件,并且不可能恢复它们,因为它们从未存在过。

FROM python:3.10-slim as build
RUN apt-get update
RUN apt-get install -y --no-install-recommends \
    build-essential gcc

WORKDIR /usr/app
RUN python -m -venv /usr/app/venv
ENV PATH="/usr/app/venv/bin:$PATH"

[HERE YOU COPY YOUR CONFIGURATION FILES WITH CREDENTIALS]
COPY requirements.txt
RUN pip install -r requirements

FROM python:3.10-slim
WORKDIR /usr/app
COPY --from=build /usr/app/venv ./venv
[HERE YOU COPY YOUR SOURCE CODE INTO YOUR CURRENT WORKDIR]

ENV PATH="/usr/app/venv/bin:$PATH"
ENTRYPOINT ["python", "whatever.py"]