メインコンテンツまでスキップ

Docker Security

イメージの指定

Dockerのタグは時間が経つと変更されるためSHA256ハッシュを使ってバージョンを固定するのが推奨される。

Dockerのタグ(例: lts-alpine)は時間が経つと変わるため、SHA256ハッシュを使ってバージョンを固定するのが推奨される。
ただし、SHA256だけだと分かりにくいのでnode:20.18.3-alpine@sha256:<ハッシュ> のように書くと分かりやすく、意図しないアップデートを防げる。
nodeの場合node:20.18.3-alpineのSHA256ハッシュを取得して、Dockerfileに反映すればよい。

ヒント

SHA-256(Secure Hash Algorithm 256-bit)は、データのハッシュ値(固定長の一意な値)を生成する暗号学的ハッシュ関数の一種

SHA256ハッシュを使用し固定する手順

例:Node.js 20.18.3を使う場合の Dockerfile

node:20.18.3-alpineのSHA256ハッシュを取得する。

docker pull node:20.18.3-alpine
docker images --digests

これでsha256:xxxxxxxxxxxxxxxxxxxxxのようなハッシュが表示される。

Dockerfileを更新する。

FROM node:20.18.3-alpine@sha256:<取得したSHA256ハッシュ>
WORKDIR /usr/src/app
COPY . /usr/src/app
RUN npm install
CMD["npm", "start"]

Docker セキュリティ

参考URL

コンテナセキュリティの課題は、ダウンロードしたコンテナイメージが期待通りであるか。 セキュリティと一貫性の観点から期待通りのイメージがダウンロードされることの保証が重要。 Dockerのイメージタグは便利だが常に一貫した特定のイメージを指すとは限らないためSHA-256ハッシュを使ってイメージを識別すること

TODO: これLT アプリケーションがrootで実行されている もしアプリケーションにOSコマンドインジェクションやディレクトリトラバーサルなどの脆弱性があり、それが悪用された場合アプリケーションがroot権限で実行されていると悲惨なことになります

docker security

効率的に安全な Dockerfile を作るには

Docker パーミッション

LinuxではDockerを実行した場合、作成されたファイルの所有権が root になる(公式はrootで対応するなと言っている) そのためDockerfileの ADD/COPY--chown オプションができており、それ用のuserを作成するルールになっている。

Dockerfile ---chown 参考URL