Установка AppSec.Hub с использованием Kubernetes
Для получения Helm-чарт AppSec.Hub необходимо добавить OCI-совместимый Helm приватный реестр (registry.appsec.global) с теми же учетными данными, что и для доступа к образам контейнеров.
-
Войдите в реестр (с ручным вводом пароля).
helm registry login -u myuser registry.appsec.global Password: Login succeeded -
Скачайте последнюю/конкретную версию AppSec.Hub Helm-чарт.
helm pull oci://registry.appsec.global/appsechub/hub-helm/appsechub --version 0.2.12 -
Сконфигурируйте параметры в файле values.yaml.
Пример конфигурационного файла приведен в приложении «Приложение 23. Конфигурационный файл values.yaml». Для запуска AppSec.Hub без глубокой настройки необходимо указать логин и пароль для реестра образов и
MODEL_SECRET_KEYв секцииhubair(их необходимо получить у вендора). Для более гибкой настройки смотрите файл values.yaml, который поставляется вместе с Helm-чартом.Внимание!
При обновлении продукта через Helm, пожалуйста, обратите внимание, что структура файла values.yaml существенно изменилась.
Убедитесь, что все настройки из текущего values.yaml перенесены в новый файл корректно.
3.1. Скачайте новый файл values.yaml, соответствующий обновленной версии продукта.
3.2. Настройте параметры файла values.yaml в соответствии с требованиями вашей среды.
Сконфигурируйте следующие разделы и модули:
3.3. images.registry:
Для доступа к приватному реестру образов вам понадобится секрет (
ImagePullSecret), который хранит учетные данные для аутентификации.create- определяет создание секрета:true: секрет будет создан.false: необходимо вручную указать существующий секрет в параметреname. Укажите имя существующего секрета Kubernetes, если вы хотите использовать его для аутентификации.
usernameиpassword- если вы хотите создать секрет, укажите значения дляusernameиpassword.
Пример модуля
3.4. hub-air:
- Укажите настройки шифрования моделей AVC через секцию
env, дляMODEL_USE_ENCRYPTIONустановите значение1,MODEL_SECRET_KEY- ключ шифрования моделей AVC - необходимо получить у сотрудников компании - поставщика AppSec.Hub. - При необходимости настройте запросы и лимиты ресурсов.
Пример модуля
hubair: # -- Имя контейнера hub-air fullname: hub-air image: # -- Путь к репозиторию образа hub-air name: appsechub/hub-air # -- Политика загрузки образа pullPolicy: Always # -- Реестр образов контейнеров repository: registry.appsec.global # -- Тег версии образа tag: 2025.4.2 env: # -- Указание TimeZone Europe/Moscow timezone: Europe/Moscow # -- Уровень логгирования: INFO, DEBUG LOG_LEVEL: INFO # -- Включить, выключить лог файл LOG_FILE: "1" # -- Путь лог файла LOG_BASE_PATH: /opt/py-model/logs/avc_prediction.log # -- Использование шифрования моделей AVC, чтобы включить - поменять на 1 и вставить ключ (в открытом виде) MODEL_USE_ENCRYPTION: "0" # -- Ключ шифрования моделей AVC MODEL_SECRET_KEY: 'ITu00m1f7-zlNccT-yjklcviw1yOT67TPeIi30nm1b4=' # -- Дополнительные лейблы для pods hub-air podLabels: {} # -- Количество реплик компонента replicas: 1 service: # -- При использовании service.type=LoadBalancer externalTrafficPolicy: local # -- Порт для Service port: 8000 # -- Порт контейнера, на который ссылается Service targetPort: 8000 # -- Тип Service, LoadBalancer или ClusterIP type: ClusterIP # -- Аннотации к объекту Service annotations: {} # -- Указать nodeSelector если требуется # nodeSelector: # label: value # -- Стратегия развертывания новых pod's strategy: type: Recreate # -- Аннотации для пода hub-air # Appsec.Hub не работатет с автоскейлингом # annotations: # cluster-autoscaler.kubernetes.io/safe-to-evict: "false" # -- Установка лимитов для контейнера # resources: # requests: # memory: "128Mi" # cpu: "200m" # limits: # memory: "4096Mi" # cpu: "4000m" # -- Монтирование дополнительных томов в контейнер extraVolumemounts: {} # - name: varlog # mountPath: /opt/py-model/logs # -- Указание дополнительных томов контейнера extraVolumes: {} # - name: varlog # emptyDir: {} # - name: config-volume # secret: # secretName: fluentd-config-avc # -- Дополнительный контейнер containers: {} # - name: fluentd # image: registry.appsec.global/public/fluentd-v1.12.1:latest # #env: # #- name: FLUENTD_ARGS # # value: -c /fluentd/etc/fluent.conf # env: # - name: TZ # value: Europe/Moscow # extraVolumeMounts: # - name: varlog # mountPath: /var/log # - name: config-volume # mountPath: /fluentd/etc/fluent.conf # subPath: fluent.conf # -- initcontainer для создания БД и миграции, указать/поменять данные # @default -- Смотреть _values.yaml_3.5. hubdbmigration:
- Задайте необходимые пароли:
PGPASSWORD— пароль пользователя с административным доступом к основной схеме БД.hubadmPassword— пароль пользователя с правами администратора на БД AppSec.Hub.hubappPassword— пароль пользователя БД для работы AppSec.Hub.hubauthPassword— пароль пользователя для сервиса аутентификации AppSec.Hub.hubbiPassword— пароль пользователя с правами работы с AppSec.Hub DWH.
Пример модуля
hubdbmigration: # -- Имя контейнера hubdbmigration fullname: hubdbmigration # -- Порт контейнера БД PG_PORT: "5432" # -- Адрес БД PG_URL: postgresql # -- Пользователь БД PGUSER: postgres # -- Имя БД hubdbName: hubdb # -- Пароль БД PGPASSWORD: tt56dFsyVx # -- Пароль пользователя AppSec.Hub с правами администратора hubadmPassword: p3VEthvxKr435 # -- Пароль пользователя hubappPassword: o7R667rx21 # -- Пароль пользователя для сервиса аутентификации hubauthPassword: oxgfFsxcr # -- Пароль пользователя с правами работы с AppSec.Hub DWH hubbiPassword: o7R667rx21 image: # -- Путь к репозиторию образа name: appsechub/hub-db # -- Политика загрузки образа pullPolicy: Always # -- Реестр образов контейнеров repository: registry.appsec.global # -- Тег версии образа tag: 2025.4.2 # -- Количество реплик компонента replicas: 1 # -- Режим восстановления hub-db repair_db_enable: disable # -- Режим восстановления hub-dw repair_dw_enable: disable resources: requests: memory: "128Mi" cpu: "50m" limits: memory: "128Mi" cpu: "100m"3.6. hub-core:
- Укажите необходимые параметры
app_properties:db_hub_password- пароль пользователя с доступом к основной схеме БД, должен соответствовать паролюhubappсекцииhubdbmigration.encrypt_key- ключ шифрования паролей, используемых для доступа к инструментам ИБ. Размер ключа — 24 символа (для генерации ключа можно использовать следующую команду:dd if=/dev/urandom bs=1 count=32 2>/dev/null | base64 -w 0 | rev | cut -b 2-25 | rev).hub_app_url- замените значение параметра на URL, который будет использоваться для доступа к AppSec.Hub.hub_consul_token- замените значение параметра на токен для сервисаconsul.
- Укажите необходимые параметры
auth_properties:db_auth_password- пароль пользователя для сервиса аутентификации AppSec.Hub.jwt_token_signing_key- замените<HUBAPP-SIGN-KEY>на значение, полученное в результате выполнения следующей команды:dd if=/dev/urandom bs=1 count=64 2>/dev/null | base64 -w 0 | rev | cut -b 2- | rev.metrics_password- замените пароль по умолчанию пользователя администратора metrics.
- Для использования ZAP необходимо создать постоянный том для хранения, указав в секции
pvc'enable: true',storageClassName, и размерstorage.
Пример модуля
hubcore: options: app_properties: # Класс драйвера для БД db_hub_driver: org.postgresql.Driver # Адрес экземпляра PostgreSQL db_hub_url: "jdbc:postgresql://${PG_URL}:${PG_PORT}/${HUBDBNAME}" # Основная схема БД, в которой содержится оперативная информация о работе AppSec.Hub db_hub_schema: hub # Имя пользователя с доступом к основной схеме БД db_hub_username: hubapp # Пароль пользователя с доступом к основной схеме БД db_hub_password: o7R667rx21 db_presentation_driver: org.postgresql.Driver db_presentation_url: "jdbc:postgresql://${PG_URL}:${PG_PORT}/${HUBDBNAME}" db_presentation_schema: presentation db_presentation_username: hubapp db_presentation_password: ## Ключ шифрования паролей, используемых для доступа к инструментам ИБ. Размер ключа — 24 символа ## Для генерации ключа можно использовать следующую команду encrypt_key: qwr7erVIAspcln6pRbZKQYcE ## Внешний URL экземпляра AppSec.Hub hub_app_url: https://appsec-hub.example.com # URL-адрес сервиса consul с http/https hub_consul_host: "http://consul-expose-servers:8500" # токен для доступа к сервису consul hub_consul_token: 7d2Vd31mEymuX # Порт gRPC hub_grpc_port: 50051 # URL сервиса hub-core hub_service_url: http://hub-core # Включение сбора метрик сервиса hub-core management_metrics_enable_all: true # Путь конфигурационных файлов ZAP hub_scan_config_file_path: "/opt/zapfiles" # Включение отображения релизных объектов на странице списка дефектов hub_defect_showReleaseObject: true auth_properties: # Класс драйвера для БД db_auth_driver: org.postgresql.Driver db_auth_schema: auth # Имя пользователя для сервиса аутентификации AppSec.Hub db_auth_username: hubauth ## Пароль пользователя для сервиса аутентификации AppSec.Hub db_auth_password: oxgfFsxcr ## Размер пула соединений для сервиса аутентификации AppSec.Hub # db_auth_poolSize: 10 ## Срок действия токена # jwt_token_expiration_time: 60 ## Эмитент токена # jwt_token_issuer: AppSecHub ## Установить значение значение полученное в результате выполнения следующей команды ## полученное в результате выполнения следующей команды ## dd if=/dev/urandom bs=1 count=64 2>/dev/null | base64 -w 0 | rev | cut -b 3- | rev jwt_token_signing_key: rKYno2eSNKM3mduCFv2NCpYDdoWz0HAs0Q9DhyAxEX/WEvHoYuoB2fjxRiibhwt4/0CVHRGVSvT5yHgRb8tPLQWpIm4xIFfAUmm4Iedc+8gKISHyVPp7Hi4iKYm+QMQkz8Zj9jVUyQpOH4Z2f0LqP/WtvjQenb6rI3dDfpR/xUVA= ## Время обновления токена # jwt_token_refresh_expiration_time: 60 metrics_username: admin metrics_password: gxuts4hg393779 product_properties: ## Имя продукта report_product_name: AppSec.Hub ## Путь к файлу логотипа # report_logo_path: /usr/local/tomcat/webapps/hub/WEB-INF/classes/resources/logo.svg ## Путь к файлу логотипа в формате png # report_logo_path_png: /usr/local/tomcat/webapps/hub/WEB-INF/classes/resources/logo.png ## Путь к файлу темплейта pdf # report_issue_pdf_template: /usr/local/tomcat/webapps/hub/WEB-INF/classes/resources/issue-report-pdf-template.xsl env: # -- Указание TimeZone Europe/Moscow timezone: Europe/Moscow # -- Уровень логгирования: INFO, DEBUG HUB_LOG_LEVEL: info # Передача параметров [app|auth|product].properties через переменные среды # @default -- Смотреть _values.yaml_ JAVA_OPTS: # "-Dserver.servlet.session.timeout=1m" # -- Дополнительные лейблы для pods hub-core # -- Дополнительные лейблы для pods hub-core podLabels: {} # -- Имя контейнера hub-core fullname: hub-core image: # -- Путь к репозиторию образа hub-core name: appsechub/hub-core # -- Политика загрузки образа pullPolicy: Always # -- Реестр образов контейнеров repository: registry.appsec.global # -- Тег версии образа tag: 2025.4.2 # -- Количество реплик компонента (не менять) replicas: 1 # -- Аннотации для пода hub-core # Appsec.Hub не работатет с автоскейлингом # annotations: # cluster-autoscaler.kubernetes.io/safe-to-evict: "false" # -- nodeSelector для компонента hub-core nodeSelector: {} # label: value # -- Стратегия развертывания новых pod's strategy: type: Recreate # -- Установка лимитов для контейнера hub-core # resources: # requests: # memory: "4096Mi" # cpu: "200m" # limits: # memory: "8192Mi" # cpu: "4000m" service: # -- При использовании service.type=LoadBalancer необходимо поставить true # и указать статический ip адрес enableIp: null # -- Политика Service externalTrafficPolicy: Local # -- IP aдрес LoadBalancer для Service (Если frontend.service.type=LoadBalancer) ip: null # -- Тип Service, LoadBalancer или ClusterIP type: ClusterIP # -- Аннотации к объекту Service annotations: {} # Порты для Service ports: - name: core port: 8080 targetPort: 8080 protocol: TCP - name: grpc port: 50051 targetPort: 50051 protocol: TCP # PVC hub-core pvc: # -- Создать постоянный том для хранения hub-core, данных при использовании zap необходимо включить enable: true storageClassName: yc-network-hdd # -- Указание размера тома для хранения данных сервиса storage: 5Gi # -- Указание параметров доступа к тому с данными сервиса accessModes: - ReadWriteOnce # -- Монтирование томов в контейнер extraVolumemounts: {} # - name: cacerts # mountPath: /usr/lib/jvm/java-11-amazon-corretto/lib/security # -- Указание дополнительного томов контейнера extraVolumes: {} # - name: ssl-root-ca # secret: # secretName: ssl-root-ca # - name: cacerts # emptyDir: {} # -- Дополнительный контейнер containers: {} # - name: fluentd # image: registry.appsec.global/public/fluentd-v1.12.1:latest # #env: # -- Дополнительный initcontainer initcontainers: {} # - name: update-ssl # image: "{{ .Values.hubcore.image.repository }}/{{ .Values.hubcore.image.name }}:{{ .Values.hubcore.image.tag }}" # command: ["/bin/sh", "-c"] # args: ["cp -R /usr/lib/jvm/java-11-amazon-corretto/lib/security/* /cacerts/ && # keytool -import -noprompt -trustcacerts -alias local -file /tmp/certs/ssl-rootca.crt -keystore /cacerts/cacerts -storepass changeit && # keytool -list -keystore /cacerts/cacerts -alias local"] # extraVolumeMounts: # - name: ssl-root-ca # mountPath: /tmp/certs/ssl-rootca.crt # subPath: ssl-rootca.crt # readOnly: false # - name: cacerts # mountPath: /cacerts runAsUser: "2000"3.6. hub-ui:
- Для включения использования метрик замените значение
selectedNginxConfна "metrics" - метрики включены. В случае если метрики не требуются, можно оставить значение по умолчанию.
Пример модуля
hubui: # -- Имя контейнера hub-ui fullname: hub-ui selectedNginxConf: "default" # Возможные значения: "default" - метрики выключены, "metrics" - метрики включены # -- Переопределение конфига nginx. По умолчанию используется конфиг из файла conf/nginx_default.conf.tpl. customNginxConfs: "" # customNginxConfs: |- # server { # listen 0.0.0.0:8080; # root /app; # location / { # index index.html index.php; # } # location ~ \.php$ { # fastcgi_pass phpfpm-server:9000; # fastcgi_index index.php; # include fastcgi.conf; # } # } # -- Дополнительные переменные окружения для Service Hub UI env: # -- Указание TimeZone Europe/Moscow timezone: Europe/Moscow # -- Дополнительные лейблы для pods hub-ui podLabels: {} image: # -- Путь к репозиторию образа hub-ui name: appsechub/hub-ui # -- Политика загрузки образа pullPolicy: Always # -- Реестр образов контейнеров repository: registry.appsec.global # -- Тег версии образа tag: 2025.4.2 # -- Количество реплик компонента replicas: 1 # Аннотации для пода hub-ui # Appsec.Hub не работатет с автоскейлингом # annotations: # cluster-autoscaler.kubernetes.io/safe-to-evict: "false" # Установка лимитов для контейнера hub-ui # resources: # requests: # memory: "100Mi" # cpu: "100m" # limits: # memory: "1024Mi" # cpu: "2000m" # Время бездействия пользователя до появления уведомления о бездействии (в секундах) # idleTime: "1800" # Время показа на экране уведомления о бездействии до разлогинивания (в секундах) # timeOut: "60" service: # -- При использовании service.type=LoadBalancer необходимо поставить true # и указать статический ip адрес enableIp: null # -- IP aдрес LoadBalancer для Service (Если frontend.service.type=LoadBalancer) ip: null # -- Политика Service externalTrafficPolicy: Local # -- Порт для Service port: 80 # -- Порт на который нацелен Service targetPort: 8080 # -- Тип Service, LoadBalancer или ClusterIP type: ClusterIP # -- Аннотации к объекту Service annotations: {} # -- Указать nodeSelector если требуется # nodeSelector: {} # label: value # -- Стратегия развертывания новых pod's # strategy: {}3.7. hub-engine-manager:
Пример модуля
hubEngineManager: # -- Запуск CI инструмента hub-engine-manager (true/false) enable: true # -- Имя контейнера hub-engine-manager fullname: hub-engine-manager # -- Имя пользователя администратора admin_username: admin # -- Пароль администратора, необходимо поменять admin_password: # - Url адрес hub-engine-manager, необходимо поменять base_url: hub-engine-manager.example.com image: # -- Путь к репозиторию образа name: appsechub/hub-engine-manager # -- Политика загрузки образа pullPolicy: Always # -- Реестр образов контейнеров repository: registry.appsec.global # -- Тег версии образа tag: 2025.4.2 # -- Количество реплик компонента replicas: 1 service: # -- При использовании service.type=LoadBalancer необходимо поставить true # -- и указать статический ip адрес enableIp: null # -- Политика Service externalTrafficPolicy: Local # -- IP aдрес LoadBalancer для Service (Если frontend.service.type=LoadBalancer) ip: null # -- Порт для Service port: 8080 # -- Порт на который нацелен Service targetPort: 8080 # -- Имя порта на который нацелен Service portName: port8080 # -- Тип Service, LoadBalancer или ClusterIP type: ClusterIP # -- Аннотации к объекту Service annotations: {} #resources: # requests: # memory: "128Mi" # cpu: "50m" # limits: # memory: "4096Mi" # cpu: "500m" # PVC hub-engine-manager pvc: # -- Создать постоянный том для хранения данных сервиса hub-engine-manager (true/false) enable: true # -- Указание storageClassName для тома сервиса storageClassName: yc-network-hdd # -- Указание размера тома для хранения данных сервиса storage: 10Gi # -- Указание параметров доступа к тому с данными сервиса accessModes: - ReadWriteOnce # -- nodeSelector для компонента hub-engine-manager # nodeSelector: # label: value # -- Стратегия развертывания новых pod's strategy: {} env: # hub-engine-manager -- Указание TimeZone Europe/Moscow timezone: Europe/Moscow # -- Дополнительные лейблы для pods hub-engine-manager podLabels: {} # -- Монтирование дополнительных томов в контейнер extraVolumemounts: {} # - name: ssl-root-ca # mountPath: /tmp/certs/ssl-rootca.crt # subPath: ssl-rootca.crt # - name: varlog # mountPath: /path/logs # -- Указание дополнительных томов контейнера extraVolumes: {} # - name: ssl-root-ca # secret: # secretName: ssl-root-ca # - name: varlog # emptyDir: {} # - name: config-volume # secret: # secretName: fluentd-config-avc3.8. hub-engine - настройка CI-инструмента:
- Включите сервис
docker-in-docker, указав в разделеenable: true. - Включите CI инструмент
hub-engine-manager, указав в разделеenable: true.- Укажите
base_url, который будет использоваться для доступа кhub-engine-manager.
- Укажите
- Включите slave ноду
hub-Engine, указав в разделеenable: true- Укажите приватный ключ
authorized_keys- приватный ключ создается в секретах через web-интерфейсhub-engine-manager. - Раскомментируйте раздел
nodes.
- Укажите приватный ключ
Пример модуля
hubEngine: # -- Запуск CI инструмента hub-engine-manager (true/false) enable: true # для подключения ноды к hub-engine-manager - указать публичный ssh ключ # например так: # helm upgrade --install \ # --set-file hubEngine.authorized_keys=./id_rsa.pub \ # hub sfs/appsechub -f values.yaml # -- Приватный ключ создается в секретах через web интерфейс hub-engine-manager (см. документацию) authorized_keys: env: LOG_CONSOLE: "1" SCHEDULER_INTERVAL_HOURS: "30" ARCHIVE_LIFETIME_DAYS: "30" LOG_FILE: "0" LOGS_LIFETIME_DAYS: "10" LOG_BASE_PATH: AUTH_USE: "0" AUTH_EXPIRED: "365" AUTH_SECRET_KEY: AUTH_SCHEME: MODEL_USE_ENCRYPTION: "0" MODEL_SECRET_KEY: MODEL_DEFAULT_PRACTICE: MODEL_LOWER_LIMIT: "0.8" MODEL_MIN_FREE_DISK_SPACE: "100" LOG_LEVEL: INFO ENCRYPTION_KEY: "" PIPELINE_SERVICE_NAME: grpc-pipeline-50053 SCANS_FOLDER: /app/scans_folder ARCHIVE_FOLDER: /app/archive_folder RABBITMQ_EXCHANGE: "" RABBITMQ_ROUTING_KEY: super nodes: # -- Имя контейнера hub-engine - fullname: hub-engine image: name: appsechub/hub-engine pullPolicy: Always repository: registry.appsec.global tag: 2025.4.2 service: # -- При использовании service.type=LoadBalancer необходимо поставить true # -- и указать статический ip адрес enableIp: null # -- Политика Service externalTrafficPolicy: Local # -- IP aдрес LoadBalancer для Service (Если frontend.service.type=LoadBalancer) ip: null # -- Порт для Service port: 50052 # -- Порт на который нацелен Service targetPort: 50052 # -- Имя порта на который нацелен Service portName: port50052 # -- Тип Service, LoadBalancer или ClusterIP type: ClusterIP # -- Аннотации к объекту Service annotations: {} resources: requests: memory: "128Mi" cpu: "50m" limits: memory: "4096Mi" cpu: "500m" # -- PVC hub-engine pvc: # -- Создать постоянный том для хранения данных сервиса hub-engine (true/false) enable: false # -- Указание storageClassName для тома сервиса storageClassName: # -- Указание размера тома для хранения данных сервиса storage: 10Gi # -- Указание параметров доступа к тому с данными сервиса accessModes: - ReadWriteOnce # -- Путь рабочей папки hub-engine path: /home/ubuntu/jenkins_slave #-- nodeSelector для компонента hub-engine nodeSelector: {} # label: value # -- Стратегия развертывания новых pod's strategy: {} env: # hub-engine -- Указание TimeZone Europe/Moscow timezone: Europe/Moscow # -- Дополнительные лейблы для pods hub-engine podLabels: {} # -- Монтирование дополнительных томов в контейнер extraVolumemounts: {} # - name: ssl-root-ca # mountPath: /tmp/certs/ssl-rootca.crt # subPath: ssl-rootca.crt # - name: varlog # mountPath: /path/logs extraVolumes: {} # - name: ssl-root-ca # secret: # secretName: ssl-root-ca # - name: varlog # emptyDir: {} # - name: config-volume # secret: # secretName: fluentd-config-avc3.9. ingress:
- Укажите домены AppSec.Hub и
hub-engine-managerв полях соответствующих секций. Параметрenabled:определяет, нужно ли создавать Ingress для конкретного сервиса. - Создайте секрет с SSL-сертификатами, установив
create: trueи указав необходимые сертификаты. - Включите использование SSL, установив опцию
ssl: true. - Для задания специфичных параметров укажите их в секции
annotations. - Укажите класс Ingress-контроллера.
Пример модуля
ingress: # Название Ingress AppSec.Hub - name: hub # Аннотации к объекту Ingress AppSec.Hub annotations: nginx.ingress.kubernetes.io/proxy-body-size: "0" #kubernetes.io/ingress.class: nginx-internal # Указание Ingress Class, nginx-internal class_name: nginx-internal # Создать Ingress для AppSec.Hub (true/false) enabled: true # Ingress hosts AppSec.Hub hosts: # Указать домен AppSec.Hub - host: appsec-hub.example.com paths: - path: / pathType: Prefix backend: service: name: hub-ui port: number: 80 # Ingress TLS AppSec.Hub tls: - hosts: # Указать домен AppSec.Hub - appsec-hub.example.com # -- При `ingress.hub.ssl.enable: true` не менять значение, при использовании существующих секретов - поменять имя секрета на актуальное secretName: secret-tls-hub # Для создания секрета при старте `create: true` # Указать сертификат и ключ ssl # Создать секрет с SSL сертификатами (true/false) create: true # Сертфикат, закодированный в Base64 crt: Сертфикат, закодированный в Base64 # Сертфикат, закодированный в Base64 key: Сертфикат, закодированный в Base64 ssl: # Использовать SSL (true/false) enable: true # Название Ingress Hub engine manager - name: hub-engine-manager # Создать Ingress для Hub engine manager (true/false) enabled: true # name: hub-engine-manager # Аннотации к объекту Ingress Hub engine manager annotations: nginx.ingress.kubernetes.io/proxy-body-size: "0" # Указание Ingress Class, nginx-internal class_name: nginx-internal # Ingress hosts для Hub engine manager hosts: # Указать домен для Hub engine manager - host: hub-engine-manager.example.com paths: - path: / pathType: Prefix backend: service: name: hub-engine-manager port: number: 8080 tls: - hosts: # Указать домен Hub engine manager - hub-engine-manager.example.com # При `ingress.hubEngineManager.ssl.enable: true` не менять значение, при использовании существующих секретов - поменять имя секрета на актуальное secretName: secret-tls-hub-engine-manager ## Для создания секрета при старте `create: true` # Указать сертификат и ключ ssl # Создать секрет с SSL сертификатами (true/false) create: true # Сертфикат, закодированный в Base64 crt: Сертфикат, закодированный в Base64 # Сертфикат, закодированный в Base64 key: Сертфикат, закодированный в Base64 ssl: # Использовать SSL (true/false) enable: true3.10. postgresql:
Основные настройки PostgreSQL:
- Включите PostgreSQL, укажите
enable: trueдля активации PostgreSQL. - Остальные параметры привести в соответствие с
hubdbmigration(POSTGRES_PASSWORD), вне зависимости от использования или нет, образ используется для проверки доступности БД, то есть данные должны быть актуальны. - Включите PVC:
- Установите
enable: trueдля создания постоянного тома. - Укажите класс хранилища
storageClassName(оставьте пустым, чтобы использовать значение по умолчанию). - Укажите размер тома
storage.
- Установите
Пример модуля
postgresql: # -- Установить PostgreSQL (true/false) enable: true # -- Имя контейнера fullname: postgresql image: # -- Путь к репозиторию образа name: public/sfs-postgresql # -- Политика загрузки образа pullPolicy: IfNotPresent # -- Реестр образов контейнеров repository: registry.appsec.global # -- Тег версии образа tag: 13.2.2-alpine # -- Количество реплик компонента replicas: 1 # -- Дополнительные лейблы для Pods postgresql podLabels: {} service: # -- При использовании service.type=LoadBalancer необходимо поставить true # -- и указать статический ip адрес enableIp: null # -- Политика Service externalTrafficPolicy: Local # -- IP aдрес LoadBalancer для Service (Если frontend.service.type=LoadBalancer) ip: null # -- Порт для Service port: 5432 # -- Порт на который нацелен Service targetPort: 5432 # -- Тип Service, LoadBalancer или ClusterIP type: ClusterIP # -- Аннотации к объекту Service annotations: {} # -- NodeSelector для компонента PostgreSQL nodeSelector: {} #label: value # -- Стратегия развертывания новых pod's strategy: type: Recreate # -- Установка лимитов для контейнера PostgreSQL # resources: # requests: # memory: "128Mi" # cpu: "30m" # limits: # memory: "4096Mi" # cpu: "4000m" # PVC PostgreSQL pvc: # -- Создать постоянный том для хранения PostgreSQL enable: true # -- Указание storageClassName для тома сервиса storageClassName: yc-network-hdd # -- Указание размера тома для хранения данных сервиса storage: 10Gi # -- Указание параметров доступа к тому с данными сервиса accessModes: - ReadWriteOnce3.11. consul:
- Добавьте
consulToken. - Добавьте секрет
imagePullSecretsдля доступа к реестру, если требуется. - Включите UI (пользовательский интерфейс Consul), если требуется.
Пример модуля
consul: enabled: true fullnameOverride: consul hubConnect: consulHost: "http://consul-expose-servers" consulPort: "8500" consulToken: "<consul token>" connectInject: enabled: false global: datacenter: appsechub logJSON: true image: registry.appsec.global/public/sfs-consul:1.14.4 imagePullSecrets: - name: regcred acls: manageSystemACLs: false enabled: true default_policy: "deny" enable_token_persistence: true bootstrapToken: secretName: consul-secret secretKey: consul-token client: enabled: false server: replicas: 1 bootstrapExpect: 1 disruptionBudget: maxUnavailable: 0 exposeService: enabled: true type: ClusterIP extraConfig: | { "addresses": { "http": "0.0.0.0" }, "acl": { "enabled": true, "default_policy": "deny", "down_policy": "extend-cache", "enable_token_persistence": true } } ui: ingress: enabled: true ingressClassName: nginx pathType: Prefix hosts: - host: hub-engine-manager.example.com paths: - / tls: [] annotations: nginx.ingress.kubernetes.io/rewrite-target: /3.12. gateway:
- Укажите ключ подписи -
jwtToken(для генерации токена можно использовать следующую команду:dd if=/dev/urandom bs=1 count=64 2>/dev/null | base64 -w 0 | rev | cut -b 2- | rev).
Пример модуля
gateway: # -- Имя контейнера hub-gateway fullname: hub-gateway ## -- Стратегия развертывания новых pod's strategy: type: Recreate image: # -- Путь к репозиторию образа name: appsechub/hub-gateway # -- Политика загрузки образа pullPolicy: Always # -- Реестр образов контейнеров repository: registry.appsec.global # -- Тег версии образа tag: 2025.4.2 # -- Количество реплик компонента (не менять) replicas: 1 env: # -- Указание TimeZone Europe/Moscow timezone: # -- Ключ подписи jwt-токена для сервиса hub-gateway # Для генерации токена можно использовать следующую команду # dd if=/dev/urandom bs=1 count=64 2>/dev/null | base64 -w 0 | rev | cut -b 2- | rev jwtToken: ttBaLs8aIv0t8vSQ12209hVMftI6PVIRFsJsn2HX6h3gIv9vgoK2ZWIKxiB499qvOQITfpkVuXarxBC++3Rahg= # -- Дополнительные лейблы для Pods hub-gateway podLabels: {} service: # -- Тип Service, LoadBalancer или ClusterIP type: ClusterIP # -- Политика Service externalTrafficPolicy: Local # -- При использовании service.type=LoadBalancer необходимо поставить true # и указать статический ip адрес enableIp: null # -- IP aдрес LoadBalancer для Service (Если frontend.service.type=LoadBalancer) ip: null # -- Порт для Service port: 8080 ## -- Порт контейнера, на который ссылается Service targetPort: 8080 #### # -- Аннотации к объекту Service hub-gateway # Пример: #annotations: { # yandex.cloud/load-balancer-type: Internal, # yandex.cloud/subnet-id: <id-subnet> #} annotations: null ## -- Аннотации для пода hub-gateway ## Appsec.Hub не работатет с автоскейлингом #annotations: # cluster-autoscaler.kubernetes.io/safe-to-evict: "false" annotations: null ### # -- Установка лимитов для контейнера #resources: # requests: # memory: "4096Mi" # cpu: "200m" # limits: # memory: "8192Mi" # cpu: "4000m" ### # --NodeSelector для компонента hub-gateway deployment nodeSelector: {} # label: value3.13. hub-sso:
- Укажите ключ шифрования -
encKey(для генерации токена можно использовать следующую команду:dd if=/dev/urandom bs=1 count=32 2>/dev/null | base64 -w 0 | rev | cut -b 2-17 | rev). - Укажите опцию
urlAppSec.Hub.
Пример модуля
hubsso: # -- Запуск hub-sso сервиса (true/false) enable: true # -- Имя контейнера hub-sso fullname: hub-sso image: # -- Путь к репозиторию образа name: appsechub/hub-sso # -- Реестр образов контейнеров repository: registry.appsec.global # -- Тег версии образа # -- Политика загрузки образа tag: 2025.4.2 # -- Политика загрузки образа pullPolicy: Always # -- Стратегия развертывания новых pod's strategy: type: Recreate # -- Аннотации к объекту hub-sso annotations: {} # Установка лимитов для контейнера resources: requests: memory: "1024Mi" cpu: "200m" limits: memory: "8192Mi" cpu: "4000m" ## -- nodeSelector для компонента hub-sso nodeSelector: {} # Для генерации токена можно использовать следующую команду # dd if=/dev/urandom bs=1 count=32 2>/dev/null | base64 -w 0 | rev | cut -b 2-17 | rev # -- Ключ шифрования SSO encKey: "ADa29lu2+uoSiSA0" service: # -- Тип Service, LoadBalancer или ClusterIP type: ClusterIP # -- Политика Service externalTrafficPolicy: local # -- При использовании service.type=LoadBalancer необходимо поставить true # и указать статический ip адрес enableIp: false # -- IP aдрес LoadBalancer для Service (Если frontend.service.type=LoadBalancer) ip: null # -- Аннотации к объекту Service hub-sso annotations: {} hub: service: # -- Указать url AppSec.Hub url: https://appsec-hub.example.com env: # -- Размер пула соединений с базой данных dbPoolSize: "10" # -- Указание TimeZone Europe/Moscow timezone: Europe/Moscow # -- Дополнительные лейблы для Pods hub-sso podLabels: {} # -- Монтирование дополнительных томов в контейнер extraVolumemounts: {} # - name: varlog # mountPath: /opt/py-model/logs # -- Указание дополнительных томов контейнера extraVolumes: {} # - name: varlog # emptyDir: {} # - name: config-volume # secret: # secretName: fluentd-config-avc3.14. hub-pipeline:
Пример модуля
hubpipeline: enable: true # -- Имя контейнера hub-pipeline fullname: hub-pipeline image: # -- Путь к репозиторию образа hub-pipeline name: appsechub/hub-pipeline # -- Реестр образов контейнеров repository: registry.appsec.global # -- Тег версии образа tag: 2024.4.1 # -- Политика загрузки образа pullPolicy: Always # -- Стратегия развертывания новых pod's strategy: type: Recreate # -- Аннотации к объекту hub-pipeline annotations: {} db_name: pipeline_db # Установка лимитов для контейнера #resources: # requests: # memory: "1024Mi" # cpu: "200m" # limits: # memory: "8192Mi" # cpu: "4000m" service: # -- При использовании service.type=LoadBalancer необходимо поставить true # и указать статический ip адрес enableIp: false # -- Политика Service externalTrafficPolicy: local # -- IP aдрес LoadBalancer для Service (Если frontend.service.type=LoadBalancer) ip: null # -- Тип Service, LoadBalancer или ClusterIP type: ClusterIP # -- Аннотации к объекту Service annotations: {} # -- nodeSelector для компонента hub-pipeline nodeSelector: {} #label: value env: # -- Указание TimeZone Europe/Moscow timezone: Europe/Moscow # -- Дополнительные лейблы для Pods hub-pipeline podLabels: {}3.15. rabbitmq:
Пример модуля
rabbitmq: enable: true fullname: rabbitmq image: # -- Путь к репозиторию образа name: public/sfs-rabbitmq # -- Политика загрузки образа pullPolicy: IfNotPresent # -- Реестр образов контейнеров repository: registry.appsec.global # -- Тег версии образа tag: 3.13-management auth: username: user password: "" podLabels: {} # Порты для Service ports: - name: amqp port: 5672 targetPort: 5672 protocol: TCP - name: management port: 15672 targetPort: 15672 protocol: TCP annotations: {} # -- NodeSelector для компонента rabbitmq nodeSelector: {} # -- Стратегия развертывания strategy: type: Recreate # -- Установка лимитов для контейнера rabbitmq # resources: # requests: # memory: "512Mi" # cpu: "500m" # limits: # memory: "1Gi" # cpu: "1" pvc: # -- Создать постоянный том для хранения rabbitmq enable: true # -- Указание storageClassName для тома сервиса storageClassName: yc-network-ssd # -- Указание размера тома для хранения данных сервиса storage: 10Gi # -- Указание параметров доступа к тому с данными сервиса accessModes: - ReadWriteOnce3.16. hubissue:
Пример модуля
hubissue: # -- Имя контейнера hub-issue fullname: hub-issue image: # -- Путь к репозиторию образа hub-issue name: appsechub/hub-issue # -- Реестр образов контейнеров repository: registry.appsec.global # -- Тег версии образа tag: 2025.4.2 # -- Политика загрузки образа pullPolicy: Always # -- Стратегия развертывания новых pod's strategy: type: Recreate # -- Аннотации к объекту hub-issue annotations: {} # Установка лимитов для контейнера resources: requests: memory: "1024Mi" cpu: "200m" limits: memory: "8192Mi" cpu: "4000m" service: # -- При использовании service.type=LoadBalancer необходимо поставить true # и указать статический ip адрес enableIp: false # -- Политика Service externalTrafficPolicy: local # -- IP aдрес LoadBalancer для Service (Если frontend.service.type=LoadBalancer) ip: null # -- Тип Service, LoadBalancer или ClusterIP type: ClusterIP # -- Аннотации к объекту Service annotations: {} # -- nodeSelector для компонента hub-issue nodeSelector: {} #label: value env: # -- Логирование с временными метками executionLogEnabled: "false" executionLogMinDurationMsToLog: "1000" # -- Размер пула соединений с базой данных dbPoolSize: "10" # -- Указание TimeZone Europe/Moscow timezone: Europe/Moscow # -- Дополнительные лейблы для Pods hub-issue podLabels: {}3.17. issueRule:
Пример модуля
issueRule: # -- Имя контейнера hub-issue-rule fullname: hub-issue-rule image: # -- Путь к репозиторию образа hub-issue-rule name: appsechub/hub-issue-rule # -- Реестр образов контейнеров repository: registry.appsec.global # -- Тег версии образа tag: 2025.4.2 # -- Политика загрузки образа pullPolicy: Always # -- Стратегия развертывания новых pod's strategy: type: Recreate # -- Аннотации к объекту hub-issue-rule annotations: {} # Установка лимитов для контейнера resources: requests: memory: "1024Mi" cpu: "200m" limits: memory: "8192Mi" cpu: "4000m" service: # -- Тип Service, LoadBalancer или ClusterIP type: ClusterIP # -- Политика Service externalTrafficPolicy: local # -- При использовании service.type=LoadBalancer необходимо поставить true # и указать статический ip адрес enableIp: false # -- IP aдрес LoadBalancer для Service (Если frontend.service.type=LoadBalancer) ip: null # -- Аннотации к объекту Service annotations: {} # -- nodeSelector для компонента hub-issue-rule nodeSelector: {} #label: value env: # -- Логирование с временными метками executionLogEnabled: "false" executionLogMinDurationMsToLog: "1000" # -- Размер пула соединений с базой данных dbPoolSize: "10" # -- Указание TimeZone Europe/Moscow timezone: Europe/Moscow # -- Дополнительные лейблы для Pods hub-issue-rule podLabels: {}3.18. Включение метрик в AppSec.Hub:
- Убедитесь, что модуль Superset включен, установив параметр
enabled: true. - Установите пользователя, от имени которого будет запускаться контейнер:
runAsUser: 1000. - В разделе
configOverridesмодуля Superset, раскомментируйтеsecretи укажитеSECRET_KEY(для генерации можно использовать следующую команду:openssl rand -base64 42). - Укажите пароль для подключения Superset к базе данных метрик в разделе
supersetNode,db_pass: 'пароль_для_подключения_BD'. - Замените пароль по умолчанию в опции
init.adminUser.password. Этот пароль должен совпадать сMETRICS_PASSWORDиз модуляhubmetricsbridge. - Укажите пароль для пользователя
metricsв разделеpostgresql. Пароль должен совпадать сdb_pass, указанным вsupersetNode. - Включите использование PVC, указав
storageClass,accessModes,size- размер тома. - В разделе
hubmetricsbridgeукажите следующие параметры:PGPASSWORD- пароль пользователя с административным доступом БД метрик, должен совпадать с паролем указанным в модулеpostgresql.SCHEDULER_DB_PASSWORD- пароль пользователяschedulerБД метрик.METRICS_DB_PASSWORD- пароль пользователя метрик.REMOTE_PASSWORD_DB- пароль пользователя с правами администратора на БД AppSec.Hub.METRICS_PASSWORD- имя пользователя метрик, должно совпадать с паролем, указанным в модулеinit.
Пример модуля
superset: enabled: true fullnameOverride: hub-superset runAsUser: 1000 secretEnv: create: true serviceAccountName: superset serviceAccount: create: true configOverrides: secret: | SECRET_KEY = 'Ваш_сгенерированный_SECRET_KEY' supersetNode: connections: db_pass: 'пароль_для_подключения_BD' init: adminUser: password: 'пароль_для_admin_metrics' postgresql: auth: username: metrics password: 'пароль_администратора_БД_метрик' primary: persistence: enabled: true # Включить использование PVC storageClass: <имя_вашего_StorageClass> # Укажите StorageClass accessModes: - ReadWriteOnce # Задайте тип доступа (например, "ReadWriteOnce") size: 10Gi # Укажите размер тома imagePullSecrets: - name: regcred hubmetricsbridge: PG_USER: metrics PGPASSWORD: 'пароль_администратора_БД_метрик' PG_URL: hub-postgresql SCHEDULER_DB_PASSWORD: 'пароль_scheduler' METRICS_DB_PASSWORD: 'пароль_пользователя_метрик' REMOTE_HOST_DB: postgresql REMOTE_PORT_DB: 5432 REMOTE_DB: hubdb REMOTE_USER_DB: hubadm REMOTE_PASSWORD_DB: 'пароль_администратора_БД_AppSec.Hub' METRICS_HOST: http://hub-superset METRICS_PORT: 8088 METRICS_USERNAME: admin METRICS_PASSWORD: 'пароль_admin_metrics' METRICS_DATABASE_URL: "postgresql+psycopg2://metrics_user:%s@hub-postgresql:5432/metrics_data" CHRON: "0 0 * * * *" nodeSelector: {}3.19. scheduler:
Пример модуля
hubscheduler: enable: true # -- Имя контейнера hub-scheduler fullname: hub-scheduler image: # -- Путь к репозиторию образа hub-scheduler name: appsechub/hub-scheduler # -- Реестр образов контейнеров repository: registry.appsec.global # -- Тег версии образа tag: 2025.4.1 # -- Политика загрузки образа pullPolicy: Always # -- Стратегия развертывания новых pod's strategy: type: Recreate # -- Аннотации к объекту hub-scheduler annotations: {} db_name: scheduler_db # Установка лимитов для контейнера #resources: # requests: # memory: "1024Mi" # cpu: "200m" # limits: # memory: "8192Mi" # cpu: "4000m" service: # -- При использовании service.type=LoadBalancer необходимо поставить true # и указать статический ip адрес enableIp: false # -- Политика Service externalTrafficPolicy: local # -- IP aдрес LoadBalancer для Service (Если frontend.service.type=LoadBalancer) ip: null # -- Тип Service, LoadBalancer или ClusterIP type: ClusterIP # -- Аннотации к объекту Service annotations: {} # -- nodeSelector для компонента hub-scheduler nodeSelector: {} env: # -- Указание TimeZone Europe/Moscow timezone: Europe/Moscow # -- Дополнительные лейблы для Pods hub-scheduler podLabels: {}3.20. defect-sync:
Пример модуля
hubdefectsync: enable: true # -- Имя контейнера hub-defectsync fullname: defect-sync image: # -- Путь к репозиторию образа hub-defectsync name: appsechub/hub-defect-sync # -- Реестр образов контейнеров repository: registry.appsec.global # -- Тег версии образа tag: 2025.4.1 # -- Политика загрузки образа pullPolicy: Always # -- Стратегия развертывания новых pod's strategy: type: Recreate # -- Аннотации к объекту hub-defectsync annotations: {} # Установка лимитов для контейнера #resources: # requests: # memory: "1024Mi" # cpu: "200m" # limits: # memory: "8192Mi" # cpu: "4000m" service: # -- При использовании service.type=LoadBalancer необходимо поставить true # и указать статический ip адрес enableIp: false # -- Политика Service externalTrafficPolicy: local # -- IP aдрес LoadBalancer для Service (Если frontend.service.type=LoadBalancer) ip: null # -- Тип Service, LoadBalancer или ClusterIP type: ClusterIP # -- Аннотации к объекту Service annotations: {} # -- nodeSelector для компонента hub-defectsync nodeSelector: {} env: # -- Указание TimeZone Europe/Moscow timezone: Europe/Moscow # -- Дополнительные лейблы для Pods hub-defectsync podLabels: {}3.21. Для более гибкой настройки смотрите файл values.yaml.
-
Установите AppSec.Hub.
helm upgrade --install hub sfs/appsechub -f values.yaml