状況
Web アプリの Dockerfile をレビューしている。本番ではホストのアップロード用ディレクトリをバインドマウントして動かす。
安全面で最も優先して指摘すべき点は?
FROM python:3.13-slimWORKDIR /appCOPY . .RUN pip install --no-cache-dir -r requirements.txtCMD ["python", "app.py"]正答
- --no-cache-dir を付けるとパッケージが壊れるので、外すべき
- slim ではなく alpine にすれば、それだけで脆弱性は無くなる
- USER の指定が無く root で動く。一般ユーザーを作って USER で切り替える
- CMD より前に EXPOSE を書かないと、ポートを公開できない
解説
Dockerfile に USER が無いと、コンテナのプロセスは root で動く。アプリの脆弱性を突かれると、攻撃者はコンテナ内で root として動けるうえ、バインドマウントしたホストのディレクトリも root の権限で書き換えられ、ホストへの被害につながりやすい。一般ユーザーを作り、USER で切り替えて動かすのが公式のベストプラクティス。--no-cache-dir はイメージを小さくする正しい指定。alpine にしても脆弱性が無くなるわけではない。EXPOSE は記録のための命令で、公開は実行時の -p で行う。
参考: docs.docker.com
この問題を含む Docker のテストを制限時間つきで解く
Dockerクイズへ