Chapter 10

セキュリティ

ここだけは理解しよう

Docker を利用したコンテナは非常に快適ですが、
本格的に利用をしていく場合はセキュリティを開発者も意識する必要があります。

  • root ユーザは使わない
  • 公式 Docker イメージをベースイメージにする
  • ビルド時にシークレット情報を入れない
  • ホストのマウントは注意しましょう
  • .dockerignore を使いましょう

rootユーザを使わない

rootユーザはCapabilityで制御されてはいますが、コンテナ内に侵入されたときに最小限の影響に留めるためにも過剰な権限は基本的に不要です。
Docker Image のデフォルトがrootユーザのイメージは多いので注意が必要です。
USER コマンド使用してユーザーを変更しましょう。
引用:rootユーザを使わない

GCP などの IAM などでもロールは最小限にしましょうとあるように Docker Image でもユーザへの権限は最小限にしましょう。仮にコンテナ内に悪意あるユーザが入っても権限がなければ書き換えなどもできないため。

正直 Dockerfile を作ってコンテナでの開発をする際に、
この観点を持っていなかったので、ユーザは root を使っていました。
かなり反省しています。

公式Dockerイメージをベースイメージにする

ユーザが公開しているイメージの中には悪意あるイメージも存在します。
そちらを利用してしまうとマイニングや攻撃などを行なってしまいます。
加害者や被害者にならないためにも、公式のイメージを利用しましょう。

sec1.png

公式の物にはOFFICIAL IMAGEと記載されています。

ビルド時にシークレット情報を入れない

Dockerfile にパスワードなどを記載しないようにしましょう。
Dockerfile 自体も Github に管理しているケースが多いはずですが、
Dockerfile にパスワードを書いて、Github に公開しているだけでも別のリスクもありますよね。

私がやっているケースでは、
2 つのパターンでシークレット情報を利用しています。

1.GCP(パブリッククラウド)のシークレット利用サービス(Secret Manager)を利用する。
2.Github などで変数登録して CI/CD 経由で利用する。

他にもやり方はあるはずですが、
基本的な考え方としては Dockerfile にパスワードなど機密情報を記載しない。
ここを覚えておきましょう。