Oбновление AppSec.Hub с версии 1.10 до 2.0
AppSec.Hub (UI/Core)
-
Укажите новые версии образов в файле .env.
hub_core_version=2.0 hub_ui_version=2.0 hub_air_version=2.0 -
Загрузите новые версии контейнеров. Для этого в папке, указанной при установке (по умолчанию, /opt/apphub), выполните следующую команду.
docker-compose pull -
После загрузки образов запустите систему.
docker-compose up -d
AppSec.Hub Engine (Jenkins)
Для обновления AppSec.Hub Engine (Jenkins) до версии 2.0 необходимо выполнить ряд следующих действий:
-
Укажите новые версии образов в файле .env.
jenkins_master=2.0.1 jenkins_node=2.0.1 -
Полный пример настройки Jenkins с помощью docker-compose.yml можно взять в «Примечание 1».
-
Для активации автоматического импорта самоподписанных сертификатов в контейнеры необходимо выполнить следующие действия.
-
Создать папку certs. Для этого в папке, указанной при установке (по умолчанию, /opt/apphub), выполните следующую команду.
mkdir -p certs -
Сохранить в certs все корневые и доменные сертификаты с расширением .crt и назначить необходимые разрешения.
sudo chmod 755 -R certs -
Импортировать папку certs в контейнеры node-all и jenkins (через docker-compose.yml).
volumes: - ./certs:/tmp/certs
-
-
Для активации автоматического импорта самоподисанных сертификатов docker registry необходимо выполнить следующие действия.
-
Создать папку docker-certs. Для этого в папке, указанной при установке (по умолчанию, /opt/apphub), выполните следующую команду.
mkdir -p docker-certs -
Сохранить все корневые и доменные сертификаты в ней и импортировать в контейнер docker-in-docker (через docker-compose.yml).
volumes: - ./docker-certs:/etc/docker/certs.d
-
-
Контейнеры jenkins и node-all теперь запускаются от непривилегированного пользователя. Для корректной работы необходимо выполнить команду:
chown 1000:1000 -R jenkins_home chown 1000:1000 -R fortify -
Для Jenkins master ноды необходимо удалить директорию plugins с данными неиспользуемых плагинов.
rm -rf jenkins_home/plugins -
Для контейнера node-all необходимо задать необходимые права, пользователя и группу.
sudo chown 2000:2000 -R jenkins-slave-all sudo chmod 600 ssh-pub-keys-all/authorized_keys sudo chown 2000:2000 -R ssh-pub-keys-all -
Для корректного работы Jenkins в контейнер jenkins необходимо добавить следующие переменные окружения (полное описание переменных окружения находится в «Примечание 2»):
environment: - JENKINS_URL=http://jenkins.company.com - JENKINS_ADMIN_USER=admin - JENKINS_ADMIN_PASSWORD=<some-password> -
Для улучшения работы утилиты cdxgen в контейнер Jenkins можно добавить следующие переменные окружения (полное описание переменных окружения находится в «Примечание 2»).
environment: - gradle_dependency_task=dependencies - fetch_license=true - maven_home=/opt/maven - gradle_home=/opt/gradle - github_token= - gradle_args= - mvn_args= - cdxgen_npm_url=https://registry.npmjs.org/ - cdxgen_maven_central_url=https://repo1.maven.org/maven2/ - cdxgen_android_maven=https://maven.google.com/ - cdxgen_pypi_url=https://pypi.org/pypi/ - cdxgen_go_url=https://pkg.go.dev/ - cdxgen_nuget_url=https://api.nuget.org/v3/registration3/ -
Для корректной работы docker внутри контейнеров jenkins и node-all (без импорта docker сокета) был добавлен контейнер docker-in-docker:
docker-in-docker: image: docker:19.03.3-dind container_name: docker-in-docker privileged: true volumes: - ./docker-certs:/etc/docker/certs.d - /sys/fs/cgroup:/sys/fs/cgroup:ro environment: - DOCKER_TLS_CERTDIR= networks: - network pids_limit: 100 restart: on-failure:5 cpu_shares: 512 deploy: resources: limits: memory: 512M -
Для корректной работы контейнера docker-in-docker необходимо выполнить следующие команды.
sudo mkdir /sys/fs/cgroup/systemd sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd -
Необходимо связать контейнеры jenkins, node-all и docker-in-docker.
environment: - DOCKER_HOST=tcp://docker-in-docker:2375 -
Для повышения безопасности контейнеров в файл docker-compose.yml в описание сервисов были добавлены следующие атрибуты:
-
Для Jenkins:
user: 1000:1000 pids_limit: 100 security_opt: - no-new-privileges restart: on-failure:5 cpu_shares: 1024 deploy: resources: limits: memory: 2048M -
Для node-all:
user: 2000:2000 restart: on-failure:5 cpu_shares: 2048 deploy: resources: limits: memory: 3072M -
Для docker-in-docker:
pids_limit: 100 security_opt: - no-new-privileges restart: on-failure:5 cpu_shares: 512 deploy: resources: limits: memory: 512M
-
Примечание 1
Пример docker-compose.yml:
version: '3.2'
services:
jenkins:
image: docker.swordfishsecurity.com/sfs-jenkins:${jenkins_master}
container_name: jenkins
user: 1000:1000
ports:
- 8080:8080
environment:
- JENKINS_URL=http://jenkins.company.com
- JENKINS_ADMIN_USER=admin
- JENKINS_ADMIN_PASSWORD=<some-password>
- DOCKER_HOST=tcp://docker-in-docker:2375
- gradle_dependency_task=dependencies
- fetch_license=true
- maven_home=/opt/maven
- gradle_home=/opt/gradle
- github_token=
- gradle_args=
- mvn_args=
- cdxgen_npm_url=https://registry.npmjs.org/
- cdxgen_maven_central_url=https://repo1.maven.org/maven2/
- cdxgen_android_maven=https://maven.google.com/
- cdxgen_pypi_url=https://pypi.org/pypi/
- cdxgen_go_url=https://pkg.go.dev/
- cdxgen_nuget_url=https://api.nuget.org/v3/registration3/
networks:
- network
volumes:
- ./jenkins_home:/var/jenkins_home:z
- ./fortify/projects:/fortify/projects
- /etc/localtime:/etc/localtime
- /etc/timezone:/etc/timezone
- ./certs:/tmp/certs
cap_add:
- SYS_ADMIN
pids_limit: 100
security_opt:
- no-new-privileges
restart: on-failure:5
cpu_shares: 1024
deploy:
resources:
limits:
memory: 2048M
node-all:
image: docker.swordfishsecurity.com/sfs-jenkins-slave-all:${jenkins_node}
container_name: node-all
networks:
- network
user: 2000:2000
environment:
- LANG=en_US.utf-8
- DOCKER_HOST=tcp://docker-in-docker:2375
volumes:
- ./ssh-pub-keys-all:/home/ubuntu/.ssh
- ./jenkins-slave-all:/home/ubuntu/jenkins-slave
- /etc/localtime:/etc/localtime
- /etc/timezone:/etc/timezone
- ./certs:/tmp/certs
restart: on-failure:5
cpu_shares: 2048
deploy:
resources:
limits:
memory: 3072M
docker-in-docker:
image: docker:19.03.3-dind
container_name: docker-in-docker
privileged: true
volumes:
- ./docker-certs:/etc/docker/certs.d
- /sys/fs/cgroup:/sys/fs/cgroup:ro
environment:
- DOCKER_TLS_CERTDIR=
networks:
- network
pids_limit: 100
restart: on-failure:5
cpu_shares: 512
deploy:
resources:
limits:
memory: 512M
networks:
network:
driver: "bridge"
driver_opts:
com.docker.network.driver.mtu: 1450
Примечание 2
Список переменных окружения контейнера Jenkins:
| Переменная | Описание |
|---|---|
JENKINS_URL |
Url для jenkins master ноды |
JENKINS_ADMIN_USER |
Имя административного пользователя в Jenkins |
JENKINS_ADMIN_PASSWORD |
Пароль для административного пользователя в Jenkins |
DOCKER_HOST |
Url для демона Docker |
gradle_dependency_task |
Имя задачи по умолчанию для скачивания пакетов для утилиты cdxgen |
fetch_license |
Скачивание информации о лицензии из репозиториев для cdxgen (только для npm и golang) (необязательный параметр, в случае ненадобности - удалить) |
maven_home |
Домашняя папка для maven |
gradle_home |
Домашняя папка для gradle |
github_token |
Токен для Github (необязательный параметр, в случае ненадобности - удалить) |
gradle_args |
Аргументы запуска для утилиты gradle (необязательный параметр, в случае ненадобности - удалить) |
mvn_args |
Аргументы запуска для утилиты mvn (необязательный параметр, в случае ненадобности - удалить) |
cdxgen_npm_url |
Url для репозитория npm для утилиты cdxgen |
cdxgen_maven_central_url |
Url для репозитория maven для утилиты cdxgen |
cdxgen_android_maven |
Url для репозитория android для утилиты cdxgen |
cdxgen_pypi_url |
Url для репозитория pypi для утилиты cdxgen |
cdxgen_go_url |
Url для репозитория go для утилиты cdxgen |
cdxgen_nuget_url |
Url для репозитория nuget для утилиты cdxgen |