- Использование параметра командной строки AnchoreCLI
- Плагин Jenkins Anchore Container Image Scanner для графического интерфейса
- Установка и настройка Anchore Engine
- Установка, настройка и использование Anchore CLI
- Настройка и использование плагина Anchore Container Image Scanner в Jenkins
- Предпосылки
- Шаг 1: – Настройте рабочие каталоги и загрузите файлы конфигурации.
- Скачайте файлы конфигурации
- Шаг 2: – Установите и запустите Anchore Engine
- Установка, настройка AnchoreCLI
- Шаг 3: – Установите AnchoreCLI
- Определите параметры Anchore Engine
- Шаг 4: – Добавление и анализ образов
- Анализ образов
- Шаг 5: – Получить и просмотреть результаты анализа
- Настройка и использование модуля Anchore Container Image Scanner в Jenkins
- Шаг 6: – Добавьте и настройте плагин Anchore Container Image Scanner в Jenkins
- Шаг 8: – Добавление и сканирование образов
- Шаг 9: – Добавить скрипт Pipeline
- Шаг 10: – Запустите сборку и просмотрите отчеты о проверке.
- Шаг 11: – Просмотр результатов
- Заключение
Предпосылки
Ниже приведены требования для этого урока;
- Локальная или виртуальная машина с Ubuntu 18.04 и следующими;
- Docker
- Docker–Compose
- Jenkins
- Пользователь sudo
Шаг 1: – Настройте рабочие каталоги и загрузите файлы конфигурации.
Создайте рабочий каталог для ваших файлов Anchore.
В этом каталоге вы создадите два подкаталога, один для конфигурации и один для базы данных.
Создайте домашний каталог для файлов Anchore
mkdir anchore
cd anchore
mkdir config
mkdir db
Скачайте файлы конфигурации
Как только каталоги будут готовы, мы загрузим два файла конфигурации (docker-compose.yaml и config.yaml) из проекта Github.
Чтобы скачать docker-compose.yaml
Перейдите в домашний каталог anchore и используйте команду
curl https://raw.githubusercontent.com/anchore/anchore-engine/master/scripts/docker-compose/docker-compose.yaml > docker-compose.yaml
curl https://raw.githubusercontent.com/anchore/anchore-engine/master/scripts/docker-compose/config.yaml -o ~/anchore/config/config.yaml
Однако в этом уроке мы будем использовать настройки по умолчанию.
Чтобы продолжить с учетными данными по умолчанию (имя пользователя – admin и пароль – foobar), перейдите к шагу 2.
Шаг 2: – Установите и запустите Anchore Engine
Вы будете использовать Docker compose для установки и запуска Anchore Engine и базы данных.
Из домашнего каталога Anchore запустите.
docker-compose up -d
Это автоматически вытянет образ Anchore, а затем создаст Anchore engine и базу данных в домашнем каталоге и каталогах ~/anchore/database/ соответственно.
По завершении команда запустит Anchore.
После успешной установки и запуска anchore engine вы можете сканировать образ с помощью командной строки AnchoreCLI.
Однако сначала вам нужно установить утилиту командной строки AnchoreCLI, как показано ниже.
Установка, настройка AnchoreCLI
На этом этапе вы узнаете, как установить и настроить инструмент командной строки AnchoreCLI.
Шаг 3: – Установите AnchoreCLI
В этом руководстве мы сначала установим утилиту python-pip, которая затем будет использоваться для установки AnchoreCLI из исходного кода.
Чтобы установить Python pip. Перейдите в домашний каталог Anchore и запустите
sudo apt-get update
sudo apt-get install python-pip
sudo pip install --upgrade setuptools
Установите AnchoreCLI, используя python-pip
pip install anchorecli
source ~/.profile
anchore-cli --version
anchore-cli --url http://localhost:8228/v1 --u admin --p foobar system status
Обратите внимание, что вы должны передать URL-адрес Anchore, имя пользователя и пароль.
Определите параметры Anchore Engine
Вместо того, чтобы предоставлять их каждый раз, альтернативой является определение их как переменных среды в следующем формате.
Чтобы передать URL, запустите
ANCHORE_CLI_URL=http://localhost:8228/v1
Это определяет URL-адрес вместе с портом 8228, который он использует.
Установите имя пользователя и пароль, используя значения по умолчанию; в противном случае замените их новыми значениями, установленными на шаге 1.
ANCHORE_CLI_USER=admin
ANCHORE_CLI_PASS=foobar
Вышеуказанные параметры устанавливаются только для текущей оболочки.
Чтобы установить текущую оболочку и другие процессы, которые запускаются из нее, мы используем команду export
export ANCHORE_CLI_URL
export ANCHORE_CLI_USER
export ANCHORE_CLI_PASS
Шаг 4: – Добавление и анализ образов
Теперь, когда у нас запущен Anchore Engine и настроен интерфейс командной строки, вы узнаете, как добавлять и анализировать образа на предмет проблем безопасности.
В этом уроке мы проанализируем два изображения. -openjdk:8-jre-alpin
и debian:latest without
Анализ образов
Для продолжения нам нужно сначала добавить образ:
anchore-cli image add openjdk:8-jre-alpine
anchore-cli image add docker.io/library/debian:latest
anchore-cli image add openjdk:10-jdk
anchore-cli image add openjdk:11-jdk
После добавления образов в Anchore Engine анализ начинается сразу.
Если загружено несколько образов, они помещаются в очередь и анализируются по одному.
Вы можете проверить прогресс и увидеть список загруженных образов вместе с их статусом анализа.
anchore-cli image list
Вывод
:~/anchore$ anchore-cli image list
Full Tag Image Digest Analysis Status
docker.io/openjdk:10-jdk sha256:923d074ef1f4f0dceef68d9bad8be19c918d9ca8180a26b037e00576f24c2cb4analyzed
docker.io/openjdk:11-jdk sha256:9923c0853475007397ed5c91438c12262476d99372d4cd4d7d44d05e9af5c077analyzed
docker.io/openjdk:8-jre-alpine sha256:b2ad93b079b1495488cc01375de799c402d45086015a120c105ea00e1be0fd52analyzed
Шаг 5: – Получить и просмотреть результаты анализа
После завершения анализа вы можете проверить результаты и просмотреть результаты сканирования уязвимостей, проверок политик и других проблем, выявленных Анкором.
Чтобы проверить результаты сканирования уязвимостей на openjdk: 8-jre-alpine:
anchore-cli image vuln openjdk:8-jre-alpine all
anchore-cli image vuln openjdk:8-jre-alpine all Vulnerability IDPackage Severity Fix CVE Refs Vulnerability URL CVE-2018-1000654 libtasn1-4.13-r0 High 4.14-r0 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-1000654 CVE-2019-12900 libbz2-1.0.6-r6 High 1.0.6-r7 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-12900 CVE-2019-14697 musl-1.1.20-r4 High 1.1.20-r5 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-14697 CVE-2019-14697 musl-utils-1.1.20-r4 High 1.1.20-r5 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-14697 CVE-2019-8457 sqlite-libs-3.26.0-r3 High 3.28.0-r0 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-8457 CVE-2018-14498 libjpeg-turbo-1.5.3-r4 Medium 1.5.3-r5 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-14498
В отчете указывается идентификатор CVE, уязвимый пакет, серьезность и исправление.
Для нашего образа openjdk: 8-jre-alpine анализ показывает, что у него пять сильных уязвимостей и довольно много средних и незначительных уязвимостей. (некоторые не показаны выше).
Чтобы просмотреть результаты уязвимостей для стабильного образа debian:latest
Запустите команду
anchore-cli image vuln docker.io/library/debian:latest all
Вывод
anchore-cli image vuln debian:latest all
Vulnerability IDPackage Severity Fix CVE RefsVulnerability URL
CVE-2005-2541 tar-1.30+dfsg-6 Negligible None https://security-tracker.debian.org/tracker/CVE-2005-2541
CVE-2019-1010022libc-bin-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010022
CVE-2019-1010022libc6-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010022
CVE-2019-1010023libc-bin-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010023
CVE-2019-1010023libc6-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010023
CVE-2019-1010024libc-bin-2.28-10 Negligible None https://security-tracker.debian.org/tracker/CVE-2019-1010024
Как видно из отчета, образ debian: latest имеет незначительные уязвимости и не имеет исправлений.
Чтобы увидеть результаты оценки политики для нестабильного образа openjdk: 8-jre-alpine:
anchore-cli evaluate check openjdk:8-jre-alpine
Вывод – результаты показывают ошибку
anchore-cli evaluate check openjdk:8-jre-alpine
Image Digest: sha256:b2ad93b079b1495488cc01375de799c402d45086015a120c105ea00e1be0fd52
Full Tag: docker.io/openjdk:8-jre-alpine
Status: fail
Last Eval: 2019-09-20T12:03:32Z
Policy ID: 2c53a13c-1765-11e8-82ef-23527761d060
Теперь, когда мы увидели, как Anchore Engine реагирует на обнаружение нарушения политики, пришло время проверить, как он работает с нашим стабильным образом debian: latest.
anchore-cli evaluate check docker.io/library/debian:latest --detail
user1@Imagescan:~/anchore$ anchore-cli evaluate check docker.io/library/debian:latest --detail
Image Digest: sha256:d3351d5bb795302c8207de4db9e0b6eb23bcbfd9cae5a90b89ca01f49d0f792d
Full Tag: docker.io/library/debian:latest
Image ID: c2c03a296d2329a4f3ab72a7bf38b78a8a80108204d326b0139d6af700e152d1
Status: pass
Last Eval: 2019-09-20T12:00:06Z
Policy ID: 2c53a13c-1765-11e8-82ef-23527761d060
Final Action: warn
Final Action Reason: policy_evaluation
Gate TriggerDetail Status
dockerfileinstructionDockerfile directive 'HEALTHCHECK' not found, matching condition 'not_exists' checkwarn
Настройка и использование модуля Anchore Container Image Scanner в Jenkins
Шаг 6: – Добавьте и настройте плагин Anchore Container Image Scanner в Jenkins
На этом этапе мы интегрируем Anchor Engine с сервером Jenkins.
Jenkins – это сервер с открытым исходным кодом на основе Java, предназначенный для автоматизации широкого спектра повторяющихся задач в цикле разработки программного обеспечения.
Плагин Anchore доступен в Jenkins, но не установлен по умолчанию.
Войдите в Jenkins, используя веб-браузер
http://your_server_IP:8228/v1
Введите пароль = foobar или новый пароль, если вы изменили его в шаге 3 (выше)
Шаг 8: – Добавление и сканирование образов
НажмитеNew item на панели инструментов Jenkins в верхнем левом меню.
Откроется экран с несколькими вариантами.
Введите желаемое имя для вашего тестового проекта в поле Enter the item name
Шаг 9: – Добавить скрипт Pipeline
Прокрутите вниз до раздела Pipeline и добавьте скрипт, чтобы указать необходимыый образ для сканирования.
Мы начнем с openjdk: 8-jre-alpine, который содержит некоторые уязвимости.
node {
def imageLine = 'openjdk:8-jre-alpine'`
writeFile file: 'anchore_images', text: imageLine`
anchore name: 'anchore_images'`
}
Шаг 10: – Запустите сборку и просмотрите отчеты о проверке.
Из меню Дженкинс
Нажмите Build Now
Шаг 11: – Просмотр результатов
Нажмите на Build # для просмотра более подробной информации
Откроется окно «Console Output », указывающее на сбой – Anchore Report (FAIL)
Заключение
Anchore Container Image Scanner – это мощный инструмент анализа образов, который выявляет широкий спектр уязвимостей и проблем политики в образах Docker.
Он имеет множество параметров настройки и может быть настроен на то, как реагировать на обнаружение проблем во время анализа.
Одним из них является нарушение сборки, когда engine сталкивается с серьезной уязвимостью.