コンテンツにスキップ

Kubernetes クラスター内イメージスキャン

Aikido の Kubernetes 連携では、コンテナレジストリを Aikido に接続しなくても、Kubernetes クラスター内のコンテナイメージをスキャンできます。

クラスター内イメージスキャンのメリット

Section titled “クラスター内イメージスキャンのメリット”
  • 完全なカバレッジ: パブリックイメージを含め、クラスターにデプロイされたすべてのイメージを対象にします。
  • リアルタイムスキャン: 新しいイメージでポッドが起動するたびに Aikido がスキャンし、検出結果は数分以内に Aikido のフィードに反映されます。
  • イメージが環境の外に出ない: Aikido エージェントはプラットフォームに SBOM のみを報告します。
  • 帯域幅を節約: Aikido エージェントはまず Kubernetes ノード上にキャッシュされたイメージの利用を試み、見つからない、またはアクセスできない場合のみレジストリから取得します。これは、トラフィック量に応じて課金されるコンテナレジストリを利用している組織にとって特に重要な点です。

Kubernetes クラスターのオンボーディング時にイメージスキャンを有効化できます。

イメージスキャンを有効にした Aikido の Kubernetes クラスターオンボーディング

Kubernetes クラスターオンボーディング(イメージスキャン有効時)

また、Helm チャートのインストール時に sbomCollector.enabled=true の値を設定する必要があります。

実行が開始されると、Aikido のコンテナページにイメージが表示されます。

クラスター内 Kubernetes スキャンにより報告されたコンテナイメージ

Aikido に報告されたコンテナ

イメージスキャンの動作を選択する

Section titled “イメージスキャンの動作を選択する”

クラスター内イメージスキャンを有効にする際、Aikido が実行中のイメージをどのように追跡するかを選択できます。

  • 実行中のイメージごとに1つのタグをスキャン

こちらはよりシンプルな選択肢です。クラスター内のイメージリポジトリごとに、Aikido が単一のコンテナを保持することを望む場合に選択してください。同じイメージの複数のタグが実行されている場合、Aikido はそのイメージについて1つのコンテナを追跡し、最も最近デプロイされたバージョン/タグをスキャンします。

  • 実行中のすべてのイメージタグをスキャン

Aikido に Kubernetes ワークロードごとに実行中のイメージを追跡させたい場合は、こちらを選択してください。同じイメージが異なるタグで複数のワークロードにデプロイされている場合、各タグが Aikido では別々のコンテナとして表示されます。

スキャン動作は Kubernetes クラスターのオンボーディング時に設定でき、後からクラスター設定で更新することもできます。

エージェント(別名 SBOM コレクター)は、ローカルのノードキャッシュからイメージを取得しようとします(そのため、既定では root ユーザーの DaemonSet として動作し、containerd および Docker ソケットをマウントできるようになっています)。

SBOM コレクターがノードキャッシュからイメージを見つけられない場合(またはランタイムソケットをマウントできない場合)、対応するレジストリからイメージを取得します。プライベートレジストリへのアクセスについては、ほとんどの認可メカニズム(ノード IAM ロール、imagePullSecrets、ワークロードアイデンティティ)をサポートしています。詳細および必要に応じたアクセス設定方法については、Helm チャートの README を参照してください。

  • イメージの新しいバージョン/タグをデプロイするとどうなりますか?

選択したイメージスキャン動作によって異なります。

Scan one tag per image that is running を使用している場合、Aikido はクラスター内のイメージリポジトリごとに単一のコンテナを保持します。同じイメージの新しいタグがデプロイされると、Aikido は追跡中のコンテナを最も最近デプロイされたバージョンに更新します。

Scan all running image tags を使用している場合、Aikido は Kubernetes ワークロードごとにイメージを追跡します。あるワークロードが busybox:1.32 から busybox:1.33 に移行すると、Aikido は対応する Aikido コンテナを更新してスキャンする一方、異なるタグを実行している他のワークロードは引き続き別々のコンテナとして表示されます。

  • このスキャン方式は、Aikido が提供する他のコンテナ関連機能の恩恵を受けられますか?

はい。クラスター内スキャンでスキャンされたイメージは、ノイズ削減、リポジトリへのリンク、AutoFix、Aikido Images など、Aikido が提供するすべての機能の恩恵を受けられます。

  • 特定のイメージを無視できますか?

クラスター内スキャンは、クラスターのオンボーディング時に設定した除外ネームスペースを尊重します。スキャン対象のネームスペース内で特定のイメージを除外する必要がある場合は、Aikido でコンテナを無効化することをお勧めします。

  • 存在しなくなったコンテナに対して、Aikido がタスクトラッカーのチケットを作成し続けます。どうすればよいですか?

これは、デプロイプロセスで(既存のイメージを更新するのではなく)新しい Kubernetes Deployments を作成している場合や、(CronJob で管理されていない)Kubernetes Jobs を頻繁に実行している場合に発生することがあります。

このような場合、Scan one tag per image that is running のスキャン動作を使用すると、イメージリポジトリごとに単一のコンテナを保持することで、より整理されたインベントリが得られ、チケットの開閉を避けられます。

これは、多くのワークロードが同じイメージリポジトリ(例: openshift/release)の異なるタグを使用することが多い OpenShift クラスターでもよく見られます。

  • 特定の Kubernetes ネームスペースのコンテナの問題のみを表示できますか?

はい。Aikido は、コンテナが実行されている Kubernetes ネームスペースをコンテナラベルとして表示します。ラベルの形式は k8s/namespace:<namespace> です。これにより、これらのラベルに基づいてフィードをフィルタリングできます。