Dockerfileのセキュリティベストプラクティス
Dockerfile内にセキュリティ対策を実装し、脆弱性と攻撃対象領域を最小限に抑えます。
「Dockerfileのセキュリティベストプラクティス」はCoddyKit上の無料Docker & DevOps Fundamentalsレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDocker & DevOps Fundamentals学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Docker & DevOps Fundamentalsコースには全4レッスンが含まれています。
Dockerfileを安全にする
Dockerfileのセキュリティに関するベストプラクティスへようこそ。安全なアプリケーションは、安全な基盤から始まります。
Dockerfileは単なるビルドスクリプトではありません。アプリケーションのセキュリティ設計図でもあります。ここで不適切な方法を取ると、重大な脆弱性につながる可能性があります。
このレッスンでは、Dockerイメージを強化し、潜在的な攻撃対象領域を最小限に抑えるための主要な方法を学びます。

信頼できるベースイメージから始める
FROM命令は、最初の防御線です。Docker Hubなどの信頼できる提供元から、公式で適切にメンテナンスされたベースイメージを必ず選択してください。
- 公式イメージ: 検証済みで、定期的に更新されています。
- 具体的なタグ:
latestは避け、予測可能性と安定性を確保するため、alpine:3.18などの具体的なバージョンタグを使用します。 - 最小限のイメージ: 「slim」または「alpine」バージョンを選びます。含まれるパッケージが少ないため、潜在的な脆弱性も少なくなります。
安全なベースイメージを選ぶ
最小限で具体的なベースイメージを選ぶと、セキュリティをどのように向上できるか見てみましょう。悪用される可能性のあるパッケージやツールの数を減らせます。
FROM alpine:3.18
# This is better than:
# FROM ubuntu:latest
# FROM python:latest
# Alpine is a minimal Linux distribution,
# making the image smaller and more secure.イメージサイズを最小化する
イメージに追加するファイル、パッケージ、依存関係はすべて「攻撃対象領域」を広げます。存在するソフトウェアが少ないほど、潜在的な脆弱性も少なくなります。
アプリケーションの実行にどうしても必要なものだけをインストールしてください。不要になったビルドツールや一時ファイルは削除します。
インストール後にクリーンアップする
パッケージをインストールするときは、必ずパッケージマネージャーのキャッシュを削除し、不要なファイルを消去してください。これにより最終的なイメージサイズが小さくなり、情報漏えいの可能性も減ります。
UbuntuなどのDebianベースのイメージでは、同じRUN命令内でapt-get cleanを実行し、/var/lib/apt/lists/*を削除します。
FROM debian:stable-slim
RUN apt-get update && \
apt-get install -y --no-install-recommends \
curl \
git && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# All in one RUN command to leverage Docker's caching and reduce layers.rootで実行しない
デフォルトでは、Dockerコンテナ内のプロセスはrootユーザーで実行されます。これは重大なセキュリティリスクです。
攻撃者にコンテナを制御されると、root権限を取得され、コンテナからの脱出やホストシステムの侵害を許す可能性があります。
必ず専用の非rootユーザーを作成し、USER命令を使用してそのユーザーに切り替えてください。
非rootユーザーを設定する
新しいユーザーを作成し、それ以降のコマンドをそのユーザーで実行するようDockerに指示する方法を見てみましょう。これにより、コンテナが侵害された場合の被害を大幅に抑えられます。
FROM alpine:3.18
# Create a non-root user and group
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
# Switch to the non-root user
USER appuser
CMD ["echo", "Hello from non-root user!"]Dockerfileに秘密情報を入れない
APIキー、データベースのパスワード、秘密鍵などの機密情報を、Dockerfileに直接ハードコードしたり、イメージにコミットしたりしないでください。
後のレイヤーで削除したとしても、イメージにアクセスできる人なら誰でも、これらの秘密情報を簡単に取り出せます。
代わりに、Docker Secrets、環境変数(機密性のないデータの場合)、実行時のKubernetes Secretsなど、安全な方法を使用してください。
ADDよりCOPYを優先する
COPYとADDはどちらもファイルをイメージにコピーする命令ですが、セキュリティと分かりやすさの観点から、通常はCOPYが推奨されます。
COPY: ローカルのファイルやディレクトリだけをコピーします。シンプルで予測しやすい動作です。ADD: URLからファイルを取得したり、圧縮アーカイブ(tar、gzip)を自動展開したりできます。この追加機能には、信頼できないコンテンツのダウンロードや悪意のあるアーカイブの展開など、潜在的なセキュリティリスクがあります。
ADDの高度な機能が明確に必要で、リスクを理解している場合を除き、COPYを使用してください。
セキュリティチェック
攻撃対象領域を減らし、潜在的な脆弱性を最小限に抑えるうえで、次のDockerfileのプラクティスのうち重要なものはどれでしょうか。
安全なDockerfileへの道のり
よくできました。安全なコンテナ化の基盤となる、Dockerfileの重要なセキュリティベストプラクティスを学びました。
- 信頼できる最小限のベースイメージから始める: 公式で具体的なタグが付いた軽量なイメージを使用します。
- イメージサイズを最小化する: 必要なものだけをインストールし、インストール後にクリーンアップします。
- 非rootユーザーで実行する: 権限を制限して、侵害された場合の影響を抑えます。
- 秘密情報を避ける: Dockerfileに機密データをハードコードしないでください。
- `COPY`を`ADD`より優先する: より予測しやすく安全な
COPY命令を選びます。
これらのプラクティスを適用することで、コンテナ化されたアプリケーションのセキュリティを大幅に向上できます。
よくある質問
「Dockerfileのセキュリティベストプラクティス」レッスンは無料ですか?
はい。「Dockerfileのセキュリティベストプラクティス」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Docker & DevOps Fundamentalsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Docker & DevOps Fundamentalsコースには全4レッスンが含まれています。
「Dockerfileのセキュリティベストプラクティス」で何を学びますか?
Dockerfile内にセキュリティ対策を実装し、脆弱性と攻撃対象領域を最小限に抑えます。 ブラウザで直接実行するハンズオンコードでDocker & DevOps Fundamentalsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Docker & DevOps Fundamentalsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDocker & DevOps Fundamentalsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「Dockerfileのセキュリティベストプラクティス」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDocker & DevOps Fundamentalsレッスンでコードを書いて実行できますか?
はい。すべてのDocker & DevOps Fundamentalsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 効率化のためのマルチステージビルド
- ビルドキャッシュの活用
- Dockerfileのセキュリティベストプラクティス
- SlimとDistrolessベースによるイメージサイズの最小化