Dockerイメージからクレデンシャル情報を抜いてみる

  • 投稿者:
  • 投稿カテゴリー:docker

ビルドの途中で利用した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イメージビルド時の秘密情報の扱い方に関するまとめがわかりやすかった。