ビルドの途中で利用したsecret1.txt・secret2.txt というクレデンシャル情報を抜いてみる。
Dockerfile は以下のようになっている。
# cat secret1.txt secret1 # cat Dockerfile FROM alpine COPY secret1.txt /root/ RUN echo "secret2" > /root/secret2.txt RUN rm -f /root/secret*.txt # docker build -t secret . Sending build context to Docker daemon 563.7kB Step 1/4 : FROM alpine ---> 6dbb9cc54074 Step 2/4 : COPY secret1.txt /root/ ---> 4f7d0c3d6153 Step 3/4 : RUN echo "secret2" > /root/secret2.txt ---> Running in 19a80f7e502b Removing intermediate container 19a80f7e502b ---> 94d8f270e9dc Step 4/4 : RUN rm -f /root/secret*.txt ---> Running in b9b47d98e1a2 Removing intermediate container b9b47d98e1a2 ---> 5810935d0710 Successfully built 5810935d0710 Successfully tagged secret:latest # docker images | grep secret secret latest 5810935d0710 9 seconds ago 5.61MB
secret1.txt を抜いてみる
docker saveコマンドを利用して、イメージをtarファイルに変換することで各レイヤーの情報が確認可能。
secret1.txtを確認することができた。
# docker save secret | tar xv 3791771b51858e5a54d449ad00b357090eab2f66878abe7d385431e566c4c2e7/ 3791771b51858e5a54d449ad00b357090eab2f66878abe7d385431e566c4c2e7/VERSION 3791771b51858e5a54d449ad00b357090eab2f66878abe7d385431e566c4c2e7/json 3791771b51858e5a54d449ad00b357090eab2f66878abe7d385431e566c4c2e7/layer.tar 53c8ac202daef4973037f798a07cc9f6a3e3023ac39a416b91aeda87e71897d5/ 53c8ac202daef4973037f798a07cc9f6a3e3023ac39a416b91aeda87e71897d5/VERSION 53c8ac202daef4973037f798a07cc9f6a3e3023ac39a416b91aeda87e71897d5/json 53c8ac202daef4973037f798a07cc9f6a3e3023ac39a416b91aeda87e71897d5/layer.tar 567bda3a2f760cefcda1fb7f0681307d40921f5262112c54f1f2ccfb659046ad/ 567bda3a2f760cefcda1fb7f0681307d40921f5262112c54f1f2ccfb659046ad/VERSION 567bda3a2f760cefcda1fb7f0681307d40921f5262112c54f1f2ccfb659046ad/json 567bda3a2f760cefcda1fb7f0681307d40921f5262112c54f1f2ccfb659046ad/layer.tar 5810935d07102ca64f934e39187eff2d4ad49331c44ebb2bb21267834d8b1b2d.json a94784b663cd97b09b852c23669648acf46ded8bac4979f35c229cbf1d7eed56/ a94784b663cd97b09b852c23669648acf46ded8bac4979f35c229cbf1d7eed56/VERSION a94784b663cd97b09b852c23669648acf46ded8bac4979f35c229cbf1d7eed56/json a94784b663cd97b09b852c23669648acf46ded8bac4979f35c229cbf1d7eed56/layer.tar manifest.json repositories # tar xvf 567bda3a2f760cefcda1fb7f0681307d40921f5262112c54f1f2ccfb659046ad/layer.tar root/ root/secret1.txt # cat root/secret1.txt secret1
secret2.txt を簡単に抜いてみる
docker saveコマンドでも確認可能だが、docker historyコマンドのほうが簡単に確認可能。
secret2.txtを確認することができた。
# docker history secret IMAGE CREATED CREATED BY SIZE COMMENT 5810935d0710 10 minutes ago /bin/sh -c rm -f /root/secret*.txt 0B 94d8f270e9dc 10 minutes ago /bin/sh -c echo "secret2" > /root/secret2.txt 8B 4f7d0c3d6153 10 minutes ago /bin/sh -c #(nop) COPY file:a78fc932a75dbfa6… 8B 6dbb9cc54074 6 weeks ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B <missing> 6 weeks ago /bin/sh -c #(nop) ADD file:8ec69d882e7f29f06… 5.61MB
対策についてはDockerイメージビルド時の秘密情報の扱い方に関するまとめがわかりやすかった。