0Pricing
DevOps Bootcamp · レッスン

Dockerfileのセキュリティベストプラクティス

Dockerfile内にセキュリティ対策を実装し、脆弱性と攻撃対象領域を最小限に抑えます。

「Dockerfileのセキュリティベストプラクティス」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。

Dockerfileを安全にする

Dockerfileのセキュリティに関するベストプラクティスへようこそ。安全なアプリケーションは、安全な基盤から始まります。

Dockerfileは単なるビルドスクリプトではありません。アプリケーションのセキュリティ設計図でもあります。ここで不適切な方法を取ると、重大な脆弱性につながる可能性があります。

このレッスンでは、Dockerイメージを強化し、潜在的な攻撃対象領域を最小限に抑えるための主要な方法を学びます。

Dockerfileのセキュリティベストプラクティス — イラスト1

信頼できるベースイメージから始める

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チューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。

「Dockerfileのセキュリティベストプラクティス」で何を学びますか?

Dockerfile内にセキュリティ対策を実装し、脆弱性と攻撃対象領域を最小限に抑えます。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

DevOps Bootcampを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「Dockerfileのセキュリティベストプラクティス」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このDevOps Bootcampレッスンでコードを書いて実行できますか?

はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 効率化のためのマルチステージビルド
  2. ビルドキャッシュの活用
  3. Dockerfileのセキュリティベストプラクティス
  4. SlimとDistrolessベースによるイメージサイズの最小化
← DevOps Bootcampに戻る