Aikido

2026年版コンテナセキュリティのベストプラクティス

執筆者
Ruben Camerlynck

NetflixやSpotifyのような消費者向けアプリケーションから、人事、財務、サプライチェーンを扱う重要なエンタープライズプラットフォームに至るまで、コンテナは最新のソフトウェアソリューションにとって急速に基盤となりました。

しかし、広く普及しているにもかかわらず、コンテナの使用は、開発チームが重要なセキュリティ対策を見落とすことにもつながっています。2025年初頭、攻撃者はサプライチェーンを侵害した後、Kong Ingress Controllerの悪意のあるバージョンをDocker Hubに公開し、数千ものチームが依存するイメージ内にクリプトマイナーを埋め込みました。

多くの組織は、主にコンテナイメージスキャン、SCAチェック、ライセンス管理に焦点を当てていますが、これらの対策はリスクの一部しか対処していません。Kongの侵害のようなインシデントには、ライフサイクル終了 (EOL) の追跡や、依存関係とイメージの両方に対する自動更新など、デプロイメントをはるかに超えるセキュリティ戦略が必要です。

このガイドでは、コンテナのライフサイクルの各段階でコンテナを保護するためのベストプラクティスを順を追って説明し、すべてをまとめた詳細なチェックリストを提供します。

コンテナセキュリティとは?

コンテナセキュリティとは、開発、デプロイメントからランタイムまで、コンテナ化されたアプリケーションをライフサイクル全体を通じて保護する実践です。コンテナは基盤となるホストカーネルを共有し、大規模なクラスターにデプロイされるため、いかなる設定ミスや脆弱性も迅速に攻撃ベクトルとなり得ます。

包括的なコンテナセキュリティプログラムには、イメージの検証と強化、レジストリとKubernetesプラットフォームの保護、最小権限アクセスの適用、本番環境での不審な挙動の検出などが含まれます。これは、ワークフロー全体に統合された多層防御モデルを必要とし、コンプライアンスを確保し、攻撃対象領域を最小限に抑えます。

コンテナを保護する際の一般的な課題

従来のコンテナセキュリティ戦略が失敗するのは、チームがスキャンを最終目標ではなくベースラインとして扱い、継続的な検証ではなく静的な一度限りの評価に依存しているためです。

チームが見落としがちな主要な盲点をいくつかご紹介します。

  • サポート終了 (EOL) のベースイメージ: メンテナンスされなくなったベースイメージ上で実行されているワークロード。

  • 古い依存関係: 自動依存関係更新メカニズムなしで実行されているコンテナは、時間とともに静かに脆弱性を蓄積します。

  • ランタイムドリフト: 環境は動的であり、設定変更、一時的なパッチ、および注入されたサイドカーによって、実行中のワークロードが元のイメージからドリフトする原因となります。

コンテナセキュリティの基本原則

コンテナを効果的に保護するには、ビルドとデプロイメントからランタイムとメンテナンスまで、コンテナのライフサイクル全体が考慮されるDevSecOpsアプローチが必要です。各ステージには独自のセキュリティ要件があり、強固なセキュリティ体制を維持するために絶え間ない注意が必要です。

この継続的なプロセスは、3つの主要な領域に分類できます。

  • ビルドパイプラインの保護: コンテナイメージとソフトウェアサプライチェーンを保護することは、NISTが推奨するベストプラクティスです。

  • 構成とデプロイメントの保護: コンテナとそのオーケストレーターが正しく構成されていることを保証します。

  • ランタイム環境の保護: 稼働中のコンテナを監視し、保護します。

コンテナセキュリティの実装に関する具体的な詳細については、当社の記事Container Security — The Complete Guideをご覧ください。

ビルドパイプラインを保護するためのベストプラクティス

実用的なチェックリスト

1. 最小限で信頼できるベースイメージを使用する

コンテナイメージ内のすべてのソフトウェアは、その攻撃対象領域を拡大します。完全なUbuntu OSのような大規模で汎用的なベースイメージを使用すると、アプリケーションにはおそらく不要な無数のライブラリやバイナリが取り込まれ、その多くには既知の脆弱性が含まれている可能性があります。

