Trivy Operator: Kubernetesの脆弱性を24時間365日スキャンする「監視カメラ」

Security tutorial - IT technology blog
Security tutorial - IT technology blog

クラスター内に「眠る」脆弱性への懸念

Kubernetesを運用する際、多くのエンジニアはCI/CDパイプラインでイメージを徹底的にスキャンし、結果が「クリーン(脆弱性ゼロ)」であれば自信を持って本番環境へデプロイするという習慣があります。しかし、現実にはセキュリティは静的な状態ではありません。今日安全なイメージであっても、明日には新たに公開された深刻なCVE(共通脆弱性識別子)の影響を受ける可能性があるのです。

Log4jの脆弱性(CVE-2021-44228)の惨劇を思い出してください。安定して稼働していた数千ものアプリケーションが、一夜にしてハッカーの格好の餌食となりました. ビルド時にしかスキャンを行わない場合、デプロイ後に発生するリスクに対して完全に「盲目」になってしまいます。そこで必要となるのが、クラスター内部での継続的な監視メカニズムです。

なぜビルド時のセキュリティスキャンだけでは不十分なのか?

運用の現場経験から、従来のCI/CDプロセスだけでは不十分な理由を3つ挙げます:

  • CVEの発生スピード: 平均して毎日50件以上の新しい脆弱性が発見されています。イメージは変わらなくても、世界の脆弱性データベースは刻一刻と更新されています。
  • 設定ミス(Misconfiguration): イメージ自体がクリーンでも、YAMLファイルで privileged: true が許可されていたり、root 権限で実行されていたりすることがあります。これはハッカーがノードの制御権を奪取するための最短ルートとなります。
  • シャドーIT: 大規模なチームでは、誰かがテストのために会社の検閲プロセスを通さず、個人のDocker Hubからイメージを「ついつい」デプロイしてしまうことがあります。

手動でPod一つひとつに対して trivy image [name] を実行する代わりに、完全に自動化されたソリューションが必要です。

Trivy Operator – Aqua Securityের強力な拡張ツール

Trivy Operatorは単なるスキャンツールではありません。セキュリティをKubernetesのネイティブなコンポーネントへと変貌させます。CLIとして実行するのではなく、バックグラウンドで動作するコントローラーとして機能します。クラスター内のリソースを継続的に監視し、その結果をカスタムリソース定義(CRD)として出力します。

簡単に言えば、PodやServiceを確認するのと同じように、kubectl get を使うだけでシステム全体のセキュリティ状態を即座に把握できるようになります。

ステップ1:環境の準備

開始前に、以下の準備が必要です:

  • Kubernetesクラスター(v1.20以上)。
  • Helm v3がインストールされていること。
  • Operatorをインストールするための cluster-admin 権限。

ステップ2:Trivy Operatorのクイックインストール

Operatorのライフサイクルを管理するには、Helmを使用するのが最も速い方法です。まず、Aqua Securityのリポジトリを追加します:

helm repo add aqua https://aquasecurity.github.io/helm-charts/
helm repo update

次に、インストールを実行します。通知の洪水(アラート疲れ)を避けるために、警告レベルを制限することをお勧めします:

helm install trivy-operator aqua/trivy-operator \
  --namespace trivy-system \
  --create-namespace \
  --set="trivy.severity=CRITICAL,HIGH"

trivy.severity=CRITICAL,HIGH というパラメータにより、Operatorは真に危険な脆弱性のみに焦点を当て、DevOpsチームが適切な場所に優先順位を付けて対処できるようにします。

ステップ3:脆弱性レポート(Vulnerability Reports)の確認

インストールから1〜2分後、Operatorは自動的にスキャンを開始します。現在存在する脆弱性の概要を表示するには、以下を実行します:

kubectl get vulnerabilityreports --all-namespaces

特定のアプリケーション(例:redis-cart)を詳しく調査したい場合は、describe コマンドを使用します。結果には、CVEコード、影響を受けるライブラリ、そして特に重要な Fixed Version(修正済みバージョン)の詳細が表示されます。これは、開発者がどのバージョンにアップグレードすべきかを正確に知るための非常に価値のある情報です。

ステップ4:YAML設定ミスのチェック

これは非常に「価値のある」機能です。Trivy Operatorは、デプロイメントファイルにセキュリティ上の不備がないか自動的にチェックします。次のコマンドを試してみてください:

kubectl get configauditreports --all-namespaces

もし DANGER カラムに赤い数字が表示されていたら、すぐに確認が必要です。多くの場合、CPU/RAMのリミット設定漏れ、readOnlyRootFilesystem の未設定、またはコンテナのroot権限実行などが原因です。

ステップ5:ダッシュボードによる可視化

コマンドラインだけで終わらせないでください。このデータをGrafanaに統合することをお勧めします。Trivy OperatorはPrometheus用のメトリクスを標準で提供しています。脆弱性のグラフが時間の経過とともに減少していくのを見ることは、チームやマネージャーにとって大きな安心感につながります。

運用における実戦的なアドバイス

実際の導入プロセスを通じて、システムをよりスムーズに動かすための注意点をいくつか紹介します:

  • リソース制限: デフォルトでは、スキャンプロセスがメモリを消費する可能性があります。メインアプリケーションのリソースを圧迫しないよう、Operatorに resources.limits(例:500Mi RAM)を設定してください。
  • ストレージ管理: レポート(CRD)は etcd に保存されます。クラスターに数千のPodがある場合、etcd の容量が急速に増加する可能性があります。古いレポートを定期的にクリーンアップするように設定しましょう。
  • プライベートレジストリ: Operatorが会社のプライベートリポジトリからイメージをプルしてスキャンできるように、trivy-system ネームスペースに imagePullSecrets を作成することを忘れないでください。

セキュリティは一度きりの作業ではなく、継続的な改善プロセスです。Trivy Operatorを導入することで、自動監視システムが手に入り、運用チームの負担を軽減しながら、製品の安全性を新たな高みへと引き上げることができます。

Share: