GitLab Artifacts: скрытые настройки безопасности. Разбираем на примерахКоллеги, в последних заданиях я уже затрагивал тему артефактов в пайплайнах. И чем больше проверяю работы, тем больше вижу, что многие недооценивают артефакты как объект безопасности
Артефакты — это не просто «файлы после сборки». Это потенциальная утечка: бинарники с прода, ключи, логи статического анализа с найденными уязвимостями, секреты. GitLab по умолчанию дает доступ к ним всем, у кого есть доступ к проекту — и это нужно менять
Разберем поэтапно, как взять артефакты под контроль
1️⃣
Базовый контроль времени жизниexpire_in — ваш главный союзник. Артефакты не должны жить вечно:
build:
script:
- mvn package
artifacts:
paths:
- target/*.jar
expire_in: 1 week # Автоматическое удаление через неделю
2️⃣
Умное сохранение при разных сценарияхНе все что упало — бесполезно. Сохраняем логи только при падении:
debug_build:
script:
- make build
artifacts:
paths:
- build/logs/
- core.dump
when: on_failure # Сохраняем только если пайплайн упал
expire_in: 2 days
3️⃣
Удобство для разработчиковexpose_as — показываем артефакты прямо в интерфейсе Merge Request:
generate_docs:
stage: test
script:
- doxygen Doxyfile
artifacts:
paths:
- public/docs/
expose_as: 'Documentation Preview' # Ссылка появится в MR
4️⃣
Специализированные отчеты для безопасностиartifacts:reports — это мощный механизм для работы со специализированными отчетами, которые GitLab может автоматически обрабатывать и интегрировать в свой интерфейс
test:
stage: test
script:
- mvn test
- pytest --junitxml=report.xml
artifacts:
reports:
junit: report.xml
junit:
- target/surefire-reports/TEST-*.xml
- target/failsafe-reports/TEST-*.xml
sast:
stage: test
script:
- echo "Running SAST..."
artifacts:
reports:
sast: gl-sast-report.json
secret_detection:
stage: test
script:
- echo "Detecting secrets..."
artifacts:
reports:
secret_detection: gl-secret-detection-report.json
5️⃣
Управление доступомartifacts:public — контроль видимости артефактов
job_name:
artifacts:
paths:
- path/to/files
public: <true|false>
artifacts:access — тонкая настройка доступа к артефактам
test:
script:
- ./run-tests.sh
artifacts:
paths:
- test-results/
access: <keyword> # Один из трех вариантов
⏩ Доступные варианты:- always (по умолчанию) — опасно для чувствительных данных
- never — идеально для временных файлов с секретами
- on_success — золотая середина
Версия 18.4+: перед использованием проверьте актуальность вашего GitLab.
Важно: artifacts:public и artifacts:access нельзя использовать вместе в одном job.
Эти настройки — не просто «удобные фичи». Это ваш инструмент для построения безопасного CI/CD, где критичные данные не утекают через артефакты
А какие настройки артефактов используете вы? Сталкивались ли с проблемами безопасности? Делитесь опытом в комментариях — обсудим лучшие практики!