採用すべきベストプラクティス:

  • 最小限のイメージを選択する: 「distroless」または「alpine」ベースイメージを選択します。Distrolessイメージには、アプリケーションとそのランタイム依存関係のみが含まれ、一方、Alpine Linuxは、基本的なLinux機能を備えたはるかに小さな代替手段を提供します。

  • Use Trusted Sources: Docker Hubの公式イメージや信頼できる内部レジストリなど、評判の良いレジストリからのみイメージをプルしてください。不明な発行元からのパブリックイメージは、悪意のあるコードが含まれている可能性があるため、使用を避けてください。

  • イメージバージョンの固定: :latestタグを使用する代わりに、正確なバージョン(例:node:18.17.1-alpine)を指定します。これにより、予期せぬ破壊的変更や新たな脆弱性がビルドに自動的に導入されるのを防ぎます。

  • 署名付きイメージを使用してください: デプロイするイメージのソースと整合性を暗号的に検証するために、イメージ署名プロセス(例: Sigstore/Cosignの使用)を実装してください。

  • ビルド時におけるEOLベースイメージの追跡: 使用しているベースイメージがEnd-of-Life (EOL) に達した場合に、CIパイプラインが自動的にアラートを発するように自動化します。

2. 脆弱性についてイメージをスキャンする

コンテナイメージは、オペレーティングシステム、システムライブラリ、アプリケーションの依存関係を含むレイヤーで構成されています。これらのレイヤーのいずれかに存在する脆弱性はエクスプロイトされ、特権昇格につながる可能性があります。 

採用すべきベストプラクティス:

  • CI/CDへのスキャン統合: 新しいイメージがビルドされるたびに脆弱性スキャンを自動化します。これにより、セキュリティチェックが開発ワークフローの標準的な一部となります。

  • OSパッケージだけでなく、より多くのものをスキャンする: 効果的なスキャンツールは、OSパッケージ(aptやyumなど)とアプリケーションの依存関係(npm、pip、Mavenなど)の両方で脆弱性をチェックします。

  • 脆弱なビルドをブロックする: 高度な脆弱性が発見された場合、CI/CDパイプラインがビルドを失敗するように設定します。これにより、コードがマージされる前にベースラインのセキュリティ標準が強制されます。

コンテナスキャンツールについてご興味がありますか?2026年版コンテナスキャンツール トップ13に関する弊社の記事をご覧ください。

3. アプリケーションの依存関係を管理する (SCA)

あなたのコードは、数十、場合によっては数百ものオープンソースパッケージに依存しています。1つの脆弱な依存関係が、アプリケーション全体を危険にさらす可能性があります。Software Composition Analysis (SCA) は、これらのリスクを発見し、管理するのに役立ちます。

採用すべきベストプラクティス:

  • SBOM生成: Software Bill of Materials (SBOM) は、ソフトウェア内のすべてのコンポーネントの完全なインベントリです。これは、依存関係を追跡し、新しく発見された脆弱性の影響を迅速に特定するために不可欠です。

  • 古いライセンスのチェック: SCAツールは、非準拠またはリスクのあるオープンソースライセンスをスキャンすることもでき、法的問題を回避するのに役立ちます。

  • 修正の優先順位付け: 実際にエクスプロイト可能な脆弱性に焦点を当てます。最新のツールは、脆弱な関数がコード内で呼び出されているかどうかを分析し、理論上の脅威よりも実際の脅威を優先するのに役立ちます。

  • 依存関係の自動更新ワークフロー: 古い依存関係を検出するための自動ワークフローを設定し、安全なバージョンに更新するためのプルリクエスト (PR) を自動的に作成します。

  • EOL依存関係の検出: ベースイメージと同様に、アプリケーションライブラリにもEOL日があります。セキュリティサポートを受けなくなった依存関係を追跡します。

End-of-Life (EOL) のベースイメージとランタイムを追跡

多くの組織はアクティブなCVEスキャンに重点を置いていますが、ディストリビューション(AlpineやDebianなど)やランタイムバージョン(Pythonなど)がサポート終了(EOL)となり、セキュリティパッチの提供が停止された場合に発生するリスクを見落としがちです。 

