# Установка

## Системные требования для использования Auditor:

* Минимальные системные ресурсы: 16 ГБ ОЗУ и 4 ядра ЦПУ.
* Свободное дисковое пространство для установки и хранения данных Auditor.
* Доступ по сети до и от Security Center и к месту расположения вашего актива (месту расположения сканируемого продукта).
* Операционная система с поддержкой Docker или Kubernetes (рекомендуется любая Linux-система).

{% hint style="danger" %}
Для улучшения стабильности работы рекомендуется устанавливать Auditor и Security Center на **разных машинах** (физических или виртуальных)
{% endhint %}

## Подготовка

Перед установкой Auditor убедитесь, что на вашем компьютере установлено следующее программное обеспечение:

Тип установки с использованием Docker:

* [**Docker**](https://docs.docker.com/get-docker/) (версия 19.03 или выше);
* [**Docker Compose**](https://docs.docker.com/compose/install/) (версия 1.26 или выше);

Установка в среде Kubernetes:

* Helm с рабочим кластером Kubernetes

<details>

<summary>Создание SSH-ключей</summary>

Чтобы безопасно подключиться к серверу Linux, вам нужно настроить SSH-ключи.

Если у вас еще нет SSH-ключей, вы можете сгенерировать их с помощью следующей команды в терминале сервера:

```bash
ssh-keygen
```

:warning: При копировании ключей убедитесь, что они **скопированы без пробелов**.

**Установка SSH-ключа на сервер**

После генерации SSH-ключей вам нужно скопировать **открытый SSH-ключ** на сервер Linux. Используйте команду для копирования открытого ключа:

```bash
ssh-copy-id <имя_пользователя>@<ip-адрес_сервера>
```

Замените *<имя\_пользователя>* на имя пользователя вашей учетной записи Linux-сервера, а *\<ip-адрес\_сервера>* на IP-адрес Linux-сервера. Вам будет предложено ввести пароль для аутентификации.

Откройте на локальной машине файл, в котором хранится **закрытый SSH-ключ**. Закрытый ключ обычно сохраняется с расширением .pem или .ssh.

Выберите и скопируйте содержимое файла закрытого ключа. Убедитесь, что вы скопировали ключ с правильными разрешениями и разрывами строк.

</details>

При использовании сканеров входящих в стандартную поставку продукта необходимо разрешить доступ Auditor к удаленным ресурсам, расположенным по следующим адресам:

| Сканер                            | URL-адреc                                                |
| --------------------------------- | -------------------------------------------------------- |
| Registry со стандартными образами | registry.cybercodereview\.ru                             |
| Обязательный для всех             | \*.docker.io                                             |
| Checkov                           | <p>pypi.org<br>api0.prismacloud.io</p>                   |
| Gitlab Semgrep                    | metrics.semgrep.dev                                      |
| RetireJS                          | <p>registry.npmjs.org<br>raw\.githubusercontent.com</p>  |
| Semgrep                           | <p>semgrep.dev<br>metrics.semgrep.dev</p>                |
| Snyk                              | <p>pypi.org<br>files.pythonhosted.org<br>api.snyk.io</p> |
| Terrascan                         | <p>raw\.githubusercontent.com<br>github.com</p>          |
| Trivy Code Dependencies           | <p>ghcr.io<br>pkg-containers.githubusercontent.com</p>   |
| Trivy Image Dependencies          | <p>ghcr.io<br>pkg-containers.githubusercontent.com</p>   |

## Установка

* Вариант 1: **Установка с помощью Helm** (установка в среде Kubernetes)
* Вариант 2: **Установка с помощью Docker-compose** (ручная установка docker-compose)

<details>

<summary>Установка с использованием Helm</summary>

Перед использованием установите менеджер пакетов "Helm" для Kubernetes и сконфигурируйте подключение к кластеру

#### **Шаг 1:** **Добавьте пакет Helm**

Добавьте на локальный компьютер пакет Helm:

```bash
helm repo add auditor https://gitlab.cybercodereview.ru/api/v4/projects/48/packages/helm/stable
```

#### **Шаг 2: Обновите репозиторий с чартом**

Это позволит получить информацию о последней версии нашего чарта

```bash
helm repo update
```

#### **Шаг 3: Создайте файл values с настройками чарта**

Перейдите в вашу рабочую папку, где впоследствии будете изменять некоторые параметры настройки чарта и создайте файл с любым наименованием, а также с расширением `.yaml` или `.yml` . Далее в качестве примера будет использоваться `values.yaml`.

#### **Шаг 4:** **Задайте переменные настройки чарта**

Далее необходимо заполнить файл `values.yaml`.

```yaml
global:
  image:
    tag: "<актуальный_тег>"


configs:
  configmap:
    variables:
      DOMAIN: "https://auditor.example.com"
  secret:
    variables:
      DB_HOST: "auditor-postgres" # имя Service в Kubernetes или внешний хост
      DB_PORT: "5432"
      DB_NAME: "auditor"
      DB_USER: "user"
      DB_PASS: "pass" 

      REDIS_HOST: "auditor-redis-master" # имя Service в Kubernetes или внешний хост
      REDIS_PASSWORD: "11110000"

      # auditor-rabbitmq - имя Service в Kubernetes или внешний хост
      AMQP_HOST_STRING: "amqp://user:pass@auditor-rabbitmq:5672"

      # ACCESS_TOKEN: "<значение_из_веб_интерфейса>"

  kube:
    enabled: false


ingress:
  enabled: true
  host: "auditor.example.com"
  class: nginx
  tls:
    enabled: true
    secretName: "" ## Имя Kubernetes секрета
  annotations:
  labels: {}
  path: "/"
  pathType: Prefix
```

Далее необходимо отредактировать values под Ваши нужды.

**Тег**

Начнем с поля `global.image.tag`. Чтобы узнать актуальный тег, необходимо перейти в [список релизов нашего репозитория](https://gitlab.cybercodereview.ru/cybercodereview/auditor/-/releases). Берем самый верхний тег, например, на скриншоте `2.1.2`.

Например:

```yaml
global:
  image:
    tag: "2.1.2"
```

**Домен**

Для указания доменного имени Вашего Auditor необходимо отредактировать поле `configs.configmap.variables.DOMAIN`. Например:

```yaml
configs:
  configmap:
    variables:
      DOMAIN: "https://auditor.local"
```

**Подключение к СУБД PostgreSQL**

Для настройки подключения в PostgreSQL необходимо заполнить следующие поля:

* `configs.configmap.variables.DB_HOST` - может быть как именем сервиса в kubernetes, так и внешним хостом;
* `configs.configmap.variables.DB_PORT` - порт, на котором PostgreSQL "слушает" подключения;
* `configs.configmap.variables.DB_NAME` - имя базы данных, созданной для Auditor;
* `configs.configmap.variables.DB_USER` - имя пользователя, имеющего доступ к базе данных для Auditor;
* `configs.configmap.variables.DB_PASS` - пароль пользователя из пункта выше.

Значения по-умолчанию:

<pre class="language-yaml"><code class="lang-yaml">configs:
  secret:
    variables:
<strong>      DB_HOST: "auditor-postgres" # имя Service в Kubernetes или внешний хост
</strong>      DB_PORT: "5432"
      DB_NAME: "auditor"
      DB_USER: "user"
      DB_PASS: "pass" 
</code></pre>

Для изменения значений по умолчанию (которые принимает PostgreSQL), необходимо изменить следующие поля:

```yaml
postgresql:  
  auth:
    database: auditor
    username: user
    password: pass
  containerPorts:
    postgresql: 5432
```

**Подключение к СУБД Redis**

Для настройки подключения к Redis необходимо заполнить следующие поля:

* `configs.configmap.variables.REDIS_HOST` - может быть как именем сервиса в Kubernetes, так и внешним хостом;
* `configs.configmap.variables.REDIS_PASSWORD` - пароль подключения к Redis.

Значения по умолчанию:

```yaml
configs:
  secret:
    variables:
      REDIS_HOST: "auditor-redis-master" # имя Service в Kubernetes или внешний хост
      REDIS_PASSWORD: "11110000"
```

Чтобы поменять значения по умолчанию (которые принимает Redis), необходимо изменить следующие поля:

```yaml
redis:
  auth:
    password: "11110000"
```

**Подключение к брокеру сообщений RabbitMQ**

Данная строка строится из нескольких частей:

* `amqp://` - не изменяется, служебная часть;
* `user` - логин для подключения;
* `:` - разделитель логина и пароля;
* `pass` - пароль для подключения;
* `@` - разделитель для данных пользователя и хоста;
* `auditor-rabbitmq` - имя сервиса в Kubernetes или внешний хост;
* `:` - разделитель хоста и порта;
* `5672` - порт, на котором RabbitMQ "слушает" подключения.

Значения по умолчанию:

<pre class="language-yaml"><code class="lang-yaml"><strong>configs:
</strong>  secret:
    variables:
      AMQP_HOST_STRING: "amqp://user:pass@auditor-rabbitmq:5672" # "auditor-rabbitmq" - имя Service в Kubernetes или внешний хост
</code></pre>

Чтобы поменять значения по умолчанию (которые принимает RabbitMQ), необходимо изменить следующие поля:

```yaml
rabbitmq:
  auth:
    username: user
    password: pass
```

**Ingress**

Ingress-контроллер - компонент Kubernetes, который управляет входящим трафиком для сервисов.

* `ingress.host` - доменное имя Вашего Auditor;
* `ingress.class` - класс контроллера в Вашем кластере;
* `ingress.tls.enabled` - включение TLS для Вашего Auditor;
* `ingress.tls.secretName` - имя Kubernetes-секрета, в котором лежит Ваш сертификат. Если поле `ingress.tls.enabled` имеет значение `false`, указывать значение секрета не требуется.

Значения по умолчанию:

```yaml
ingress:
  enabled: true
  host: "auditor.example.com"
  class: nginx
  tls:
    enabled: true
    secretName: "" ## Имя секрета
  annotations:
  labels: {}
  path: "/"
  pathType: Prefix
```

#### **Другие настройки**

**Сканеры в Kubernetes**

После обновления **2.1.4** появилась возможность запускать сканеры в качестве pods в Kubernetes. Для этого нужно настроить следующие поля в `values.yaml`:

```yaml
configs:
  secret:
      STORAGE_CLASS_NAME: ""

  kube:
    enabled: true
    namespace: ""
```

Поле `configs.secret.STORAGE_CLASS_NAME` отвечает за наименование storageClass Вашего кластера. Например longhorn.

Поле `configs.kube.enabled` отвечает за включение функции.

Поле `configs.kube.namespace` отвечает за namespace, в котором будут создаваться pods. **Обязательно указывайте данный параметр, даже если в команде установки есть флаг `-n <ваш_namespace>`.**

**Секреты**

При необходимости использования внешних хранилищ секретов необходимо выключить создание секретов при помощи Helm-чарта:

```yaml
configs:
  secret:
    create: false
```

#### **Шаг 5: Развертывание приложения в кластер Kubernetes**

В примере по умолчанию используется установленный ранее ingress controller "nginx" и PostgreSQL, Redis и RabbitMQ из Helm-чарта от Bitnami:

<pre class="language-bash"><code class="lang-bash"><strong>helm upgrade --install auditor auditor/appsecauditor -n auditor --create-namespace -f ./values.yaml
</strong></code></pre>

После первого входа вы получите `Access Token`.

Скопируйте и задайте переменную Access Token, убрав # перед переменной.

```yaml
configs:
  secret:
    variables:
      ACCESS_TOKEN: "<значение_из_веб_интерфейса>"
```

Обновите инсталляцию:

```bash
helm upgrade --install auditor auditor/appsecauditor -n auditor --create-namespace -f ./values.yaml
```

Сохраните значение Access Token в безопасном месте для дальнейшего использования при настройке Auditor.

</details>

<details>

<summary>Установка с помощью Docker-compose</summary>

**Шаг 1: Клонируйте репозиторий**

Клонируйте репозиторий Auditor на свой сервер:

```
git clone https://gitlab.cybercodereview.ru/cybercodereview/auditor.git auditor
```

**Шаг 2: Перейдите в корневой каталог**

Перейдите в корневой каталог проекта Auditor, выполнив следующую команду:

```
cd auditor
```

**Шаг 3: Задайте переменные окружения**

Создайте файл **`.env`** в корневой папке проекта.

Пример файла .env:

```
DB_NAME=postgres
DB_USER=postgres
DB_PASS=postgres
DB_HOST=postgres
DB_PORT=5432
RABBITMQ_DEFAULT_USER=admin
RABBITMQ_DEFAULT_PASS=mypass
AMQP_HOST_STRING=amqp://admin:mypass@rabbitmq:5672/
DOCKER_ENCRYPTION_TOKEN=defaultvaluetobechangedorelse...
ACCESS_TOKEN=<значение_из_веб_интерфейса>
IMAGE_VERSION=<актуальный_тег>
```

* <mark style="color:blue;">`DB_NAME`</mark>, <mark style="color:blue;">`DB_USER`</mark>, <mark style="color:blue;">`DB_PASS`</mark>, <mark style="color:blue;">`DB_HOST`</mark>, <mark style="color:blue;">`DB_PORT`</mark> переменные, необходимые для настройки базы данных.
* Если брокер сообщений размещен на стороннем сервере, то только переменная <mark style="color:blue;">`AMQP_HOST_STRING`</mark> должна быть задана. Однако, если контейнер поднимается локально, то все три переменные, включая <mark style="color:blue;">`RABBITMQ_DEFAULT_USER`</mark> и <mark style="color:blue;">`RABBITMQ_DEFAULT_PASS`</mark> должны быть заданы. Имя пользователя и пароль в переменных <mark style="color:blue;">`RABBITMQ_DEFAULT_PASS`</mark> и <mark style="color:blue;">`RABBITMQ_DEFAULT_USER`</mark> должны быть такими же, как в переменной <mark style="color:blue;">`AMQP_HOST_STRING`</mark>.
* Переменная <mark style="color:blue;">`DOCKER_ENCRYPTION_TOKEN`</mark> необходима при доступе к образам из приватного репозитория. Если ваш репозиторий требует аутентификации, укажите здесь соответствующий токен шифрования.
* <mark style="color:blue;">`ACCESS_TOKEN`</mark>: После первого запуска Auditor (шаг 4) вы получите значение токена доступа. Необходимо скопировать его и поместить значение в файл **`.env`**.
* <mark style="color:blue;">`IMAGE_VERSION`</mark>: эта переменная указывает версию образов Docker для запуска. Актуальный тег Вы можете найти на странице [репозитория](https://gitlab.cybercodereview.ru/cybercodereview/auditor).

**Шаг 4. Запустите Auditor**

В командной строке терминала перейдите в каталог, где находится файл **`docker-compose.yml`**.

Запустите приложение, выполнив следующую команду:

```
docker compose up -d
```

Это запустит все службы, описанные в файле docker-compose.yml в фоновом режиме.

После успешного выполнения команды `docker compose up -d` ваше приложение должно быть доступно на порту, указанном в конфигурации (по умолчанию используется порт 8080).

После первого запуска Вы получите <mark style="color:blue;">**`Access Token`**</mark>.\ <mark style="color:red;">Скопируйте его и задайте в файле .env</mark> в качестве значения переменной <mark style="color:blue;">`ACCESS_TOKEN`</mark> (шаг 3).

После добавления переменной необходимо перезапустить приложение выполнив в командной строке следующие команды:

```
docker compose down
```

```
docker compose up -d
```

Сохраните значение ключа в безопасном месте для последующего использования в [**настройках**](https://docs.cybercodereview.ru/auditor/install/broken-reference) Auditor.

</details>
