Jenkins との連携

Kaspersky Endpoint Security は、Jenkins との連携をサポートしています。Jenkins Pipeline プラグインを使用して、様々な段階で Docker イメージをスキャンできます。たとえば、開発プロセス中や公開前に、リポジトリ内の Docker イメージをスキャンできます。

Kaspersky Endpoint Security を Jenkins と連携するには:

  1. Jenkins ノードに Kaspersky Endpoint Security をインストールします。
  2. Jenkins ノードに Docker Engine をインストールします。

    詳細は、Docker Engine のガイドを参照してください。

  3. Kaspersky Endpoint Security の管理者権限を Jenkins ユーザーに付与します:

    kesl-control --grant-role admin <Jenkins ユーザー名>

  4. Jenkins ユーザーを docker グループに追加します:

    sudo usermod -aG docker <Jenkins ユーザー名>

    通常、名前には jenkins が使用されます。

  5. Jenkins で、名前に test を使用して新しいビルドジョブを作成します([新しいアイテム]→[アイテム名を入力])。

    jenkins_create_job

  6. 必要に応じて、プロジェクトを設定します。結果として、スキャンする必要があるイメージや起動済みコンテナがあると仮定します。
  7. Docker コンテナを起動するには、次のスクリプトを Jenkins のビルド手順に追加します。Jenkins プラグインを使用して、または別の方法で Docker コンテナを起動する場合は、実行中の Docker コンテナの ID をファイル /tmp/kesl_cs_info に保存して、さらにスキャンします:

    TMP_FILE="/tmp/kesl_cs_info"

    EXIT_CODE=0

    echo "Start container from image: '${TEST_CONTAINER_IMAGE}'"

    CONTAINER_ID=$(docker run -d -v /storage:/storage ${TEST_CONTAINER_IMAGE} /storage/docker_process.sh)

    if [ -z "${CONTAINER_ID}" ] ; then

    echo "Cannot start container from image ${TEST_CONTAINER_IMAGE}"

    exit 1

    fi

    echo "${CONTAINER_ID}" > ${TMP_FILE}

    exit ${EXIT_CODE}

    jenkins_contianer_name

  8. アーティファクトをビルドしたら、Jenkins をビルドする手順に次のスクリプトを追加します。

    このスクリプトは、スキャンに対して 1 つのコンテナをサポートします。必要に応じて、スクリプトを編集します。

    TMP_FILE="/tmp/kesl_cs_info"

    EXIT_CODE=0

    if [ ! -f "${TMP_FILE}" ] ; then

    echo "Cannot find temporary file with container ID: '${TMP_FILE}'"

    exit 1

    fi

    CONTAINER_ID=$(cat ${TMP_FILE})

    if [ -z "${CONTAINER_ID}" ] ; then

    echo "Cannot find container ID in the temporary file: '${TMP_FILE}'"

    exit 1

    fi

    echo "Start anti-virus scan for: '${CONTAINER_ID}'"

    THREATS_AMOUNT=$(kesl-control --scan-container ${CONTAINER_ID}|grep 'Total detected objects'|awk '{print $5}')

    if [ "${THREATS_AMOUNT}" != "0" ] ; then

    echo "ATTENTION! ${THREATS_AMOUNT} threats detected at: '${CONTAINER_ID}'"

    EXIT_CODE=1

    else

    echo "Not threats found"

    fi

    echo "Remove container: {${CONTAINER_ID}}"

    docker kill ${CONTAINER_ID}

    docker rm -f ${CONTAINER_ID}

    rm -f ${TMP_FILE}

  9. リポジトリから Docker イメージをスキャンするには、次のスクリプトを使用します:

    DOCKER_FILE=https://raw.githubusercontent.com/ianmiell/simple-dockerfile/master/Dockerfile

    DOCKER_FILE_FETCHED=$$.Dockerfile

    TEST_IMAGE_NAME=test_image

    echo "Build image from ${DOCKER_FILE}"

    curl ${DOCKER_FILE} -o ${DOCKER_FILE_FETCHED}

    if [ -f ${DOCKER_FILE_FETCHED} ] ; then

    echo "Dockerfile fetched: ${DOCKER_FILE_FETCHED}"

    else

    echo "Dockerfile not fetched"

    exit 1

    fi

    docker build -f ${DOCKER_FILE_FETCHED} -t ${TEST_IMAGE_NAME} .

    echo "Scan docker image"

    SCAN_RESULT=$(/opt/kaspersky/kesl/bin/kesl-control --scan-container ${TEST_IMAGE_NAME}*)

    echo "Scan done: "

    echo $SCAN_RESULT

  10. ビルドジョブを保存します。
ページのトップに戻る