これが発生すると、EOL日以降に発見された脆弱性は公式パッチを受け取らなくなり、これらのイメージを実行し続けることは、PCI DSSSOC 2などの標準への準拠を組織から外す可能性もあります。

これらの課題に対処するには、攻撃対象領域を減らすために、強化された最小限のベースイメージを採用する必要があります。また、ビルド時にEOLステータスを追跡する必要があります。Aikido Securityのようなプラットフォームは、レジストリまたはCI/CDパイプライン内のイメージがEOL日に近づいているか、または過ぎた場合にチームに自動的に警告でき、さらに、標準および事前強化されたイメージの両方に対して自動更新メカニズムを提供できます。

デプロイメントと構成のためのベストプラクティス

安全なイメージであっても、脆弱な設定でデプロイされた場合、侵害される可能性があります。コンテナが実行される環境を保護することは、コンテナ自体を保護することと同じくらい重要です。

実用的なチェックリスト

1. 最小権限の原則を徹底する

コンテナは、機能するために絶対に必要な権限のみを持つべきです。過剰な特権でコンテナを実行することは、最も一般的で危険な設定ミスの一つです。

採用すべきベストプラクティス:

  • コンテナをrootで実行しない: デフォルトでは、コンテナはrootユーザーとして実行されます。これは大きなリスクです。攻撃者がコンテナを制御した場合、rootアクセス権を得てしまいます。DockerfileのUSER命令を使用して、非rootユーザーを指定してください。

  • カーネル機能の制限: Dockerのデフォルト設定では、コンテナに様々なカーネル機能が付与されます。不要な機能はすべて`--cap-drop=all`フラグを使用して削除し、必要不可欠な機能のみを`--cap-add=...`で追加します。

  • Use Read-Only Filesystems: コンテナがファイルシステムにデータを書き込む必要がない場合は、読み取り専用モード(--read-only)で実行します。これにより、攻撃者がファイルを変更したりマルウェアをインストールしたりするのを防ぎます。

  • セキュリティプロファイルの実装: seccomp (セキュアコンピューティング) プロファイルやAppArmor/SELinuxなどの組み込みLinuxセキュリティモジュールを使用して、コンテナが実行を許可されるシステムコールを正確に定義します。

  • 危険なホストマウントを避ける: 機密性の高いホストパス、特に /var/run/docker.sock をコンテナにマウントしないでください。このファイルは、Dockerデーモンとホストシステムに対するほぼ完全な制御を付与します。

2. コンテナオーケストレーターを保護する 

オーケストレーションプラットフォームは、KubernetesやDocker Swarmをセルフホストしているか、マネージドサービスを使用しているかにかかわらず、リスクの追加レイヤーをもたらします。Amazon Elastic Kubernetes Service (EKS)、Azure Kubernetes Service (AKS)、Google Kubernetes Engine (GKE)のようなマネージドプラットフォームは、共有責任モデルに従うことでこれらのリスクを最小限に抑えます。つまり、基盤となるインフラストラクチャとオーケストレーションレイヤーを保護し、ユーザーはコンテナとアプリケーションの保護に引き続き責任を負います。

採用すべきベストプラクティス:

  • Use Network Policies: Kubernetesでは、ネットワークポリシーはPodのファイアウォールとして機能します。デフォルトでは、すべてのPodが相互に通信できますが、ネットワークポリシーを使用してPod間のトラフィックを制限し、必要な接続のみを許可します。

  • シークレットを適切に管理する: APIキー、パスワード、証明書などのシークレットをコンテナイメージや環境変数にハードコードしないでください。オーケストレーターの組み込みシークレット管理ツール(例:Kubernetes Secrets)またはHashiCorp Vaultのような専用ソリューションを使用してください。

  • ロールベースアクセス制御 (RBAC) を有効にする: Kubernetesでは、誰がKubernetes APIにアクセスできるか、どのような権限を持つかを制御するためにRBACが有効になっていることを確認してください。最小権限の原則に基づいて権限を付与します。

  • Use Admission Controllers: OPA gatekeeperKyvernoのようなポリシー適用ツールを使用して、組織のセキュリティルールに違反するデプロイメントを自動的に監査またはブロックします。

オーケストレーションセキュリティについてさらに深く掘り下げたいですか?当社の記事「Docker & Kubernetes Container Security Explained」をご覧ください。

