Dockerには、セキュリティスキャンサポートが組み込まれています。コンテナイメージをローカルでスキャンして、考えられる脆弱性を特定できます。これにより、CIパイプラインやクラウドサービスと比較してより迅速なフィードバックが提供されるため、開発サイクルが加速されます。
scan
コマンドは、Dockerバージョン20.10でデフォルトで使用できます。 DockerはSnykと提携して、CLIにセキュリティスキャンを提供します。コマンドを初めて実行すると、1回限りの同意プロンプトが表示されます。 「y」と入力し、Enterキーを押して、Snykの統合を確認します。
Snykに同意することに加えて、コンテナスキャンにはDockerHubログインも必要です。 docker login
を実行します スキャンを開始する前に、ユーザー名とパスワードを入力してください。
docker scan --version
を実行してみてください インストールを確認します。 scan
のバージョン番号が表示されます プラグイン。この出力には、scan
するセキュリティスキャンプロバイダーの名前も含まれています。 (現在はSnyk)を使用します。将来、プロバイダーが追加される可能性があります。
docker scan
パラメータとして画像名を受け入れます。コンテナの脆弱性のSnykデータベースに対してイメージをスキャンします。古いベースイメージから、使用しているオープンソースソフトウェアライブラリに対するエクスプロイトまで、幅広い問題がカバーされています。
SnykはDockerfile
を表示できます 脆弱性を導入する行。これにより、各問題を解決する際の開始点がすぐに得られます。スキャンが完了すると、結果が端末に表示されます。
Snykデータベースは、新しい脆弱性で継続的に更新されます。一度スキャンに合格した画像が、将来常に同じ結果になると思い込まないでください。ワークロードを安全に保つために、定期的に画像をスキャンすることをお勧めします。
画像をスキャンする最も簡単な方法は、タグをdocker scan
に渡すことです。 :
docker scan hello-world:latest
スキャンが完了するまでに数秒かかる場合があります。画像が大きいほど時間がかかります。結果は、利用可能になると端末に表示されます。成功したスキャンからの出力例を上に示します。
完全にクリアにするのは快適かもしれませんが、docker scan
脆弱性が検出された場合、出力ははるかに興味深いものになります。これがいくつかの問題を見つけたスキャンです。
各問題には、簡単な説明、重大度の表示、およびSnykWebサイトで詳細情報を入手するためのリンクがあります。
docker scan
上記の基本的な例よりもはるかに多くの機能があります。いくつかのフラグを使用して、スキャンの動作をカスタマイズできます。
間違いなく、最も有用なフラグは--file
です。 。これにより、画像のDockerfile
へのパスが取得されます 。 SnykにDockerfileを提供すると、その内容に基づいてより詳細な分析を実行できます。古いベース画像の検出など、一部のスキャン機能は、画像のDockerfile
を指定した場合にのみ使用できます。 。
docker scan hello-world:latest --file Dockerfile
これにより、次のような出力が生成されます。
Tested 100 dependencies for known issues, found 50 issues. According to our scan, you are currently using the most secure version of the selected base image.
最後の行は、ベースイメージ(FROM
)かどうかを示します Dockerfile
の指示 —安全です。画像が古くなっているか、その後解決された脆弱性が含まれている場合は、代替のタグ候補が表示されます。
ベースイメージの脆弱性を無視するスキャンを実行したい場合があります。 --exclude-base
を渡します これを達成するためのフラグ。これは、ベースイメージに重大度の低い問題が多数含まれていて、利用可能なアップグレードパスがない場合に役立ちます。ノイズを除外すると、画像レイヤー内の解決可能な問題に集中するのに役立ちます。
docker scan
いくつかの異なるフォーマットオプションを受け入れます。これまでのところ、デフォルトの出力を見てきました。これは、端末内の人間が読める形式のリストとして問題を提示します。
--json
を渡す flagは、受信した生のJSONを出力するようにコマンドに指示します。これは、docker scan
を使用している場合に理想的です プログラムでCIスクリプトまたはサードパーティツールで。 JSONを自分で処理して、必要な情報だけを抽出できます。
別のオプションは--dependency-tree
です 。これにより、脆弱性のリストの上に画像の依存関係のツリービューが表示されます。これは、さまざまなパッケージがどのように取り込まれるかを視覚化するのに役立ち、問題が発生する場所を特定できます。
最後に、--severity
を使用できます フラグを立てて、不要な脆弱性を除外します。 low
を使用する 、medium
、またはhigh
関心のある重大度を示します。このコマンドは、指定されたレベル以上の脆弱性のみを報告します。
docker scan
現在、AlpineLinuxディストリビューションのサポートはありません。さらに、プラグインバージョン0.7には重大なバグがあり、ローカルスキャンが「イメージが見つかりません」エラーで失敗します。 v0.7は、DockerHubおよびその他のパブリックレジストリに存在するイメージのみをスキャンできます。この問題はv0.8で修正されていますが、v0.7は、Linux上のDockerリリースで広く配布されているバージョンのままです。
技術的な問題を超えて、Snykサービスはdocker scan
の使用に厳しいレート制限を課します 。毎月10回のスキャンを無料で実行できます。 Snykでログインすると、1か月あたり200スキャンに増加します。
docker scan --login
を実行します 一意のログインURLを取得します。それをブラウザにコピーし、プロンプトに従って自分自身を認証します。 DockerHubまたはいくつかのサードパーティプロバイダーを使用してログインできます。ログインすると、[認証]ボタンが表示されます。これをクリックして、ターミナルに戻ります。 「Snykを使用する準備ができました」というメッセージが表示されます。
Dockerの組み込みの画像スキャンにより、コンテナの脆弱性の発見と解決が容易になります。 Docker CLIとコンテナイメージにアクセスできる開発者は、レジストリにプッシュしなくても脆弱性をスキャンできるようになりました。
定期的なスキャンは、潜在的な脅威からコンテナを保護するのに役立ちます。古くなったベースイメージと依存関係の脆弱性は、セキュリティ体制に大きな影響を与えますが、簡単に見過ごされる可能性があります。 docker scan
他の方法では見落としていた問題を明らかにすることで、コンテナに対する自信を高めることができます。