我想在docker构建过程中使用一些密钥。所以我有想法将这些键作为构建参数注入构建过程。这应该是安全的。 official documentation states:
此外,这些值不会像ENV值那样保留在中间或最终图像中。
以下是Dockerfile的示例:
FROM ubuntu:latest
ARG key
...
RUN echo $key > /tmp/key && doSomethingWithKey && rm /tmp/key
...
如您所见,我需要将此密钥粘贴到文件中。确保此密钥不会被烘焙"在最终图像中,我立即删除了密钥。
这是构建命令:
$ docker build --build-arg key="secret" .
现在我的问题是:这是安全的还是秘密密钥得到了存储"在最后的图像?
答案 0 :(得分:2)
密钥不会存储在文件系统中,但会存储在图层元数据中,您可以在图片上看到docker history
。因此,我建议不要这样做。
我最常见的是这个请求来自私人仓库的代码检查,其中登录到该仓库正在构建中使用。如果是这种情况,您应该在构建命令之前检查代码,然后从Dockerfile中执行已检出代码的COPY
。
答案 1 :(得分: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 vs UTC):
~
▶ docker run ubuntu date
Tue May 30 16:27:29 UTC 2017
ART == UTC-3