セキュリティ
Dockerも他のソフトウェア同様にセキュリティに気を配る必要があります。
rootユーザを使わない¶
rootユーザはCapabilityで制御されてはいますが、コンテナ内に侵入されたときに最小限の影響に留めるためにも過剰な権限は基本的に不要です。
Docker Image のデフォルトがrootユーザのイメージは多いので注意が必要です。
USER
コマンド使用してユーザーを変更しましょう。
野良のDockerイメージをベースイメージにしない¶
所謂ユーザー製のイメージをベースイメージとして使うことはリスクです。
悪意を持った野良イメージは過去に何度も登場し、マイニングや攻撃などが行われました。
また、Dockerfileが公開されていた場合でも今後更新される可能性は十分にあります。
基本的にベースイメージは公式のものをしようするようにしましょう。
ビルド時に機微情報を与えない¶
ビルド時にパスワードや秘密鍵のような機微情報を与えないようにしましょう。
Dockerのビルドはレイヤー毎にスナップショットがとられ、中間イメージも実行することができます。
どうしても必要な場合は --secret
や --ssh
オプションを使用してセキュアにビルドをしましょう。
また、パスワードや接続情報などは環境変数やVaultなどへ格納しましょう。
ホストのファイルのマウントの仕方¶
ホストのファイルをマウントする際は十分に注意してマウントを行いましょう。
最小限の権限とパスで範囲を狭くするようにします。
また、特に注意が必要なのはdockerソケットです。
近年、CIや監視などでdockerソケットのマウントを要求するソフトウェアが増えてきました。
安易に与えるのは控え、ソケットをマウントしなければならない場合はRead-Onlyでマウントするようにしましょう。
.dockerignore ファイルを使う¶
Dockerビルド時に無視するパスを記述するファイルです。 .gitignore
のようなイメージに近いです。
.env
のようなDBへの接続情報やSaaSのアクセスキーが記載されているファイルをビルドに含めてしまう。
他にも .git
や node_modules
のようなビルド時に不要なパスは無視することでビルドが高速かつイメージが軽量になるので良いでしょう。