DOCKER_BUILDKIT - 在构建时从 github 操作传递令牌秘密

时间:2021-02-09 08:45:53

标签: python docker pip github-actions

我有一个使用 twine 发布到 Azure DevOps 工件的 pip 可安装包。

在我的构建映像中,我需要下载该软件包并使用 pip 进行安装。所以我需要 对 azure 工件进行身份验证以获取它。所以我使用 artifacts-keyring 这样做

pip 可安装的 URL 是这样的:

https://<token>@pkgs.dev.azure.com/<org>/<project>/_packaging/<feed>/pypi/simple/ --no-cache-dir <package-name>

我正在尝试使用 Docker BuildKit 在构建期间传递令牌。 我正在安装秘密并通过使用 cat 命令替换获取其值来使用它:

# syntax = docker/dockerfile:1.2

ENV ARTIFACTS_KEYRING_NONINTERACTIVE_MODE=true

RUN --mount=type=secret,id=azdevopstoken,dst=/run/secrets/azdevopstoken \
    pip install --upgrade pip && \
    pip install pyyaml numpy lxml artifacts-keyring && \
    echo pip install -i https://"$(cat /run/secrets/azdevopstoken)"@pkgs.dev.azure.com/org>/<project>/_packaging/feed/pypi/simple/ --no-cache-dir package-name

当我运行时,它可以从我的工作站本地运行: (令牌为纯文本的 src 文件是我本地目录结构项目中的 azdevopstoken.txt

DOCKER_BUILDKIT=1 docker image build --secret id=azdevopstoken,src=./azdevopstoken.txt --progress plain  . -t my-image:tag

现在我从 GitHub 操作管道运行此构建命令 我得到了这个输出:

Scould not parse secrets: [id=azdevopstoken,src=./azdevopstoken.txt]: failed to stat ./azdevopstoken.txt: stat ./azdevopstoken.txt: no such file or directory
Error: Process completed with exit code 1.

这是我的预期,因为我没有上传 azdevopstoken.txt 文件,因为我不想将它放在我的存储库中,因为我的令牌是纯文本的。

仔细阅读here,我发现有一种加密秘密的解决方法,也许这可能是从我的 github 操作管道中实现 buildkit 的一个很好的解决方案,但我认为这是我工作流程中的一个额外步骤,所以我不确定是否遵循此选项。 最重要的是,我已经在以这种方式构建时使用 --build-arg 标志以旧方式传递了秘密:

ARG AZ_DEVOPS_TOKEN
ENV AZ_DEVOPS_TOKEN=$AZ_DEVOPS_TOKEN
RUN pip install --upgrade pip && \
    pip install pyyaml numpy lxml artifacts-keyring && \
    pip install -i https://$AZ_DEVOPS_TOKEN@pkgs.dev.azure.com/ORG/PROJECT/_packaging/feed/pypi/simple/ --no-cache-dir PACKAGE-NAME

通过这种方式从 GitHub 操作成为我的 docker build 命令:

docker image build --build-arg AZ_DEVOPS_TOKEN="${{ secrets.AZ_DEVOPS_TOKEN }}"  . -t containerregistry.azurecr.io/my-image:preview

它工作得很好,问题是,我听说 --build-arg 不是传递敏感信息的安全解决方案。尽管如此,我还是在执行此命令后运行了 docker history,但我看不到暴露的秘密或类似的东西。

> docker history af-fem-uploader:preview-buildarg
IMAGE          CREATED          CREATED BY                                      SIZE      COMMENT
2eff105408c9   34 seconds ago   RUN /bin/sh -c pip install pytest && pytest …   5MB       buildkit.dockerfile.v0
<missing>      38 seconds ago   WORKDIR /home/site/wwwroot/HttpUploadTrigger/   0B        buildkit.dockerfile.v0
<missing>      38 seconds ago   ADD . /home/site/wwwroot # buildkit             1.9MB     buildkit.dockerfile.v0

那么,如果我必须将包含机密的文件上传到我的存储库,那么通过 BUILDKIT 传递机密以避免暴露它们有什么好处?

也许我遗漏了什么。

0 个答案:

没有答案