AIを活用したコンテナの脆弱性の自動修正

従来のコンテナスキャンは、CVEやNVDのようなデータベースを使用して脆弱性を特定しますが、これは開発チームが優先順位付けに苦労する大量のアラートリストにつながることがよくあります。 

AI は、各検出結果にコンテキストを追加することでこの課題に対処します。古いベースイメージ、誤設定された Dockerfile 命令、インターネットに公開されたコンテナ、ソフトウェアパッケージなどの脆弱な機能やコンポーネントが実際に使用されているかどうかを判断するためにアラートを評価し、問題の修正を迅速化し、開発者の生産性を向上させます。

Aikido Securityのようなプラットフォームは、ワンクリック修正、自動化されたPR、ベースイメージのアップグレードといったAI-powered AutoFix機能を提供することで、これをさらに拡張します。数百ものCVEを含む可能性のあるコンテナイメージに対して、そのAI支援の到達可能性分析エンジンはノイズを除去し、真にエクスプロイト可能な脆弱性を強調表示します。

ランタイムセキュリティとモニタリングのためのベストプラクティス

コンテナが稼働し始めても、作業は終わりではありません。脅威や異常な動作を監視する必要があります。米国国立標準技術研究所の研究によると、ランタイム監視は効果的なコンテナセキュリティ戦略の重要な要素です。

実用的なチェックリスト:

  • ネットワークアクティビティの追跡: コンテナとの間のネットワーク接続を監視します。不審なIPアドレスへの接続や異常なデータ転送パターンを探します。

  • リアルタイム異常検知: FalcoやeBPFベースのシステムといったツールを活用してシステムコールを監視し、不審なコンテナの挙動を特定します。

  • ベンチマークに対するコンプライアンス監視を自動化: 設定の健全性を確保するため、CIS Kubernetes Benchmarksのような業界のベストプラクティスに対してランタイム環境を継続的にチェックします。

  • コンテナブレイクアウトの防止: seccomp(セキュアコンピューティング)プロファイルやAppArmorなどの組み込みLinuxセキュリティモジュールを使用して厳格な分離を強制し、コンテナのホストカーネルへのアクセスを制限します。

  • ランタイムドリフト検出: 実行中のコンテナが元のベースイメージや設定と比較して不正に変更されている場合、潜在的な侵害や設定ミスを示します。

  • 実行中のコンテナを定期的にスキャンし、新しい脆弱性を検出する: 脆弱性の状況は日々変化します。実行中のワークロードが新しいCVEに対して継続的にスキャンおよび評価されるようにしてください。
  • すべてをログに記録する: すべてのイベントとアクティビティが確実に捕捉されるようにします。堅牢なロギングおよびアラートパイプラインを確立し、ログを一元システムに集約します。

実用的なコンテナセキュリティチェックリスト

これらのコンテナセキュリティのベストプラクティスを実装するのに役立つ簡単なチェックリストを以下に示します。

領域 タスク ステータス
ビルド & CI/CD 最小限のベースイメージ(distroless、alpine)を使用してください。
信頼できる公式レジストリからイメージをプルします。
:latestを使用する代わりに、ベースイメージのバージョンを固定します。
コンテナを非ルートユーザーで実行します
コンテナイメージの脆弱性スキャンをCIに統合する
依存関係に対してソフトウェア構成分析 (SCA) を実行する
深刻な脆弱性によりビルドを失敗させる
すべてのイメージに対してソフトウェア部品表 (SBOM) を生成する
すべてのコンテナイメージに署名し、出所と整合性を確保する
Infrastructure-as-Code (IaC) テンプレート(例:Kubernetesマニフェスト)をスキャンし、セキュリティリスクを検出します。
設定 不要なカーネルケーパビリティの削除
コンテナのルートファイルシステムを読み取り専用としてマウントする
ポッド間のトラフィックを制限するために、ネットワークポリシーを使用してください。
シークレットを安全に保存する (例: Kubernetes Secrets、Vault)
最小権限の原則を適用したロールベースアクセス制御 (RBAC) を導入します。
アドミッションコントローラーで「ポリシーアズコード」を使用してセキュリティポリシーを適用します。
コンテナ固有のファイアウォールとネットワークセグメンテーションを実装します
リソース制限を設定します。
Runtime ランタイム脅威の検知と監視を実装します。
コンテナログを一元化して監視します
実行中のコンテナを定期的にスキャンして新しい脆弱性を検出する
ファイルシステムアクセスとネットワークアクティビティの異常を監視します。
定期的なインシデント対応訓練を計画し、実施します。
ベンチマーク(例:CIS Kubernetesベンチマーク)に対するコンプライアンス監視を自動化します。

