Перейти к содержанию

Oбновление 2.1.X до 2023.1

AppSec.Hub (UI/Core)

  1. Остановите AppSec.Hub.

    sudo docker-compose down
    
  2. Сгенерируйте ключ подписи jwt-токена, который в дальнейшем будет указываться в сервисе gateway (команду выполнить на локальной машине).

    dd if=/dev/urandom bs=1 count=64 2>/dev/null | base64 -w 0 | rev | cut -b 3- | rev
    
  3. Добавьте в конфигурационный файл docker-compose.yaml следующие сервисы.

    consul:
        image: docker.swordfishsecurity.com/public/sfs-consul:1.14.4
        container_name: consul
        volumes:
            - ./consul-data:/consul/data
            - ./config/consul/server.json:/consul/config/server.json
        networks:
            - net-hub
        healthcheck:
            test: curl -f http://localhost:8500
        ports:
            - "8500:8500"
            - "8600:8600/tcp"
            - "8600:8600/udp"
        command: "agent -server -bootstrap -ui -client=0.0.0.0 -bind=127.0.0.1 -config-file=/consul/config/server.json"
        restart: on-failure:5
        pids_limit: 300
        security_opt:
            - no-new-privileges
        cpu_shares: 1024
        deploy:
            resources:
                limits:
                    memory: 300M
    
    gateway:
        image: docker.swordfishsecurity.com/appsechub/gateway:${gateway_version}
        container_name: gateway
        environment:
            - TZ=Europe/Moscow
            - JWT_TOKEN=${gateway_jwt_token}
            - CONSUL_HOST=http://consul
            - CONSUL_PORT=8500
            - CONSUL_TOKEN=${consul_token}
        links:
            - consul
            - hub-core
        depends_on:
            hub-core:
                condition: service_healthy
        networks:
            - net-hub
        pids_limit: 400
        security_opt:
            - no-new-privileges
        cpu_shares: 2048
        restart: on-failure:5
        deploy:
            resources:
                limits:
                    memory: 1536M
    
    issue-rule:
        image: docker.swordfishsecurity.com/appsechub/issue-rule:${issue_rule_version}
        container_name: issue-rule
        environment:
            - TZ=Europe/Moscow
            - CONSUL_HOST=http://consul
            - CONSUL_PORT=8500
            - CONSUL_TOKEN=${consul_token}
            - DB_URL=jdbc:postgresql://${pgsql_url}/${hub_db_name}
            - DB_USERNAME=hubapp
            - DB_PASSWORD=${hub_app_password}
        networks:
            - net-hub
        links:
            - flyway-db
        depends_on:
            flyway-db:
                condition: service_completed_successfully
        restart: on-failure:5
        read_only: true
        pids_limit: 400
        security_opt:
            - no-new-privileges
        cpu_shares: 768
        deploy:
            resources:
                limits:
                    memory: 600M
    

    Пример docker-compose.yml приведен в «Приложение 9. Пример docker-compose.yml для контейнера appsec.hub».

  4. Укажите очерёдность запуска контейнеров. Добавьте в сервисы выделенные блоки.

    hub-core

    Пример

    hub-core:
        image: docker.swordfishsecurity.com/appsechub/hub-core:${hub_core_version}
        container_name: hub-core
        links:
            - consul
        depends_on:
            consul:
                condition: service_healthy
        networks:
            - net-hub
        environment:
            - UMASK=0022
            - HUB_LOG_LEVEL=debug
            - TZ=Europe/Moscow
        tmpfs:
            - /usr/local/tomcat/temp/:uid=2000,gid=2000
            - /usr/local/tomcat/work/:uid=2000,gid=2000
        volumes:
            - ./logs/hub-core:/usr/local/tomcat/logs
            - ./config/hub-core/app.properties:/usr/local/tomcat/webapps/hub/WEB-INF/classes/app.properties
            - ./config/hub-core/auth.properties:/usr/local/tomcat/webapps/hub/WEB-INF/classes/auth.properties
            #- ./certs/rootCA.crt:/etc/ssl/certs/self-signed/rootCA.crt
            #- ./certs/cacerts:/usr/lib/jvm/java-11-amazon-corretto/lib/security/cacerts
        pids_limit: 400
        security_opt:
            - no-new-privileges
        restart: on-failure:5
        read_only: true
        cpu_shares: 1024
        deploy:
            resources:
                limits:
                    memory: 3000M
    

    hub-ui

    Пример

    hub-ui:
        image: docker.swordfishsecurity.com/appsechub/hub-ui:${hub_ui_version}
        container_name: hub-ui
        links:
            - hub-core
            - gateway
        depends_on:
            hub-core:
                condition: service_healthy
            gateway:
                condition: service_healthy
        networks:
            - net-hub
        ports:
            - ${IP_EXTERNAL}:80:8080/tcp
            - ${IP_EXTERNAL}:443:4443/tcp
        environment:
            - TZ=Europe/Moscow
        volumes:
            - ./config/hub-ui/:/etc/nginx/conf.d/:ro
            - ./logs/hub-ui/:/var/log/nginx
            - ./ssl:/etc/ssl/certs/ssl-cert:ro
        pids_limit: 100
        security_opt:
            - no-new-privileges
        restart: on-failure:5
        read_only: true
        tmpfs:
            - /tmp
            - /var/cache/nginx/
        cpu_shares: 512
        deploy:
            resources:
                limits:
                    memory: 100M
    
  5. Добавьте следующие строки в файл /opt/apphub/config/hub-core/app.properties.

    hub.service.url=http://hub-core
    hub.consul.host=http://consul:8500
    hub.consul.token=<пока остаётся пустым>
    hub.grpc.port=50051
    
  6. В конфигурационном файле config/hub-ui/hub.conf замените значение параметра proxy_pass с http://hub-core:8080/hub/ на http://gateway:8080/hub/. Пример конфигурационного файла приведен в разделе «Приложение 13. Конфигурационный файл hub.conf».

    location /hub/ {
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        add_header X-Frame-Options SAMEORIGIN;
        proxy_pass http://gateway:8080/hub/;
    }
    
  7. Добавьте необходимые секреты в файл .env.

    gateway_version=2023.1
    issue_rule_version=2023.1
    
    gateway_jwt_token=<сгенерированный ключ подписи jwt-токена для сервиса gateway>
    consul_token=<пока остаётся пустым>
    

    Пример файла .env см. в «Приложении 1. Конфигурационный файл .env».

  8. Создайте необходимые директории (команды выполнять из директории, где установлен AppSec.Hub).

    mkdir -p consul-data
    mkdir -p config/consul
    

    После создания директорий необходимо создать конфигурационный файл для сервиса consul — config/consul/server.json со следующим содержимым.

    {
        "node_name": "consul",
        "datacenter": "appsechub",
        "server": true,
        "ui_config": {
            "enabled": true
        },
        "data_dir": "/consul/data",
        "addresses": {
            "http": "0.0.0.0"
        },
        "acl": {
            "enabled": true,
            "default_policy": "deny",
            "enable_token_persistence": true
        }
    }
    
  9. Запустите сервис consul и создайте токен доступа (команды выполнять из директории, где установлен AppSec.Hub).

    sudo docker-compose up -d consul
    sleep 20
    sudo docker exec -it consul sh -c "consul acl bootstrap | grep -i secretid"
    sudo docker-compose down
    
  10. Скопируйте значение поля SecretID и добавьте в переменные consul_token файла .env и hub.consul.token файла app.properties.

    Пример

    SecretID:         99f65ab5-ad40-0f8c-cbc8-aca384590eb6
    
  11. Запустите AppSec.Hub.

    sudo docker-compose up -d
    

AppSec.Hub Engine (Jenkins)

  1. Остановите Jenkins.

    cd /opt/jenkins
    sudo docker-compose down
    
  2. Укажите новые версии образов в файле .env.

    jenkins_master=2023.1.2
    jenkins_node=2023.1.2
    
  3. Загрузите новые версии контейнеров.

    docker-compose pull
    
  4. После загрузки образов запустите систему.

    docker-compose up -d
    
К началу