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 セキュリティ
コンテナセキュリティの課題は、ダウンロードしたコンテナイメージが期待通りであるか。 セキュリティと一貫性の観点から期待通りのイメージがダウンロードされることの保証が重要。 Dockerのイメージタグは便利だが常に一貫した特定のイメージを指すとは限らないためSHA-256ハッシュを使ってイメージを識別すること
TODO: これLT アプリケーションがrootで実行されている もしアプリケーションにOSコマンドインジェクションやディレクトリトラバーサルなどの脆弱性があり、それが悪用された場合アプリケーションがroot権限で実行されていると悲惨なことになります
docker security
Docker パーミッション
LinuxではDockerを実行した場合、作成されたファイルの所有権が root になる(公式はrootで対応するなと言っている)
そのためDockerfileの ADD/COPY に --chown オプションができており、それ用のuserを作成するルールになっている。
Dockerfile ---chown 参考URL