こんにちは!Kubernetesの運用、日々のPodの管理やデプロイにお疲れ様です。
「また新しい脆弱性(CVE)のニュースが出たけれど、うちのクラスターで動いているあのコンテナイメージは大丈夫だろうか……?」
夜中にこんな不安に襲われた経験はありませんか?
世の中には数多くの脆弱性スキャナーが存在しますが、「CI/CDでビルドした瞬間」から「本番のKubernetesでランタイムとして動いている瞬間」までをシームレスに監視し、さらにオブザーバビリティ(可観測性)と完全に統合できるツールはそう多くありません。
今回は、Datadog Cloud Security Platformの強力な機能である「Container Image Vulnerability Management(コンテナイメージ脆弱性スキャン)」を取り上げます。
これをマスターすれば、バラバラだったセキュリティ情報とメトリクス・ログがDatadog上で一つに繋がり、毎日の脆弱性対応のストレスが劇的に軽くなりますよ。初心者の方にもすんなり理解できるよう、基本の「キ」から実務で使えるノウハウまで、順番に優しく紐解いていきましょう!
—
1. なぜDatadogでコンテナ脆弱性を管理するのか?(ツールの役割)
まず、「なぜわざわざDatadogを使うのか」という本質を押さえましょう。
従来の脆弱性スキャンは、「CI(JenkinsやGitHub Actionsなど)のビルド時にスキャンして、ダメなら止める」というアプローチが主流でした。しかし、これには大きな穴があります。
1. デプロイ後に新たな脆弱性が発覚する(ゼロデイや後追いでのCVE発見)
2. ベースイメージの更新漏れ
3. 「で、結局どの本番ポッドがその脆弱性の影響を受けているの?」という優先順位付け(トリアージ)の難しさ
Datadogのコンテナ脆弱性管理は、Kubernetesクラスターに常駐するDatadog Agent(正確にはCluster AgentやNode Agent)が、今まさに動いているイメージのSBOM(ソフトウェア部品表)を自動で抽出し、Datadogの脅威データベースと突合してくれます。
つまり、「CI/CDでのシフトレフト(早期発見)」と「本番環境でのランタイム監視(現状把握)」の双方を、すでに導入しているDatadogのダッシュボード上で一元管理できるのが最大の強みです。
—
2. 導入と基礎セットアップのステップ
それでは、実際にKubernetes環境へこの機能を導入していきましょう。
前提として、すでにKubernetesクラスターに Datadog Agent(Helmチャート等) がデプロイされている状態を想定して解説します。
ステップ1: Helmチャートでの機能有効化
Datadogでの脆弱性スキャンを有効にするには、Helmの値(`values.yaml`)でいくつかのフラグを立てるだけです。これだけで、Agentがコンテナのメタデータとイメージの検査を始めます。
以下が、実務でそのまま使える設定の骨子です。
datadog-values.yaml
datadog:
apiKey: “
appKey: “
site: “datadoghq.com” # 契約リージョンに合わせて変更(ap1.datadoghq.comなど)
# 1. SBOM(ソフトウェア部品表)の生成と収集を有効化
sbom:
containerImage:
enabled: true
2. クラスター内のセキュリティ機能を有効化
clusterAgent:
enabled: true
admissionController:
enabled: true
3. セキュリティエージェント(脆弱性スキャンやCWSを担当)の有効化
securityAgent:
compliance:
enabled: true
runtime:
enabled: true
この設定ファイルを適用して、Helmをアップグレードします。
helm upgrade datadog-agent datadog/datadog -f datadog-values.yaml
たったこれだけの設定で、Datadog Agentはクラスター内のノードで動くコンテナイメージを解析し始めます。
—
3. 精度高い「Hello World」的な動作確認
「ちゃんとスキャンが動いているか?」を確認するために、わざと少し古くて脆弱性を含んだイメージをテスト用としてKubernetesにデプロイしてみましょう。
ここでは教育目的でよく使われる、少し古い脆弱なNode.jsアプリや、古いAlpineイメージなどを利用します。
テスト用Podのデプロイ
以下のマニフェスト(`vulnerable-pod.yaml`)を作成してください。
apiVersion: v1
kind: Pod
metadata:
name: vulnerability-test-pod
namespace: default
labels:
app: test-vuln
spec:
containers:
- name: web
# あえて古いバージョンのnginxを使用(脆弱性が含まれている可能性が高い)
image: nginx:1.16.0
ports:
- containerPort: 80
クラスターに適用します。
kubectl apply -f vulnerable-pod.yaml
Datadog画面での確認
1. DatadogのUIにログインします。
2. 左側メニューから [Security] -> [Vulnerability Management] -> [Software Packages] または [Containers] に移動します。
3. フィルターに `env:default` や `image_name:nginx` を入力して検索します。
数分待つと、先ほどデプロイした `nginx:1.16.0` が検知され、含まれている重大な脆弱性(Critical / HighなCVE)のリストがズラリと表示されます。
「あ、この古いNginxにはこんなに既知の脆弱性があるんだな」と直感的に確認できれば、動作確認は大成功です!
—
4. 実務で役立つ!重要度に応じたアラート設定と優先順位付けのノウハウ
さて、ここからが本番エンジニアの腕の見せ所です。
世の中の脆弱性をすべて完璧にゼロにすることは、スピードが求められる開発現場において不可能です。だからこそ「ノイズのない、本当に対応すべき脆弱性を見極める仕組み」を作る必要があります。
ノイズを減らすための優先順位付け(トリアージ)の鉄則
Datadogの脆弱性ダッシュボードには膨大な数がヒットします。以下の3つの軸でフィルターをかけ、アラートを絞り込みましょう。
1. 「本番環境(Production)」にデプロイされているか?
- ステージングや開発環境の脆弱性を今すぐ直す必要はありません。環境タグ(`env:prod`)で絞り込みます。
2. 「インターネットに露出(In-cluster / Reachable)」しているか?
- 内部でひっそり動いているバッチ処理のコンテナと、外向きにAPIを叩いているフロントエンドのコンテナでは、リスクの重大性がケタ違いです。
3. 「修正パッチ(Fix available)」が存在するか?
- 直し方がない脆弱性に怯えても仕方ありません。「Fixable: true」の条件を必ずアラートの条件に加えましょう。
実践的なSlack通知モニターの設定
「Critical(致命的)な脆弱性を持つイメージが、本番環境にデプロイされた瞬間に通知を飛ばす」モニターの作り方です。
Datadogの [Monitors] -> [New Monitor] -> [Security Platform] から、以下のような条件でアラートを作成します。
- Queryの構築例:
# 本番環境(env:prod)で、重要度がCritical、かつ修正が存在する脆弱性が検出されたとき
@security.vulnerability(env:prod, severity:critical, fixable:true).as_count() > 0
- アラートメッセージの書き方のコツ(現場が助かるテンプレート):
🚨 【緊急】本番環境でCriticalなコンテナ脆弱性が検知されました!
- 影響を受けるイメージ: {{host.image_name}}
- Kubernetes Namespace: {{kube_namespace.name}}
- Pod名: {{kube_pod.name}}
- 検出された脆弱性: {{security.vulnerability.name}} (CVSS Score: {{security.vulnerability.cvss}})
- 対策: 速やかにベースイメージをアップデートし、再デプロイを実施してください。
ダッシュボードリンク: https://app.datadoghq.com/security/vulnerability…
このように、「どのPodの、どのイメージに、どう対応すればいいか」のコンテキストを通知メッセージに含めることで、アラートを受け取ったエンジニアが迷わず対応できるようになります。
—
おわりに
いかがでしたでしょうか?
Datadog Container Image Vulnerability Managementを導入すれば、「セキュリティ部門からの指摘に慌てて対応する」受動的な運用から、「Datadogのダッシュボードで常に健康状態が可視化されている」能動的なオブザーバビリティ駆動のセキュリティ運びにシフトできます。
「これをマスターすれば、毎日の作業が劇的に楽になりますよ」。
夜中に脆弱性の夢でうなされることももうありません。ぜひ、あなたのクラスターでも試してみてくださいね。
それでは、快適なKubernetesライフを!