Thank you for reading this post, don't forget to subscribe!
- Использование параметра командной строки AnchoreCLI
- Плагин Jenkins Anchore Container Image Scanner для графического интерфейса
- Установка и настройка Anchore Engine
- Установка, настройка и использование Anchore CLI
- Настройка и использование плагина Anchore Container Image Scanner в Jenkins
Предпосылки
Ниже приведены требования для этого урока;
- Локальная или виртуальная машина с Ubuntu 18.04 и следующими;
- Docker
- Docker–Compose
- Jenkins
- Пользователь sudo
Шаг 1: – Настройте рабочие каталоги и загрузите файлы конфигурации.
Создайте рабочий каталог для ваших файлов Anchore.
В этом каталоге вы создадите два подкаталога, один для конфигурации и один для базы данных.
Создайте домашний каталог для файлов Anchore
1 |
mkdir anchore |
1 2 3 4 5 |
cd anchore mkdir config mkdir db |
Скачайте файлы конфигурации
Как только каталоги будут готовы, мы загрузим два файла конфигурации (docker-compose.yaml и config.yaml) из проекта Github.
Чтобы скачать docker-compose.yaml
Перейдите в домашний каталог anchore и используйте команду
1 |
curl https://raw.githubusercontent.com/anchore/anchore-engine/master/scripts/docker-compose/docker-compose.yaml > docker-compose.yaml |
1 |
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 запустите.
1 |
docker-compose up -d |
Это автоматически вытянет образ Anchore, а затем создаст Anchore engine и базу данных в домашнем каталоге и каталогах ~/anchore/database/ соответственно.
По завершении команда запустит Anchore.
После успешной установки и запуска anchore engine вы можете сканировать образ с помощью командной строки AnchoreCLI.
Однако сначала вам нужно установить утилиту командной строки AnchoreCLI, как показано ниже.
Установка, настройка AnchoreCLI
На этом этапе вы узнаете, как установить и настроить инструмент командной строки AnchoreCLI.
Шаг 3: – Установите AnchoreCLI
В этом руководстве мы сначала установим утилиту python-pip, которая затем будет использоваться для установки AnchoreCLI из исходного кода.
Чтобы установить Python pip. Перейдите в домашний каталог Anchore и запустите
1 2 3 |
sudo apt-get update sudo apt-get install python-pip sudo pip install --upgrade setuptools |
Установите AnchoreCLI, используя python-pip
1 |
pip install anchorecli |
1 |
source ~/.profile |
1 |
anchore-cli --version |
1 |
anchore-cli --url http://localhost:8228/v1 --u admin --p foobar system status |
Обратите внимание, что вы должны передать URL-адрес Anchore, имя пользователя и пароль.
Определите параметры Anchore Engine
Вместо того, чтобы предоставлять их каждый раз, альтернативой является определение их как переменных среды в следующем формате.
Чтобы передать URL, запустите
1 |
ANCHORE_CLI_URL=http://localhost:8228/v1 |
Это определяет URL-адрес вместе с портом 8228, который он использует.
Установите имя пользователя и пароль, используя значения по умолчанию; в противном случае замените их новыми значениями, установленными на шаге 1.
1 2 3 |
ANCHORE_CLI_USER=admin ANCHORE_CLI_PASS=foobar |
Вышеуказанные параметры устанавливаются только для текущей оболочки.
Чтобы установить текущую оболочку и другие процессы, которые запускаются из нее, мы используем команду export
1 2 3 4 5 |
export ANCHORE_CLI_URL export ANCHORE_CLI_USER export ANCHORE_CLI_PASS |
Шаг 4: – Добавление и анализ образов
Теперь, когда у нас запущен Anchore Engine и настроен интерфейс командной строки, вы узнаете, как добавлять и анализировать образа на предмет проблем безопасности.
В этом уроке мы проанализируем два изображения. -openjdk:8-jre-alpin
и debian:latest without
Анализ образов
Для продолжения нам нужно сначала добавить образ:
1 |
anchore-cli image add openjdk:8-jre-alpine |
1 |
anchore-cli image add docker.io/library/debian:latest |
1 2 3 |
anchore-cli image add openjdk:10-jdk anchore-cli image add openjdk:11-jdk |
После добавления образов в Anchore Engine анализ начинается сразу.
Если загружено несколько образов, они помещаются в очередь и анализируются по одному.
Вы можете проверить прогресс и увидеть список загруженных образов вместе с их статусом анализа.
1 |
anchore-cli image list |
Вывод
1 2 3 4 5 |
:~/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:
1 2 3 4 5 6 7 8 9 10 |
anchore-cli image vuln openjdk:8-jre-alpine all </code><code> 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
Запустите команду
1 |
anchore-cli image vuln docker.io/library/debian:latest all |
Вывод
1 2 3 4 5 6 7 8 |
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:
1 |
anchore-cli evaluate check openjdk:8-jre-alpine |
Вывод – результаты показывают ошибку
1 2 3 4 5 6 |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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, который содержит некоторые уязвимости.
1 2 3 4 5 |
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)

