2

我想在我的 docker 构建过程中使用一些密钥。所以我有了将这些键作为构建参数注入构建过程的想法。这应该是安全的。官方文档指出

此外,这些值不会像 ENV 值那样保留在中间或最终图像中。

下面是一个 Dockerfile 的示例:

FROM ubuntu:latest
ARG key
...
RUN echo $key > /tmp/key && doSomethingWithKey && rm /tmp/key
...

如您所见,有一次我需要将此密钥粘贴到文件中。为了确保此密钥不会“烘焙”到最终图像中,我立即删除了该密钥。

这是构建命令:

$ docker build --build-arg key="secret" .

现在我的问题是:这是安全的还是密钥会“存储”在最终图像中?

4

2 回答 2

2

密钥不会存储在文件系统中,但会存储在层元数据中,您可以docker history在图像上看到。因此,我建议不要这样做。

我最常看到这个请求是来自私人仓库的代码签出,其中在构建中使用了该仓库的登录名。如果是这种情况,您应该在构建命令之前COPY签出代码,然后从 Dockerfile 中执行签出的代码。

于 2017-05-30T19:22:11.217 回答
2

一个经过验证的响应:它确实在最终图像中保留了秘密值。

FROM alpine

ARG key
ARG securekey

RUN echo $key > /tmp/key
RUN echo $securekey > /tmp/securekey && rm /tmp/key


docker build . \
    --build-arg key=mykey-isnotsecure \
    --build-arg securekey=mykey-issecure -t test

转储图像docker save

docker save test | strings | grep -o mykey............    

输出:

mykey-isnotsecure
mykey-issecure","
mykey-isnotsecure
mykey-isnotsecure
mykey-issecure","

正如 BMitch 所说:

docker history --no-trunc test
IMAGE                                                                     CREATED             CREATED BY                                                                                                     SIZE                COMMENT
sha256:e013810c5be50cffa0d9b5e723ec548cdcc686d99efdf792b2bda90baa0795c8   3 hours ago         |2 key=mykey-isnotsecure securekey=mykey-issecure /bin/sh -c echo $securekey > /tmp/securekey && rm /tmp/key   15 B
sha256:cabafd664056bc90ea9d71fafcdb65e4abe3d98a66c75066218fcf9a88962ba1   3 hours ago         |2 key=mykey-isnotsecure securekey=mykey-issecure /bin/sh -c echo $key > /tmp/key                              18 B
sha256:699ff2abecb92b13169a669d99c64fcc19c8d44590778c7b7ee944559208e81a   3 hours ago         /bin/sh -c #(nop)  ARG securekey                                                                               0 B
sha256:26aaa6f92951accc5cb21a13900f9cabee58f65119ffb0eb4b546c3ea19b3ce1   3 hours ago         /bin/sh -c #(nop)  ARG key                                                                                     0 B
sha256:a41a7446062d197dd4b21b38122dcc7b2399deb0750c4110925a7dd37c80f118   4 days ago          /bin/sh -c #(nop)  CMD ["/bin/sh"]                                                                             0 B
<missing>                                                                 4 days ago          /bin/sh -c #(nop) ADD file:ce33aabbc5f370e58ebe911e081ce093e3df18d689c2d5a5d092c77973f62a54 in /               3.97 MB

编辑。关于Time Machine事件的免责声明。

在我的 Mac 上:

▶ date
Tue May 30 16:45:39 ART 2017

我的容器是 3 小时轮班制(ART 与 UTC):

~
▶ docker run ubuntu date
Tue May 30 16:27:29 UTC 2017

艺术 == UTC-3

于 2017-05-30T19:33:43.257 回答