本文の内容は、2022年2月18日現在における、docs.sysdig.com上のIntegrate Effective Vulnerability Exposure with Snyk(https://docs.sysdig.com/en/docs/sysdig-secure/integrate-effective-vulnerability-exposure-with-snyk/#copy-the-sysdig-secret) を元に日本語に翻訳・再構成した内容となっております。
効果的な脆弱性のエクスポージャー
Effective Vulnerability Exposure(略してEVE)は、Sysdigが開発した新技術で、特定のコンテナ・イメージの実行時の挙動と、そのソフトウェア・パッケージで検出された脆弱性を組み合わせます。この組み合わせにより、どのパッケージが実行時に効果的にロードされているか、つまりインフラにとってより直接的なセキュリティの脅威となっているかを判断します。組織にとって実際のリスクとなる脆弱性に優先順位をつけることは、脆弱性管理プログラムを成功させるための最も重要な要素の一つです。イメージには何百もの脆弱性が含まれていることがよくあります。これに、重要なインフラストラクチャーのデプロイメントで実行されているワークロードの数を掛けると、修正すべき潜在的な脆弱性の総数が実際には非常に多いことが容易にわかります。
リストのフィルタリングを開始するために、一般的に使用され受け入れられている多くの優先順位付け基準があります(深刻度とCVSSスコアリング、エクスプロイト可能性の指標、ランタイムスコープとその他の環境の考慮事項など)。EVEは、観察されたランタイムの動作に完全に裏付けられた新しい基準であり、脆弱性管理ツールベルトに追加することで、優先的に対処する必要のある脆弱性の作業セットを大幅に削減することができます。
テクノロジーの概要
Sysdigエージェント・コンポーネントは、インスツルメンテッド・ノード(ホスト)ごとにデプロイされ、ランタイム・ワークロードの動作を継続的に観察します。収集される情報には次のようなものがあります。- イメージ・ランタイムの動作プロファイル:アクセスしたファイル、実行中のプロセス、システムコールなど。詳細は「イメージのプロファイル」を参照してください。
- ランタイムコンテナが使用するコンテナイメージに関連する「Bill Of Materials」:使用されたパッケージやバージョン、それらに一致する脆弱性など。
サポートされているパッケージ・フォーマット/パッケージ・マネージャー
- Debian (deb)
- Alpine (apk)
- RHEL (rpm)
- Ubuntu (deb)
- Java (Maven)
- Golang
- NPM (JS)
- Python (Pypi)
- Docker daemon
- ContainerD
Snykとの統合における概要
Snyk.ioの脆弱性管理ワークフローでは、ランタイムのEVE情報を利用して、検出された脆弱性をフィルタリングしたり、優先順位をつけたりすることができ、上記と同様のアプローチをとります。SysdigのEVE情報をSnykの脆弱性管理ワークフローに統合するには、以下の条件を満たしている必要があります。
- 両製品を使用するためのアカウントと作業用ライセンスを持っていること:Snyk, Sysdig Secure
- 両方の製品を使って対象のランタイムノードをインストゥルメントする:Snyk, Sysdig Secure
- SysdigアカウントでSysdig EVEを明示的に有効にするよう、Sysdigのコマーシャル・コンタクトに依頼してください。特に、以下の機能のフラグが必要です。
- Image Profiling
- Scanning v2 EVE
- Scanning v2 EVE integration
インストール手順
Snykがインストールされていて、Sysdigがインストールされていない場合
- Snykインスツルメンテーションを実行するために、現在使用しているネームスペースを確認してください。デフォルトはsnyk-monitorです。最後のステップでシークレットをコピーする際に必要になります。
- 公式のhelm chartを使ってSysdig agent bundleをインストールします。
helmにsysdiglabチャートを追加します:
$ helm repo add sysdig https://charts.sysdig.com
登録されているすべてのチャートリポジトリからチャートのリストを更新します。:
$ helm repo update
ネームスペース sysdig-agentを作成します:
kubectl create ns sysdig-agent
Sysdig agent bundleをインストールして、必須のパラメータを提供し、eveとeveConnectorフラグを有効にし、その他の設定キーを好みに合わせて調整します。
$ helm install --namespace sysdig-agent sysdig-agent \ --set clusterName="sysdig-eve" \ --set sysdig.accessKey="<access-key>" \ --set sysdig.settings.collector=collector-static.sysdigcloud.com \ --set sysdig.settings.collector_port=6443 \ --set nodeAnalyzer.apiEndpoint="secure.sysdig.com" \ --set nodeAnalyzer.runtimeScanner.deploy=true \ --set nodeAnalyzer.runtimeScanner.eveConnector.deploy=true \ sysdig/sysdig
- Sysdigのエージェントイメージ、RuntimeScanner、EveConnectorポッドが稼働しており、健全であることを確認します。
$ kubectl -n sysdig-agent get po NAME READY STATUS RESTARTS AGE sysdig-agent-8rmkt 1/1 Running 0 24s sysdig-agent-eveconnector-api-74767bbf54-lw97g 1/1 Running 0 23s sysdig-agent-hprw7 1/1 Running 0 24s sysdig-agent-jrx2q 1/1 Running 0 24s sysdig-agent-node-analyzer-5hltb 4/4 Running 0 24s sysdig-agent-node-analyzer-b5ftm 4/4 Running 0 24s sysdig-agent-node-analyzer-cd8rc 4/4 Running 0 24s
パラメーター:- clusterName: このクラスターをグローバルに識別するためのクラスター名を設定します.上記の例では “sysdig-eve”
- sysdig.accessKey: Sysdig agent key
- sysdig.settings.collector: リージョンに応じたコレクター・アドレスの設定
- US-east-1: collector.sysdigcloud.com
- US-west-1: ingest-us2.app.sysdig.com
- EU: ingest-eu1.app.sysdig.com
- nodeAnalyzer.apiEndpoint: リージョンに応じたAPIエンドポイントの設定
- US-east-1: secure.sysdig.com
- US-west-1: us2.app.sysdig.com
- EU: eu1.app.sysdig.com
- nodeAnalyzer.runtimeScanner.deployとnodeAnalyzer.runtimeScanner.eveConnector.deployを設定します。
- 両方ともtrueに設定します。
SysdigのシークレットをSnykのネームスペースにコピーします。
データが初期化され、初期プロファイルの送信が開始されるまで1時間ほどかかりますが、その後はSnykの脆弱性管理ワークフローを使ってEVEのデータを活用できるようになります。
EVEなしでSysdigがインストールされており、Snykがインストールされていない場合
EVEとEVE Connectorを有効にせず、Sysdig helm chartを既にインストールしている場合は、以下の作業が必要です。- Snyk instrumentationをドキュメントに従ってインストールする
- Sysdigエージェント・ヘルムチャートの再インストール(およびアップグレード):
以下の内容でsysdig-values.yamlファイルを作成します:
nodeAnalyzer: runtimeScanner: deploy: true image: repository: sysdig/vuln-runtime-scanner tag: 0.1.0 digest: pullPolicy: IfNotPresent resources: requests: cpu: 150m memory: 512Mi ephemeral-storage: "2Gi" limits: cpu: 1000m memory: 1536Mi ephemeral-storage: "4Gi" settings: eveEnabled: false eveConnector: deploy: true image: repository: sysdig/eveclient-api tag: 1.0.0 digest: pullPolicy: IfNotPresent resources: requests: cpu: 100m memory: 128Mi limits: cpu: 1000m memory: 512Mi settings: replicas: 1
Helm は以下のコマンドでアップグレードします
$ helm upgrade --namespace sysdig-agent sysdig-agent \ --reuse-values \ -f sysdig-values.yaml \ sysdig/sysdig
Sysdigも Snykも無い場合
- Sysdig agent bundleを公式のhelm chartを用いて、最初のインストールシナリオの手順とパラメータを含めてインストールします。
- Snyk instrumentationをそのドキュメントに従ってインストールします。
- SysdigのSecretをSnykのネームスペースにコピーします。
Sysdigシークレットのコピー
SysdigとSnykインスツルメンテーションの両方がデプロイされ、正常に動作するようになったら、Sysdigのネームスペースで自動生成されたシークレットをSnykのネームスペースにコピーする必要があります。Sysdig(sysdig-agent)とSnyk(snyk-monitor)のデフォルトのネームスペースを仮定して、あなたの特定の値に置き換えてください:
$ kubectl get secret -n sysdig-agent sysdig-eve-secret -o json | jq '{ "apiVersion": .apiVersion, "kind": .kind, "type": .type, "metadata": { "name": .metadata.name }, "data": .data }' | kubectl apply -n snyk-monitor -f -