In this article
Dockerセキュリティスキャンガイド
Dockerは世界中に膨大なユーザーベースを持ち、最近ではユーザー数が1,000万人、イメージのプル数が2,420億回を超え、アプリケーションの構築方法を変えました。
コンテナ化によって開発スピードが加速する一方、セキュリティに関する責任の一部は開発者へと移り、コードに加えてコンテナイメージも管理する必要が生じています。
Dockerとは?
Dockerは、アプリケーションやサービスをコンテナと呼ばれる専用のサンドボックス内で実行するための、Platform as a Service(PaaS)製品群です。コンテナはOSレベルの仮想化を利用して実行されます。
Dockerを使うと、サービスに必要なすべての依存関係をコンテナ内にインストールできます。そのため、パソコンに不要なパッケージや、同じパッケージの異なるバージョンを直接インストールする心配がありません。アプリケーションの完全な実行環境を、チーム内外のメンバーに簡単に配布できます。
Dockerイメージは、無料プランと有料プランを提供するDocker独自のDocker Hubに簡単にアップロードまたはプッシュできます。また、Amazon Elastic Container Registry(ECR)やGoogle Container Registry(GCR)などのサードパーティーリポジトリにも保存できます。
では、コンテナにインストールする依存関係やツールをどのように指定するのでしょうか?そのために設計されたのがDockerfileです。
Dockerfileとは?
Dockerfileを使って、コンテナの準備方法をDockerに指示します。Dockerfileにすべての手順を記述したら、それを基にイメージを「ビルド」できます。イメージを共有するには、誰でもビルドできるDockerfileの設計図を共有する方法と、イメージそのものを共有する方法があります。イメージを共有すれば、相手が再ビルドする必要がないのが利点です。
Dockerセキュリティスキャンの概要
Dockerイメージのセキュリティスキャンとは?
Dockerイメージのセキュリティスキャンとは、Dockerイメージに含まれるパッケージの既知のセキュリティ脆弱性を特定するプロセスです。コンテナイメージの脆弱性を見つけ、Docker Hubなどのレジストリにイメージをプッシュする前に修正できます。
Snyk Containerを使えば、開発者に特化したコンテナセキュリティスキャンを開発者自身が直接利用できます。Snyk CLIからコンテナイメージをスキャンできるほか、Docker Desktop内のSnyk Container拡張機能(Docker Desktop Extensions Marketplaceで入手可能)も利用できます。コマンドラインからのスキャンは簡単です。こちらから始めましょう。
次のコマンドで、Snyk CLIからイメージをテストできます。
snyk container test <image-name>これにより、Docker Hub、ECR、GCR、Harbor、またはその他のレジストリにイメージをプッシュする前に、コンテナイメージ内の脆弱性を見つけて修正できます。
Snykを活用した脆弱性スキャンは、一般的な他の脆弱性スキャンとは少し異なります。問題を一覧表示するだけでなく、開発者が具体的な対策を取れるよう支援することを目指しています。
--file <path/to/Dockerfile>オプションを使ってイメージと一緒にDockerfileを指定すると、docker scanの結果に、脆弱性の少ない、より新しいベースイメージや、より小さいベースイメージを選択する方法が表示されます。脆弱性は、その原因となったDockerfileの命令に関連付けられます。また、問題を特定して対処するために必要な依存関係も併せて確認できます。
snyk container monitorコマンドを使うと、既存のコンテナを継続的にチェックし、新たに発見された脆弱性を検出して通知します。
Dockerセキュリティスキャンが重要な理由
コンテナイメージのセキュリティスキャンは、Docker Hub、ECR、GCR、Harbor、その他のレジストリにイメージをプッシュする前に、コンテナイメージ内の脆弱性を見つけて修正するための重要な手段です。
Kubernetesのようなコンテナオーケストレーションサービスを利用している場合、こうしたセキュリティの問題はすでに対処済みだと思うかもしれませんが、必ずしもそうとは限りません。KubernetesにはPod(実質的にはコンテナ)の実行に関するセキュリティポリシーがありますが、Pod内で実行されるコードやサービスのセキュリティ対策は十分ではありません。その責任はユーザーにあります。コードを使ってKubernetesクラスターを設定する際は、Kubernetesのセキュリティに関するベストプラクティスに従うことが重要です。
Dockerセキュリティスキャンの種類
前述のCVEデータベースを使って、Dockerイメージに記載されたパッケージの既知の脆弱性を調べるだけでは、十分とは限りません。セキュリティの脆弱性はさまざまな場所に潜んでいる可能性があります。Dockerコンテナ向けには、さまざまなセキュリティスキャンツールやサービスが提供されています。
ネットワーク設定ツール: Dockerイメージのポートやネットワーク設定をスキャンし、問題を検出して警告します。CiliumやSysdig Falcoなどがあります。
アイデンティティ・アクセス管理ツール:コンテナがすべてのリソースにアクセスできないようにすることは、重要なセキュリティ対策です。Dockerコンテナに特定のロールと責任を割り当て、それらを適用・監視するツールを利用できます。Notaryはその一例です。
ユーザー定義ポリシーツール:コンテナ内で独自のセキュリティポリシーを定義して適用できるツールもあります。このカテゴリーではGrafeasがよく知られています。
オープンソースツール:さまざまなオープンソースの脆弱性スキャンツールが利用できます。フレームワーク、オペレーティングシステム、IDEなど、他のオープンソースツールを使う開発者の間では、オープンソースのスキャンツールやSBOM生成ツールが人気です。セキュリティの専門家も、監査しやすく透明性が高いことから、オープンソースを好みます。Dockerやコンテナを使い始めたばかりなら、Dockerfileのどの命令がコンテナのセキュリティ問題を引き起こしているかも知りたいでしょう。そのためのツールもあります。Snyk Open Sourceは、オープンソースのセキュリティスキャンツール(ソフトウェア構成分析ツールとも呼ばれます)の優れた例です。無料で利用登録できます。
アプリケーションセキュリティツール:Dockerコンテナ内で実行されるコードのセキュリティを確保するために、さまざまな種類のツールが利用できます。たとえば、SASTツールであるSnyk Codeは開発者と連携し、アプリケーションのセキュリティ確保を支援します。
Dockerイメージやコンテナのセキュリティを100%保証できるスキャンツールはありませんが、こうしたDockerイメージセキュリティスキャンツールは、アプリケーションやインフラにおける脆弱性のリスクを最小限に抑えるのに役立ちます。また、コンテナを継続的に監視してアラートを送る機能を備えたツールなら、問題が検出されたときに通知を受け取れます。さらに、Dockerセキュリティのベストプラクティスに従うことで、脆弱性を持ち込むリスクを軽減できます。自信を持ってコンテナベースのアプリケーションを構築・リリースしましょう。SnykのDocker脆弱性スキャナーで、コンテナ化されたアプリケーションを保護できます。
Dockerセキュリティスキャンの重要なポイント
Snyk Container CLIスキャナーは、開発プロセスの早い段階で脆弱性を検出して修正できる、シンプルで強力なツールです。ビルド直後に実行できるため、イメージをレジストリにプッシュする前に問題を解決できます。ご質問や便利な活用方法があれば、Snyk Communityサイトでぜひお聞かせください。