# Gitlab Gitleaks

### Overview

Gitleaks (через **GitLab Secrets Analyzer**) сканирует репозиторий на утечки секретов (токены, API-ключи, пароли, приватные ключи и другие)

### Requirements <a href="#requirements" id="requirements"></a>

* В **Sequences** перед этим инструментом должен быть добавлен job **Code Downloader**

### Run modes

Поддерживаются два режима:

* **git** — сканирование истории коммитов, ограничения:
  * Ограничено историей, доступной в локальной `.git`
  * Ограничено настройкой depth на этапе job code downloader (чем меньше depth — тем меньше коммитов попадёт в анализ).
  * Ограничено значением GIT\_DEPTH (параметр --max-count для git log).
* **dir** — сканирование файлов в рабочей директории (без истории коммитов)

### How it works <a href="#kak-rabotaet" id="kak-rabotaet"></a>

Сканер использует официальный docker-образ:

* `registry.gitlab.com/gitlab-org/security-products/analyzers/secrets:latest`

Команда запуска

```bash
if [ "$GITLEAKS_MODE" = "git" ]; then
  /analyzer run \
    --target-dir "$SEC_CODE_FOLDER" \
    --git-log-options "--max-count=$GIT_DEPTH" \
    --indent
else
  /analyzer run \
    --target-dir "$SEC_CODE_FOLDER" \
    --max-depth "$DIRECTORY_SCAN_DEPTH" \
    --ignore-hidden-dirs="$SEARCH_IGNORE_HIDDEN_DIRS" \
    --indent
fi
cp gl-secret-detection-report.json "/data/$REPORT_FILE_NAME"
```

### Environment variables

<table data-header-hidden><thead><tr><th></th><th></th><th width="149.5"></th><th></th></tr></thead><tbody><tr><td>Переменная</td><td>Пример</td><td>Обязательная</td><td>Описание</td></tr><tr><td>SEC_CODE_FOLDER</td><td></td><td>Да</td><td>Путь к исходному коду. Проставляется автоматический</td></tr><tr><td>REPORT_FILE_NAME</td><td><code>gl-secret-detection-report.json</code></td><td>Да</td><td>Имя отчёта</td></tr><tr><td>SCAN_TYPE</td><td><code>GitLab Gitleaks</code></td><td>Да</td><td>Тип сканирования для парсинга</td></tr><tr><td>GITLEAKS_MODE</td><td><code>dir</code></td><td>Да</td><td>Режим сканирования: история коммитов (<code>git</code>) или рабочая директория (<code>dir</code>).</td></tr><tr><td>GIT_DEPTH</td><td><code>50</code></td><td>Да</td><td>Максимум коммитов для анализа в режиме <code>git</code> (передаётся через <code>--git-log-options</code>).</td></tr><tr><td>DIRECTORY_SCAN_DEPTH</td><td><code>50</code></td><td>Да</td><td>Максимальная глубина обхода директорий в режиме <code>dir</code>.</td></tr><tr><td>SEARCH_IGNORE_HIDDEN_DIRS</td><td><code>false</code></td><td>Нет</td><td>Игнорировать скрытые директории в режиме <code>dir</code> (<code>true/false</code>).</td></tr></tbody></table>

### Notes & troubleshooting

* **Режим `git` зависит от того, как репозиторий был скачан** до старта контейнера (например, `git clone --depth 50`). Сканер может анализировать только те коммиты, которые доступны в локальной `.git`
* В логах могут появляться предупреждения (WARN) о попытках git fetch внутри контейнера — это ожидаемое поведение и само по себе не является ошибкой

### Links

* [Gitlab Secret Detection](https://gitlab.com/gitlab-org/security-products/analyzers/secrets)
