CodeScoring Nexus OSA¶
Установка плагина¶
Плагин CodeScoring Nexus OSA поставляется в виде JAR-файла и поддерживает следующие версии Sonatype Nexus Repository (NXRM):
nexus-codescoring-plugin-{release}.jar
- для Nexus Repository OSS 3.71+ и Nexus Repository Pro версий с 3.33.1-01 по 3.71+ (поддерживает H2 и PostgreSQL);nexus-codescoring-plugin-legacy-{release}.jar
- для Nexus Repository OSS версий с 3.33.1-01 по 3.70.Х (поддерживает OrientDB).
Для добавления плагина в NXRM необходимо:
- Скопировать полученный от вендора файл
nexus-codescoring-plugin.jar
в директорию/opt/sonatype/nexus/deploy
: Если NXRM запущен в Docker-контейнере: - Выдать права для пользователя и группы
nexus
: Если NXRM запущен в Docker-контейнере: - Проверить, что у пользователя есть минимальный набор привилегий для корректной работы с плагином:
После выполненных операций, необходимо произвести перезапуск NXRM.
Настройка плагина¶
Для применения плагина CodeScoring OSA в дальнейшей работе, необходимо использовать механизм Capability, предоставляемый NXRM. Capability – это набор API и компонентов UI для встраивания в NXRM, позволяющий расширять его функциональность.
Плагин CodeScoring OSA предоставляет четыре новые Capability:
- CodeScoring Configuration — настройка взаимодействия с on-premise инсталляцией CodeScoring;
- CodeScoring Scan — настройка сканирования для отдельно выбранного прокси-репозитория;
- CodeScoring Docker Repository Scan – настройка сканирования для отдельно выбранного hosted или proxy docker репозитория;
- CodeScoring All Repositories Scan – настройка сканирования для всех репозиториев.
После установки плагина CodeScoring OSA в разделе System -> Capabilities
появится возможность создания Capability через элемент (+ Create capability
) интерфейса.
CodeScoring Configuration¶
Расширение позволяет задать общие настройки плагина для работы с on-premise версией CodeScoring:
- CodeScoring Token – ключ для авторизации вызовов API (Создается из CodeScoring раздела
Profile -> Home
); - CodeScoring URL – адрес on-premise инсталляции CodeScoring;
- HttpClient Connection Pool Size – количество доступных соединений. Параметр позволяет управлять количеством параллельных запросов, чтобы ускорить сканирование;
- HTTP Proxy Host – адрес прокси-сервера. Используется в случае, если нет возможности наладить прямое соединение между NXRM и CodeScoring;
- HTTP Proxy Port – порт прокси-сервера;
- Store artifact analysis in the DB to retrieve them via REST – сохранение результатов сканирования артефакта в базе NXRM с возможностью извлечения из Nexus API;
- Block downloads in case of plugin or CodeScoring errors – блокировка загрузки компонента при наличии ошибок от плагина или CodeScoring API.
- Custom message for blocked packages – сообщение для пользователя при блокировке компонентов;
- Nexus URL for identification in CodeScoring – адрес Nexus Repository Manager с протоколом для отображения результатов на инсталляции.
Внимание: указанные настройки будут использовать все экземпляры осуществляющие проверку прокси репозиториев.
CodeScoring Proxy Repository Scan¶
Расширение позволяет включить проверку компонентов на выбранный прокси репозиторий со следующими параметрами:
- Repository – выбор репозитория, для которого будет применена функция экранирования;
- Security violation response status – код ошибки, возвращаемый при срабатывании политик безопасности;
- Delete blocked by policy component from repository – принудительное удаление блокируемых компонентов из репозитория (создание "стерильного" репозитория);
- Select capability work mode – режим работы плагина.
CodeScoring Docker Repository Scan¶
Расширение позволяет включить проверку компонентов на выбранный hosted или proxy docker репозиторий со следующими параметрами:
- Repository – выбор репозитория, для которого будет применена функция экранирования;
- Security violation response status – код ошибки, возвращаемый при срабатывании политик безопасности;
- This user skips container image scan – имя пользователя, для которого не применяется сканирование образов. Используется при загрузке и проверке компонентов консольным агентом;
- Host and port used for CodeScoring to download container image to scan – адрес (без указания протокола) и порт, через которые будут загружаться образы для сканирования. Используется для связи Nexus с репозиторием через Docker;
- Block not scanned images – блокировка загрузки образов, которые не были просканированы;
- Select capability work mode – режим работы плагина. Режимы работы описаны в секции ниже;
- Append repository name to image name for Docker repositories – добавление названия репозитория в PURL для корректной работы в режиме RepoPath (в случае обращения за компонентом через команду
docker pull registry/repository/image_name
).
CodeScoring All Repositories Scan¶
Расширение позволяет включить проверку компонентов на все репозитории в рамках Sonatype Nexus Repository Manager со следующими параметрами:
- List of comma separated repositories to ignore – список репозиториев, которые не будут сканироваться;
- Security violation response status – код ошибки, возвращаемый при срабатывании политик безопасности;
- This user skips container image scan – имя пользователя, для которого не применяется сканирование образов. Используется при загрузке и проверке компонентов консольным агентом;
- Host and port used for CodeScoring to download container image to scan – адрес (без указания протокола) и порт, через которые будут загружаться образы для сканирования. Используется для связи Nexus с репозиторием через Docker;
- Select capability work mode – режим работы плагина. Режимы работы описаны в секции ниже;
- Append repository name to image name for Docker repositories – добавление названия репозитория в PURL для корректной работы в режиме RepoPath (в случае обращения за компонентом через команду
docker pull registry/repository/image_name
).
Настройка режима работы плагина¶
Режим работы плагина необходимо определить текстовой строкой в соответствующем поле настроек Capability CodeScoring Proxy Repository Scan и Capability CodeScoring Docker Repository Scan.
Плагин имеет 5 режимов работы, определяющих строгость проверки компонентов перед загрузкой.
- warmup – загрузка данных в кэш CodeScoring без блокировки компонентов;
- spectator – загрузка данных в кэш CodeScoring без блокировки компонентов, сохранение результатов запросов компонентов на инсталляции;
- moderate – блокировка компонентов, не прошедших проверку политик. Разрешена загрузка непросканированных компонентов;
- strict – блокировка компонентов, не прошедших проверку политик. Запрещена загрузка непросканированных компонентов;
- strict_wait – блокировка компонентов, не прошедших проверку политик. Ожидание проверки для непросканированных компонентов.
Настройка логирования¶
Для настройки логирования событий плагина необходимо зайти в раздел Support -> Logging
и добавить логгер с названием ru.codescoring и уровнем логирования DEBUG.
Результаты логирования событий доступны в разделе Support -> Logs
.
Сохранение и извлечение результатов сканирования артефакта¶
При активации признака Store artifact analysis in the DB to retrieve them via REST в конфигурации плагина результаты сканирования артефактов будут сохраняться в базу данных Nexus. Это позволяет получить информацию о том, какие компоненты запрашивались пользователями и какой был статус загрузки данных компонентов.
Извлечь результаты сканирования через Nexus REST API можно с помощью эндпоинта v1/analysis
с тремя опциональными параметрами:
- userName – имя пользователя в Nexus;
- date – дата сканирования в формате ГГГГ-ММ-ДД;
- repositoryName – название репозитория в Nexus.
Пример запроса с помощью curl
:
curl -X GET https://test.nexus.com/service/rest/v1/analysis?userName=example_user&date=2023-10-19&repositoryName=example_repository
Пример ответа с результатом сканирования:
[
{
"userName": "bobbi",
"artifactName": "specs",
"artifactVersion": "4.8",
"repositoryName": "gems",
"downloadState": "LOADED",
"scanDate": "2023-08-12",
"scanTime": "10:17:59"
},
{
"userName": "bobbi",
"artifactName": "kmod",
"artifactVersion": "27-1ubuntu2",
"repositoryName": "ubuntu",
"downloadState": "LOADED",
"scanDate": "2023-08-12",
"scanTime": "11:52:53"
},
]
Блокировка компонента¶
При блокировании загрузки компонента в консоли пользователя отображается одна из следующих причин блокировки:
- "The download has been blocked in accordance with the policies configured in CodeScoring" – блокировка компонента согласно настроенным на инсталляции политикам;
- "The component has not yet been scanned by CodeScoring, it is scheduled to be scanned shortly. The download is blocked according to the plugin settings" – блокировка непросканированного компонента с последующим запуском сканирования. Используется в режиме
strict
; - "The download has been blocked due to the failure of the scan of the component in CodeScoring" – не удалось просканировать компонент;
- "The download has been blocked due to the wrong mode of the plugin" – используется некорректный режим работы плагина;
- "The download has been blocked due to the timeout of the scan of the component in CodeScoring" – истекло время ожидания сканирования компонента. Используется в режиме
strict_wait
; - "The download has been blocked, because registry is not configured in CodeScoring" – отсутствует соответствующий Registry на инсталляции.
Ответ также содержит ссылку на страницу компонента в CodeScoring с информацией о сработавших политиках безопасности и найденных уязвимостях:
Настройка SSL-соединения¶
Для настройки SSL-соединения между плагином и инсталляцией необходимо выполнить импорт сертификатов в Java Truststore.
Определение местоположения установки Java¶
Чтобы импортировать сертификаты в Java Truststore, сначала необходимо найти установку Java. Это можно сделать одним из следующих способов:
-
Использование переменной окружения
JAVA_HOME
: -
Использование команды
java
с параметром-XshowSettings:properties
: -
Использование команды
readlink
с путем кjava
:
Дальнейшие действия подразумевают, что переменная $JAVA_HOME
установлена.
Загрузка сертификата¶
Скачать сертификат можно следующей командой:
openssl s_client -connect <codescoring.domain.ru>:443 2>/dev/null | openssl x509 > codescoring_ca.pem
Убедитесь, что вы заменили <codescoring.domain.ru>
на соответствующий адрес вашей инсталляции.
Импорт сертификата¶
После загрузки сертификата его можно импортировать в Java Truststore с помощью следующей команды:
keytool -import -alias <mycert> -keystore $JAVA_HOME/lib/security/cacerts -file <codescoring_ca.pem>
Примечания:
- Замените <mycert>
на уникальное имя для вашего сертификата.
- Замените <codescoring_ca.pem>
на фактическое имя вашего файла сертификата.
- Вас могут попросить ввести пароль для Truststore. Стандартный пароль: changeit
.
Проверка импорта¶
Чтобы убедиться, что сертификат был успешно импортирован, используйте команду keytool
для отображения списка сертификатов в Truststore:
Примечание:
- Для фильтрации результатов по вашему алиасу сертификата можно использовать команду grep
: