0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Sysdig × Snyk SCA Enrichment 連携手順 — Runtime の脆弱性を「修正対象のソースコード」まで一気通貫で追う

0
Posted at

Sysdig × Snyk SCA Enrichment 連携手順 — Runtime の脆弱性を「修正対象のソースコード」まで一気通貫で追う

はじめに

Sysdig Secure の Runtime Vulnerability Findings は、本番環境のコンテナで実際に動いているパッケージから脆弱性を検知する強力な機能です。ただし、ここで分かるのは「prod に何が刺さっているか」までで、開発側に修正を投げる際は「どのリポジトリの・どのブランチの・どのマニフェストを直すか」までを別途特定する必要があります。

この runtime 側の脆弱性と SDLC 側のソースコードを繋ぐのが、本記事で扱う Sysdig × Snyk SCA Inbound Integration です。設定後は Sysdig の脆弱性詳細画面に Snyk 由来の Repository / Branch / Commit / File Path / Remediation / Vendor Link が enrich されて表示されます。

本記事では、ゼロからこの連携を構築し、実際に enrichment 表示まで確認する手順をチュートリアル形式で整理します。

対象読者

  • Sysdig Secure を導入済みで、Snyk SCA との連携を検討している設定担当者
  • Runtime 脆弱性から開発側への fix 依頼までを自動化したい SecOps エンジニア
  • Sysdig SE / セキュリティ営業で、顧客 PoC の手順を抑えたい方

この記事で分かること

  • Sysdig × Snyk SCA enrichment 連携の全体像とアーキテクチャ
  • サンプルアプリ準備から enrichment 表示までのエンドツーエンド手順
  • OCI image source label と Snyk Project URL の役割
  • Sysdig UI 上での enrichment 表示の確認ポイント

1. 連携の全体像

1.1 何が連携されるのか

Sysdig × Snyk SCA Integration は Inbound 型の連携です。Snyk 側の Open Source Project が持つ SCA 情報(依存パッケージの脆弱性、修正バージョン、ソースコードの位置情報)を Sysdig 側に取り込み、Sysdig が runtime で検出した同じパッケージの脆弱性に**メタデータを付加(enrich)**します。

つまり:

1.2 マッチングの仕組み

Sysdig が runtime image を Snyk Project に紐付けるキーは OCI Image Source Label です。

LABEL org.opencontainers.image.source="https://github.com/<owner>/<repo>"

この URL が Snyk 側で onboard した GitHub Project の URL と一致した時点で、両者の SCA データが結合されます。

1.3 全体構成


2. 前提条件

項目 要件
Sysdig Secure SaaS / On-Prem いずれも可。本記事は SaaS US East を前提
Sysdig Agent 対象クラスタに deploy 済、Runtime Scanner が Running
Snyk Group / Organization が存在し、GitHub Integration が設定済
Snyk API Token User API Token または Service Account Token
Snyk Org ID Snyk Settings → General で確認可
Kubernetes Cluster Sysdig agent が動いている任意のクラスタ
Container Registry image push 先(本記事は Google Artifact Registry を使用)
GitHub Account サンプル repo を作成・push できる account

3. 手順

3.1 サンプル Node.js アプリの準備

意図的に脆弱な依存を含む Node.js アプリを用意します。

package.json

{
  "name": "sysdig-snyk-sca-demo",
  "version": "1.0.0",
  "description": "Sysdig x Snyk SCA enrichment verification demo app",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "engines": {
    "node": ">=18"
  },
  "dependencies": {
    "express": "4.17.1",
    "lodash": "4.17.4",
    "minimist": "1.2.0",
    "axios": "0.21.0",
    "node-fetch": "2.6.0",
    "ws": "7.4.0",
    "moment": "2.29.1",
    "qs": "6.5.2"
  }
}

代表的に検出される CVE:

Package Version 既知 CVE
lodash 4.17.4 CVE-2019-10744 (Prototype Pollution)
minimist 1.2.0 CVE-2020-7598, CVE-2021-44906
axios 0.21.0 CVE-2020-28168 (SSRF)
body-parser (express 経由) 1.19.0 CVE-2024-45590 (DoS)
moment 2.29.1 CVE-2022-31129 (ReDoS)

index.js

const express = require('express');
const _ = require('lodash');
const minimist = require('minimist');

const app = express();
const args = minimist(process.argv.slice(2));
const port = args.port || process.env.PORT || 3000;

app.get('/', (req, res) => {
  res.json(_.merge({}, { app: 'sysdig-snyk-sca-demo', status: 'ok' }));
});

app.get('/health', (req, res) => res.status(200).send('OK'));

app.listen(port, () => console.log(`listening on :${port}`));

3.2 Dockerfile(OCI Source Label が肝心)

連携のマッチングキーになるので、org.opencontainers.image.source必ず設定します。

FROM node:18-bullseye-slim

LABEL org.opencontainers.image.source="https://github.com/<owner>/sysdig-snyk-sca-demo"
LABEL org.opencontainers.image.title="sysdig-snyk-sca-demo"
LABEL org.opencontainers.image.description="Sysdig x Snyk SCA enrichment demo"

WORKDIR /app
COPY package.json ./
RUN npm install --omit=dev
COPY index.js ./

EXPOSE 3000
CMD ["node", "index.js"]

ラベル値の URL は GitHub 上の repo URL と完全一致させる必要があります(https:// 始まり、.git 無し)。

3.3 GitHub リポジトリ作成 & push

git init -b main
git add .
git commit -m "Initial commit: sysdig-snyk-sca-demo"
gh repo create <owner>/sysdig-snyk-sca-demo --public --source=. --remote=origin --push

3.4 Snyk への repo onboarding

  1. https://app.snyk.io にログイン
  2. 対象 Organization を選択
  3. Add projectGitHub を選択
    • GitHub Integration が未設定の場合は Settings → Integrations → GitHub → Connect を先に実施
  4. 一覧から <owner>/sysdig-snyk-sca-demo を選び Add selected repositories
  5. Projects タブで package.json が import され、脆弱性が検出されることを確認

新規 repo が一覧に出ない場合は、GitHub 側の Snyk App が新 repo へのアクセス権を持っていない可能性があります。https://github.com/settings/installations で Snyk App の Repository access を確認してください。

3.5 Docker image build & registry push

GAR を使う例:

gcloud auth configure-docker asia-northeast1-docker.pkg.dev --quiet

docker buildx build --platform linux/amd64 \
  -t asia-northeast1-docker.pkg.dev/<project>/<repo>/sysdig-snyk-sca-demo:v1 \
  --push .

push 後、image に label が反映されていることを確認:

docker inspect asia-northeast1-docker.pkg.dev/<project>/<repo>/sysdig-snyk-sca-demo:v1 \
  --format '{{json .Config.Labels}}' | jq
# => "org.opencontainers.image.source": "https://github.com/<owner>/sysdig-snyk-sca-demo"

3.6 Kubernetes へ deploy

deployment.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: sca-demo
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sysdig-snyk-sca-demo
  namespace: sca-demo
  labels:
    app: sysdig-snyk-sca-demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: sysdig-snyk-sca-demo
  template:
    metadata:
      labels:
        app: sysdig-snyk-sca-demo
    spec:
      containers:
        - name: app
          image: asia-northeast1-docker.pkg.dev/<project>/<repo>/sysdig-snyk-sca-demo:v1
          imagePullPolicy: Always
          ports:
            - containerPort: 3000
          readinessProbe:
            httpGet:
              path: /health
              port: 3000
            initialDelaySeconds: 5
            periodSeconds: 10
kubectl apply -f deployment.yaml
kubectl -n sca-demo rollout status deploy/sysdig-snyk-sca-demo

3.7 Sysdig × Snyk Integration の設定

3.7.1 Snyk 側で必要情報を取得

  • API Token: Snyk 右上アバター → Account settingsAuth Token → クリックして表示・コピー
  • Organization ID: Snyk → 対象 Org → Settings (歯車)General に表示される UUID をコピー

3.7.2 Sysdig 側で Integration を登録

Sysdig Secure UI で:

  1. IntegrationsSource Code ManagementSnyk(または Settings → Integrations → Snyk
  2. Add Integration をクリック
  3. フォームに入力:
    • Name: 任意(例:snyk-sca
    • API Token: 3.7.1 で取得した token
    • Org ID: 3.7.1 で取得した UUID
    • Region: Snyk が US instance なら US、EU なら EU
  4. Test connectionSave

設定後、Integration 詳細画面で Status: ConnectedLast Sync タイムスタンプが入ることを確認します。

3.8 Sysdig UI で enrichment を確認

3.8.1 image が runtime scan に検出されているか

Sysdig Secure → Vulnerabilities → Runtime で以下を絞り込み:

  • Cluster: 対象クラスタ名
  • Namespace: sca-demo
  • Image: sysdig-snyk-sca-demo

リストに対象 image とその CVE 群が表示されたら scan は成功しています。

3.8.2 OCI label が Sysdig に認識されているか

任意の image を選択 → Inventory ビュー(または Image detail)→ Detail タブで Docker labels を確認。

org.opencontainers.image.source : https://github.com/<owner>/sysdig-snyk-sca-demo

が表示されていれば、Sysdig はマッチングに使うキーを取得できています。

3.8.3 enrichment の表示確認

任意の CVE(例:lodash の CVE-2019-10744)をクリックして詳細パネルを開き、以下を確認します。

確認項目 enrich 完了の表示
Severity の "by" by NVD ではなく by Snyk
External Links security.snyk.io/vuln/SNYK-JS-... リンクが表示
Remediations 具体的な fix version(例:Upgrade lodash to 4.17.21
Source Code / Repository GitHub repo URL、branch、commit が表示
File Path /app/node_modules/... ではなく、ソース側 package.json

すべて埋まっていれば、Runtime からソースコードまでの追跡パスが完成しています。


4. 反映タイミングについて

Sysdig × Snyk Integration の enrichment は、設定直後に即時反映されるわけではなく、最大24時間程度の sync 待ちが公式に明記されています。実測上は数十分〜数時間で反映されることが多いです。

設定直後に表示が確認できない場合は、以下の順で切り分けます。

  1. Integration Status: Connected であるか
  2. Last Sync が更新されているか
  3. Snyk 側 Project に対象 CVE が出ているか
  4. Sysdig UI の Image Detail で org.opencontainers.image.source が認識されているか
  5. Snyk Project Origin URL と OCI label URL が完全一致しているか(.git の有無、case など)

これらすべて OK で 24時間 待っても enrichment が表示されない場合は Sysdig Support 起票案件です。


5. まとめ

観点 Sysdig 単体 Snyk SCA 連携追加後
Runtime に何が刺さっているか
パッケージ名 / version
どの repo の・どの branch・どの commit
どの dependency file に書かれている
具体的な upgrade 経路 "Fix available" のみ
修正の開発側オーナー特定

Sysdig 単体でも runtime 脆弱性の検知はできますが、Snyk SCA 連携を追加することで「SecOps → DevOps への投げ返しに必要な情報」が同一画面で取得できるようになります。すでに Snyk を SCA / SAST で導入済の組織にとっては、既存投資を runtime 側まで延伸させる最短経路の連携と言えます。

設定自体は API Token と Org ID と OCI label の3点で成立する素直な構成です。一方で enrichment 表示までの sync 待ちは比較的長く、24h を見越したスケジュールで運用すると安全です。


参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?