ルールベースの image pull を利用した、大規模レジストリのスキャン #aqua #コンテナ #セキュリティ #レジストリ #imagepull #rulebased
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本ブログは「Aqua Security」社の技術ブログで2020年8月25日に公開された「 Scanning Registries at Scale with Rules-based Image Pulls 」の日本語翻訳です。
ルールベースの image pull を利用した、大規模レジストリのスキャン
現代では、日々開発者に対するアプリケーション開発の要求は増しています。様々な需要に対応するため、ほとんどの開発者は多数のコンテナイメージをレジストリに保存しておかなければなりません。これらのイメージには、本番用に使用されるイメージ、ビルド中のイメージ、定期的にプッシュされるイメージ、ベースイメージ、使用されていない古くなったイメージなどが含まれます。このようにリソースが肥大化しているために Dev が直面する大きな課題の 1 つは、特定のデプロイメントに必要なイメージだけをスキャンして、無関係なあるいは古くなったイメージに時間を浪費しないようにすることです。
そのためには、これらの質問や要求に答える必要があります。
- レジストリから pull したイメージをすべてスキャンすることは可能ですか?
- リソースへの負荷を軽減するために、業務終了後の時間帯にイメージを一括でスキャンすることは可能ですか?
- レジストリから一部のイメージ(例.本番用のみ)のみをスキャンすることは可能ですか?
- 最近作成したイメージのみをスキャンするにはどうすればいいですか?
- 既にスキャン済みのイメージに新たな脆弱性が無いことを確認するためにはどうすればいいですか?
- 必要なイメージを自動的に再スキャンすることは可能ですか?
- リソースを無駄にしないように、使用しなくなったイメージのスキャンを停止することは可能ですか?
この質問のリストを見ていると、共通の答えが浮かび上がってきます。レジストリ内の必要なイメージのみを、必要な頻度でスキャンする自動化されたプロセスが必要です。
ルールベースの image pull
Aqua はその答えを提供します。ルールベースの image pull を使用することで、レジストリから(何らかのパターンに基づいて)自動的にイメージを pull し、スケジュールされた時間にスキャンまたは再スキャンするメカニズムを提供します。このソリューションには、いくつかの懸念事項に対処するための様々な機能があります。
先ほどの質問リストを一つずつ回答していきます。
レジストリから pull したイメージをすべてスキャンすることは可能ですか?
可能です。また、これを自動化できます。- スキャンのためにレジストリから各イメージを手動で追加する必要はありません。レジストリと連携する際に「Auto pull」オプションと対象となるイメージを選択できます。
リソースへの負荷を軽減するために、業務終了後の時間帯にイメージを一括でスキャンすることは可能ですか?
可能です。イメージの pull およびスキャンの時刻を設定できます。- 選択した時間にイメージを自動的に pull でき、スキャンをスケジュールすることもできます。これにより、リソースに追加の負荷をかけることなく、スケジュールされた時間にのみジョブが実行されます。
自動的に pull する時刻は図1のように設定できます。
レジストリから一部のイメージ(例.本番用のみ)のみをスキャンすることは可能ですか?
可能です。イメージの pull 条件に対象/例外パターン設定ができます。- スキャンの際に特定のパターンのイメージを pull する機能を持っています(定期実行も可能です)。すべてのリポジトリの「latest」イメージ、すべての「テスト」または「本番」用イメージ、その日に追加されたすべての新しい「開発」用イメージなど、さまざまな組み合わせでスキャンできます。また、常にいくつかの「重要な」イメージをスキャンし、「必要のない」イメージは絶対にスキャンしないようできます。このように、リポジトリのパターンやイメージのタグに応じて、スキャンするイメージを指定でき、各イメージの名前を明示的に指定する必要はありません。図2は例です。
同様に、イメージを pull する際に例外パターンを設定できます。必要な/必要でないイメージを指定し、適切に管理できます。
最近作成したイメージのみをスキャンするにはどうすればいいですか?
イメージの作成時間をもとに実現できます。-膨大な数のイメージを保持しているレジストリには、一部古いイメージがあったり、使用していないイメージがあったりという状況であることが多いです。これらのイメージのほとんどは、作成日によって分類できます。多くの場合、作成日が古いほどそのイメージは使用していない可能性が高いです。イメージの作成時間を基準に指定でき、選択された日付条件に基づいてイメージをフィルタリングします。例えば、「60日」を指定した場合、図4の通り過去60日以内に作成されたイメージのみが pull されます。
既にスキャン済みのイメージに新たな脆弱性が無いことを確認するためにはどうすればいいですか?必要なイメージを自動的に再スキャンすることは可能ですか?
既存のイメージを自動的に再スキャンして新しい脆弱性を検出できます。- 特定の状況下で、すでにスキャンされたイメージに新しい脆弱性が報告される場合、イメージを再スキャンすることで修正が必要な最新の脆弱性を特定でき、リストアップされます。パラメータを選択することで、レジストリ内のイメージに変更/更新があった場合それをトリガーに自動的にレジストリからイメージを pull します。
リソースを無駄にしないように、使用しなくなったイメージのスキャンを停止することは可能ですか?
可能です。AquaSecurity を利用することでルールベースによる image pull を使用することで、もう時間を無駄にすることはありません。
- Docker Hub
- Azure
- Amazon ECR
- CoreOs Quay
- Google Container Registry
- Harbor
- JFrog
- OpenShift
Webhookの利用- サポートされているレジストリでは、レジストリに追加または変更されたイメージの自動 pull とスキャンを設定できます。Webhookを利用すると、レジストリにイメージの変更(新規作成、既存、変更されたイメージ)が通知され、直ちにイメージを pull してスキャンします。
並行処理/性能- 毎日大量のイメージをスキャンするために、このプロセスの並行処理を可能にしています。並行処理を使用することで、Aqua は数分以内にレジストリから10万以上のイメージを pull し、スキャンできます。
まとめ
肥大化したレジストリ内のイメージを対処することに疲れ、不必要なスキャンで時間とリソースを無駄にしたくない場合、ルールベースによる image pull を活用し、大規模レジストリをスキャンすることで解決できます。