セットアップ手順
KestreLynxはDockerホストごとに1つのコンテナとして、またはKubernetesクラスタ内で
レプリカ数1のDeploymentとして動作します。
実行中のコンテナが使用しているイメージを特定してスキャンし、その結果をSlackまたは
Webhookへ送信します。
必要なもの
- Docker ComposeまたはDocker CLIを利用できるDockerホスト、または
kubectlで アクセスでき、永続ストレージを利用できるKubernetesクラスタ - 次のうち1つ以上の通知先
- Slack Incoming Webhook
- Slack Bot Tokenとチャンネル
- Webhook URL
Docker Composeで実行
リポジトリをダウンロードまたはcloneし、ローカル設定ファイルを作成します。
git clone https://github.com/kitsunetrail/kestrelynx.git
cd kestrelynx
cp config.example.yml config.yml
以下のように少なくとも1つの通知先を設定してください。
KestreLynxを起動します。
同梱のComposeファイルは、kestrelynx-stateボリュームを/var/lib/kestrelynxにマウントします。
スキャン履歴と脅威情報フィードのキャッシュを保持するため、このボリュームを永続化してください。
保存先の設定は設定、履歴が差分判定に与える影響は履歴の継続を参照してください。
Dockerで実行
docker run -d --name kestrelynx \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-v "$PWD/config.yml:/etc/kestrelynx/config.yml:ro" \
-v kestrelynx-state:/var/lib/kestrelynx \
ghcr.io/kitsunetrail/kestrelynx:latest
修正PRを有効にする場合のDockerソケットの権限は、修正PRの有効化を参照してください。
Dockerでは、任意のSensor(実験的)を追加すると使用中のパッケージの所見に印が付き、 優先度を変えずに同じ区分内で先に並びます。導入手順と観測の限界は 稼働時の使用状況に記載しています。
修正計画と修正PR
Docker向けの機能の概要は修正計画の案内を参照してください。
| 操作 | 手順 |
|---|---|
| 更新候補の計画を有効にする | 修正計画の有効化 |
| GitHubへのPR作成を有効にする | 修正PRの有効化 |
Kubernetesで実行
リポジトリをダウンロードまたはcloneしてください。deploy/kubernetes/ディレクトリには、
次のマニフェストが含まれています。
| ファイル | リソース |
|---|---|
serviceaccount.yaml |
kestrelynx名前空間のServiceAccount kestrelynxです。 |
clusterrole.yaml |
Pod、Node、ReplicaSet、Deployment、StatefulSet、DaemonSet、Job、CronJobへの読み取り専用のgetとlistアクセスを許可するClusterRoleです。 |
clusterrolebinding.yaml |
そのロールをServiceAccountに割り当てるClusterRoleBindingです。 |
configmap.yaml |
config.ymlを含むConfigMap kestrelynx-configです。 |
pvc.yaml |
アクセスモードReadWriteOnceで1 GiBを要求するPersistentVolumeClaim kestrelynx-stateです。 |
deployment.yaml |
Recreate戦略を使用するレプリカ数1のDeploymentです。設定を/etc/kestrelynxに、状態データを/var/lib/kestrelynxにマウントします。 |
deploy/kubernetes/configmap.yamlに少なくとも1つの通知先を設定してください。
その中のconfig.ymlにはkubernetes.enabled: trueを設定し、docker.socketには
空文字列""を含む値を設定しないでください。キーの省略または値のnull指定は受け付けます。
空のdocker:セクションは受け付けます。config.example.ymlを基に設定する場合は、
docker:セクション全体を削除してください。
1つのインスタンスが1つのクラスタを対象とします。既定ではすべての名前空間を
スキャンします。kubernetes.namespacesを設定すると、スキャン対象を指定した
名前空間に制限できます。複数のインスタンスから1つのSlackチャンネルへ投稿する場合は、
インスタンスを区別するためにenvironment.nameを設定してください。
設定項目については設定項目を参照してください。
Trivyはレジストリからイメージを取得するため、スキャナPodからレジストリへ
アクセスできる必要があります。非公開レジストリのイメージを使用する場合は、
kestrelynx名前空間に、型がkubernetes.io/dockerconfigjsonの
kestrelynx-registry-authという名前のSecretを作成してください。
deploy/kubernetes/deployment.yaml内のDOCKER_CONFIG環境変数、
registry-authボリュームマウント、Secretボリュームのコメントを解除してください。
これにより、Secretの.dockerconfigjsonキーを、DOCKER_CONFIGで指定した
ディレクトリ/etc/kestrelynx/dockerの下にconfig.jsonとしてマウントします。
スキャン対象のWorkloadのimagePullSecretsは再利用しません。
クラスタに合わせてPVCのストレージ設定を調整し、名前空間を作成して、 準備したマニフェストを適用してください。
kubectl create namespace kestrelynx
kubectl apply -f deploy/kubernetes/
kubectl logs -n kestrelynx deployment/kestrelynx -f
PVCは、Podを再作成した後もスキャン履歴、初回検出日、脅威情報フィードのキャッシュを
保持します。更新中にPodが重複して稼働しないよう、レプリカ数1とRecreate戦略を
維持してください。2つのインスタンスで1つの状態データ用ボリュームを共有しないでください。
タイムゾーンを設定
schedule.daily_atは、TZで指定したタイムゾーンとして解釈されます。
Composeの例ではUTCが既定値です。必要に応じて、運用するホストのタイムゾーンへ
変更してください。
同じ設定は、deploy/kubernetes/deployment.yaml内のTZ環境変数にも適用されます。
こちらも既定値はUTCです。
参考ページ
- 設定 — 設定項目と既定値
- スキャン通知の送信条件 — 通知モードごとの送信条件