Docker:可以从生成的图像中恢复在单个 运行 命令中创建和删除的秘密吗?
Docker: Can a secret created and deleted in a single RUN command be recovered from the resulting image?
我想在 docker 构建过程中使用一些密钥。所以我有了将这些键作为构建参数注入构建过程的想法。这应该是安全的。 official documentation states:
Also, these values don’t persist in the intermediate or final images like ENV values do.
这是 Dockerfile 的示例:
FROM ubuntu:latest
ARG key
...
RUN echo $key > /tmp/key && doSomethingWithKey && rm /tmp/key
...
如您所见,有一次我需要将此密钥粘贴到一个文件中。为确保此密钥不会 "baked" 进入最终图像,我立即删除了密钥。
这是构建命令:
$ docker build --build-arg key="secret" .
现在我的问题是:这是否安全,或者密钥是否在最终图像中得到 "stored"?
密钥不会存储在文件系统中,但会存储在图层元数据中,您可以在图像上使用 docker history
查看。因此我建议不要这样做。
我最常看到此请求是从私人存储库中检出代码,其中在构建中使用了该存储库的登录名。如果是这种情况,您应该在构建命令之前签出代码,然后从 Dockerfile 中对签出的代码执行 COPY
。
经过验证的回应:它确实在最终图像中保留了秘密值。
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
编辑。关于 事件的免责声明。
我的 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
ART == UTC-3
我想在 docker 构建过程中使用一些密钥。所以我有了将这些键作为构建参数注入构建过程的想法。这应该是安全的。 official documentation states:
Also, these values don’t persist in the intermediate or final images like ENV values do.
这是 Dockerfile 的示例:
FROM ubuntu:latest
ARG key
...
RUN echo $key > /tmp/key && doSomethingWithKey && rm /tmp/key
...
如您所见,有一次我需要将此密钥粘贴到一个文件中。为确保此密钥不会 "baked" 进入最终图像,我立即删除了密钥。
这是构建命令:
$ docker build --build-arg key="secret" .
现在我的问题是:这是否安全,或者密钥是否在最终图像中得到 "stored"?
密钥不会存储在文件系统中,但会存储在图层元数据中,您可以在图像上使用 docker history
查看。因此我建议不要这样做。
我最常看到此请求是从私人存储库中检出代码,其中在构建中使用了该存储库的登录名。如果是这种情况,您应该在构建命令之前签出代码,然后从 Dockerfile 中对签出的代码执行 COPY
。
经过验证的回应:它确实在最终图像中保留了秘密值。
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
编辑。关于
我的 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
ART == UTC-3