コンテンツにスキップ

セットアップ手順

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つの通知先を設定してください。

notify:
  slack_webhook_url: "https://hooks.slack.com/services/..."

KestreLynxを起動します。

docker compose up -d
docker compose logs -f

同梱の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が既定値です。必要に応じて、運用するホストのタイムゾーンへ 変更してください。

environment:
  - TZ=Asia/Tokyo

同じ設定は、deploy/kubernetes/deployment.yaml内のTZ環境変数にも適用されます。 こちらも既定値はUTCです。

参考ページ