Docker build context は秘密情報ファイルを除外し、build stage の COPY で焼き込まない
Docker
セキュリティ
環境変数
知識
判断
運用
Dockerfile の build stage でプロジェクト全体をコピーする構成では、最終イメージに残らないファイルでも、ビルドコンテキストや中間レイヤー、ビルドキャッシュ、フレームワークの env 読み込みを通じて秘密情報が露出する可能性がある。環境変数ファイルを Git ignore しているだけでは、Docker build context への混入は防げない。
判断基準
- build stage でカレントツリー全体をコピーするなら、Docker ignore 側で env ファイル、秘密情報、ローカル設定を明示的に除外する。
- 最終 stage にコピーされないから安全、と判断しない。中間 stage やキャッシュに残る前提で扱う。
- フロントエンドビルドでは、フレームワークが build 時に env ファイルを自動読込することがあるため、公開してよい接頭辞付き変数と秘密情報を分け、秘密情報はプラットフォームの環境変数や build argument の注入経路に寄せる。
- 依存ディレクトリやビルド成果物の除外とは別に、env 系ファイルを独立したセキュリティ除外ルールとして確認する。
検証
ビルド前に ignore 設定で env 系ファイルが context に入らないことを確認し、秘密情報スキャナで現在ツリーと履歴を redacted で確認する。さらに Dockerfile に全体コピーがある場合は、最終イメージだけでなく build stage と build cache に秘密情報が触れていない前提を置けるか確認する。