Camellia
Описание
Сервис Camellia отвечает за поиск и анализ уязвимости в компонентах с открытым исходным кодом, которые используются в приложении.
Используемые топики
camellia.1.0.testUpdated
.apricot.1.0.applications.event.applicationCreated
.apricot.1.0.applications.event.applicationUpdated
.
БД
- PostgreSQL (схема: camellia).
- Redis.
Внешние зависимости
- Ingress.
- Redis.
- S3 (MinIO).
- Kafka.
- PostgreSQL.
- Dependency Track.
- Keycloak.
- OAuth2.
Переменные сервиса
camellia-migrate init container
С таблицами переменных доступа и настроек логирования можно ознакомиться в разделах «Доступ к PostgreSQL», «Настройки логирования».
Настройки сервиса:
Имя переменной | Описание | Примечание | Варианты значения | Обязательно | Пример значения | Значение в values |
---|---|---|---|---|---|---|
ALEMBIC_CONFIG |
Файл для настройки миграций | - | Путь до файла | Да | /app/alembic.ini |
.Values.alembicConfig |
camellia-seed init container
С таблицами переменных доступа и настроек логирования можно ознакомиться в разделах «Доступ к S3», «Доступ к Redis», «Доступ к PostgreSQL», «Доступ к Kafka», «Настройки логирования».
camellia-listen container
С таблицами переменных доступа и настроек логирования можно ознакомиться в разделах «Доступ к S3», «Доступ к Redis», «Доступ к PostgreSQL», «Доступ к Kafka», «Настройки логирования».
Настройки сервиса:
Имя переменной | Описание | Примечание | Варианты значения | Обязательно | Пример значения | Значение в values |
---|---|---|---|---|---|---|
STG_S3_ENDPOINT_URL |
Содержит URL S3-сервиса | - | - | Да | - | - |
STG_CAMELLIA_TEST_UPDATED_TOPIC |
Содержит имя Kafka-топика, в который будут отправляться сообщения о создании/изменении теста (модель Test) | - | - | Нет | - | - |
camellia-rest container
С таблицами переменных доступа и настроек логирования можно ознакомиться в разделах «Доступ к S3», «Доступ к Redis», «Доступ к PostgreSQL», «Доступ к Kafka», «Настройки логирования».
Настройки сервиса:
Имя переменной | Описание | Примечание | Варианты значения | Обязательно | Пример значения | Значение в values |
---|---|---|---|---|---|---|
STG_DEEP_TRACK_URL |
DeepTrack URL | - | - | Нет | https://dtrack.localhost |
- |
STG_DEEP_TRACK_API_KEY |
DeepTrack API key | - | - | Да | 34rni3nfi34gfn |
- |
STG_DEEP_TRACK_STATUS_INTERVAL |
Интервал проверки статуса BOM | - | - | Нет | 5 |
- |
STG_DEEP_TRACK_STATUS_DURATION |
Максимальное время проверки статуса BOM | - | - | Нет | 60 |
- |
STG_S3_BUCKET |
Содержит имя S3-бакета, который этот сервис будет использовать для создания ссылок для загрузки приложений пользователями | - | - | Да | - | - |
STG_UMBRELLA_TEST_UPDATED |
Содержит имя Kafka-топика, в который будут отправляться сообщения о создании/изменении теста ServiceTemplate (модель Test) | - | - | Нет | service_template/1/0/applications/event/applicationCreated |
- |
camellia-async container
С таблицами переменных доступа и настроек логирования можно ознакомиться в разделах «Доступ к S3», «Доступ к Redis», «Доступ к PostgreSQL», «Доступ к Kafka», «Настройки логирования».
Настройки сервиса:
Имя переменной | Описание | Примечание | Варианты значения | Обязательно | Пример значения | Значение в values |
---|---|---|---|---|---|---|
STG_S3_ENDPOINT_URL |
Содержит URL S3-сервиса | - | - | Да | - | - |
STG_APPLICATION_CREATED_TOPIC |
Содержит имя Kafka-топика, в который будут отправляться сообщения о создании нового экземпляра модели Application | - | - | Нет | apricot/1/0/applications/event/applicationCreated |
- |
STG_APPLICATION_UPDATED_TOPIC |
Содержит имя Kafka-топика, в который будут отправляться сообщения при изменении экземпляра модели Application | - | - | Нет | apricot/1/0/applications/event/applicationUpdated |
- |
STG_CAMELLIA_TEST_UPDATED_TOPIC |
Содержит имя Kafka-топика, в который будут отправляться сообщения о создании/изменении теста (модель Test) | - | - | Нет | camellia/1/0/testUpdated |
- |
Схема интеграции сервиса Camellia
Шаг 1. Получение авторизационного токена. Бэкенд монолита, используя переданные ему client_id
и client_secret
, авторизуется в Keycloak и получает access_token
.
Шаг 2. Отправка запроса в сервис Camellia. Запрос снабжается Authorization-заголовком, содержащим полученный access_token
.
Шаг 3. Проверка входящего запроса на наличие валидного Authorization-заголовка.
Шаг 4.1. Запрос далее перенаправляется в целевой сервис (Camellia).
Шаг 4.2. В случае невалидного Authorization-заголовка (или его отсутствия), монолиту возвращается HTTP 401
.
В монолите в файл settings/prod.env необходимо добавить следующие переменные:
STINGRAY_SERVICES_AUTH_URL
(https://keycloak.cluster.local/realms/stingray/protocol/openid- connect/token)STINGRAY_SERVICES_CLIENT_ID
(prod)STINGRAY_SERVICES_CLIENT_SECRET
(****)CAMELLIA_BASE_URL
(https://camellia.cluster.local)
Организация сетевого доступа
Необходимо настроить сетевую инфраструктуру таким образом, чтобы монолиту были доступны следующие ресурсы:
- Keycloak.
- Ingress.
Эти ресурсы должны быть доступны по протоколам и портам, соответствующим тем URL, которые были переданы в переменные окружения CAMELLIA_BASE_URL
и STINGRAY_SERVICES_AUTH_URL
.
Настройка Kafka
Шаги по настройке Kafka описаны в соответствующем разделе.
Настройка Redis
Шаги по настройке Redis описаны в соответствующем разделе.
Настройка S3
Шаги по настройке S3 описаны в соответствующем разделе.
Настройка БД PostgreSQL
Для настройки БД PostgreSQL необходимо предоставить доступ к PostgreSQL, развёрнутому в инфраструктуре и включающему следующие параметры:
- FQDN сервера.
- TCP порт для подключения.
- Название базы данных.
- Имя пользователя.
- Пароль.
- Имя пользователя для миграций.
- Пароль пользователя миграций.
Значения параметров 1, 2, 3, 4, 6 необходимо включить в файл values.yaml нашего Helm chart, параметры:
global.postgresql.stgPostgresHost
.global.postgresql.stgPostgresPort
.global.postgresql.stgPostgresDb
.global.postgresql.stgPostgresUser
.global.postgresql.stgPostgresPass
.global.postgresql.stgPostgresMigrateUser
.global.postgresql.stgPostgresMigratePassword
.
Примечание
Значение параметров 5 и 7 необходимо включить в состав секретов.
При первом подключении происходит миграция базы данных из заданного пользователя, создается соответствующая схема и таблицы:
- PostgreSQL (схема: camellia).
- test - общая таблица с информацией о тестировании.
Настройка OAuth2-proxy
Шаги по настройке OAuth2-proxy описаны в соответствующем разделе.
Примечание
Настройка OAuth2-proxy не входит непосредственно в установку сервиса Camellia. При этом правильная настройка OAuth2-proxy является необходимым условием для интеграции сервиса Camellia.
Настройка авторизации
Шаги по настройке авторизации описаны в соответствующем разделе.
Настройка Ingress
Для настройки Ingress на проксирование трафика к OAuth2-proxy и Camellia сервису необходимо внести следующие изменения в values.yaml:
camellia:
ingress:
enabled: true
className: nginx-internal
annotations:
nginx.ingress.kubernetes.io/preserve-trailing-slash: "true"
nginx.ingress.kubernetes.io/auth-url: https://oauth2-proxy.cluster.local/oauth2/auth
nginx.ingress.kubernetes.io/auth-response-headers: x-authrequest-access-token
nginx.ingress.kubernetes.io/proxy-buffer-size: 16k
nginx.ingress.kubernetes.io/proxy-body-size: 500m
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
hosts:
- host: camellia.cluster.local
paths:
- path: /
pathType: ImplementationSpecific
tls:
- secretName: XXX
hosts:
- camellia.cluster.local
-------------------------------------------------------------------------------------------------
oauth2-proxy:
ingress:
enabled: true
className: nginx-internal
annotations:
nginx.ingress.kubernetes.io/proxy-buffer-size: 16k
hosts:
- host: oauth2-proxy.cluster.local
paths:
- path: /
pathType: ImplementationSpecific
tls:
- secretName: k8s-secret
hosts:
- oauth2-proxy.cluster.local
Необходимо указать актуальный ingress class
, tls secrets
для https
, актуальные hosts
, в аннотации camellia auth-url
указать Ingress oauth2-proxy host
и /oauth2/auth
.