まとめ

これらすべてを考慮すると、コードセキュリティは単なるチェックボックスではないことを覚えておくことが重要です。一度設定してしまえば終わりというものではなく、継続的な実践が求められます。毎日、新しい脅威が出現し、新しいパッケージが登場し、新しいリスクが表面化します。業界はリアクティブなスキャンからプロアクティブで継続的な保護へと移行しており、現代のチームもそれに合わせて適応しています。

Aikido Securityは、AI-powered Static Application Security Testing (SAST)、ワンクリックAutoFixes、事前強化されたRoot.ioイメージを組み合わせることで、セキュリティをボトルネックにすることなくチームがシフトレフトするのを支援し、これを容易にします。

コンテナセキュリティの態勢全体にわたる完全な可視性を求めていますか?今すぐ無料トライアルを開始するか、Aikido Securityでデモを予約してください。

よくあるご質問

コンテナイメージの脆弱性スキャンに関するベストプラクティスは何ですか?

イメージスキャンは、ビルド中、デプロイ前、レジストリ内など、複数の段階で実行すると最も効果的です。スキャンはOSパッケージとアプリケーションの依存関係の両方をカバーし、イメージ署名を検証し、強化されたベースイメージを活用すべきです。Aikido Securityのようなプラットフォームは、管理を容易にするためにイメージと依存関係のスキャンを一元化します。

コンテナセキュリティのためにロールベースアクセス制御(RBAC)をどのように実装できますか?

RBACにより、組織はユーザーまたはサービスアカウントに特定のロールを割り当てることで権限を制御できます。Kubernetesでは、これにはRoleとClusterRoleを作成し、RoleBindingまたはClusterRoleBindingでそれらをバインドすることが含まれます。必要なものだけに権限を制限することで、セキュリティを強化します。Aikido Securityのようなツールは、RBAC構成の可視性を提供し、過度に許可的な設定を強調表示します。

ネットワークポリシーは、Kubernetesにおけるコンテナセキュリティをどのように強化しますか?

ネットワークポリシーは、Podとサービスがどのように通信するかを定義し、トラフィックフローを制御し、侵害後のラテラルムーブメントの可能性を減らすことを可能にします。デフォルトでは、Kubernetesはすべてのトラフィックを許可するため、デフォルトで拒否するポリシーを設定し、許可されたイングレスおよびエグレスルールを指定することが重要です。Aikido Securityのようなプラットフォームは、不足しているポリシーや過度に許可的なポリシーを特定することで、チームが適切なネットワークセグメンテーションを実装するのを支援します。

コンテナセキュリティのベストプラクティスを実装するためには、どのツールが推奨されますか?

コンテナを保護するには、通常、複数のツールが連携して動作する必要があります。脆弱性検出のためのイメージスキャナー、機密性の高い資格情報のためのシークレットスキャナー、OPAやGatekeeperのようなポリシー適用エンジンによるコンプライアンス確保、不審なアクティビティを監視するためのランタイムセキュリティツール、そしてクラウド設定を検証するためのCSPMソリューションなどです。Aikido Securityのようなプラットフォームはプロセスを簡素化し、コンテナエコシステム全体で自動化されたチェック、アラート、更新を可能にします。

こちらもおすすめです:

共有:

https://www.aikido.dev/blog/container-security-best-practices

脅威ニュースをサブスクライブ

今日から無料で始めましょう。

無料で始める
コンテナをスキャン
CC不要

今すぐ、安全な環境へ。

コード、クラウド、ランタイムを1つの中央システムでセキュアに。
脆弱性を迅速に発見し、自動的に修正。

クレジットカードは不要です | スキャン結果は32秒で表示されます。