Безопасность в Managed Service for GitLab
Обнаружение уязвимостей в CI/CD
Managed Service for GitLab предоставляет защиту вашего пайплайна встроенными в GitLab средствами.
Набор средств зависит от типа лицензии GitLab
Полный список средств защиты пайплайна в зависимости от типа лицензии приведен в таблице:
Средства защиты пайплайна | Free | Premium | Ultimate |
---|---|---|---|
API Fuzzing |
|||
Cluster Image Scanning |
|||
Container Scanning |
|||
Dependency Scanning |
|||
Dynamic Application Security Testing (DAST) |
|||
License Compliance |
|||
Secret Detection |
|||
Security Dashboard |
|||
Static Application Security Testing (SAST) |
С развитием Managed Service for GitLab список средств защиты может меняться.
Использование примеров безопасности пайплайна
Доступны следующие варианты использования пайплайна в ваших проектах:
- Создайте пайплайн в отдельном проекте и подключите его к другим проектам с помощью функции
include
. Доступно для всех типов лицензий. - Используйте механизм
Compliance framework and pipeline
— он будет выполняться в любом проекте группы. Механизм доступен для типа лицензииUltimate
. - Скопируйте секции пайплайна в файл
.gitlab-ci.yml
ваших проектов.
Дополнительные материалы
Изучите примеры безопасности пайплайна, подготовленные в рамках Yandex Cloud Security Solution Library
- Обнаружение уязвимостей в CI/CD (тип лицензии
Ultimate
) . - Обнаружение уязвимостей в CI/CD (тип лицензии
Free
) .
Рекомендации по настройке безопасности инстанса GitLab
Совет
Перед настройкой инстанса изучите общие рекомендации по безопасности GitLab
Используйте эти наборы рекомендаций для обеспечения безопасности вашего инстанса GitLab:
- Для аудита и анализа событий безопасности настройте экспорт логов аудита
в стороннюю систему анализа событий, например, Splunk . - Подписывайте коммиты с помощью GPG-ключа
. - Организуйте
approve
изменений в коде как минимум двумя сотрудниками — это поможет снизить количество ошибок. - Для предотвращения отказа обслуживания используйте ограничения
User and IP rate limits
.
Работа с Docker изнутри GitLab
- Изучите лучшие практики по безопасной работе с образами Docker
. - Работайте с Docker в режиме
non-privileged
. Используйте настройкиcap_add
иcap_drop
для более тонкой настройки привилегий контейнеров. - Для безопасной сборки контейнеров используйте утилиту kaniko
. - Не используйте
Shell executor
,Docker-in-Docker
иDocker socket binding
— это дает доступ кDocker socket
иprivileged mode
. Подробнее см. в статье Securing GitLab CI pipelines with Sysbox .
Интеграция с Yandex Managed Service for Kubernetes
- Для безопасной интеграции используйте GitLab Agent for Kubernetes
. - Чтобы исключить использование сервисных аккаунтов с ролью
cluster-admin
и открытия API Kubernetes в интернет, не используйте certificate-based интеграцию . - Чтобы исключить связанность агента GitLab Runner и Kubernetes, используйте развертывание с помощью CI/CD tunnel
.
Использование переменных
- Для ограничения доступа к переменным используйте настройку
Protect variable
. - Для маскирования переменных в логах используйте настройку
Mask variable
. - Не храните секреты (ключи, пароли, API-токены и т. д.) в коде. Для поиска секретов в коде используйте инструмент Secret Scanning
.
Разграничение доступа
- Выдавайте доступ к вашим проектам ограниченному количеству сотрудников. Предоставляйте сотрудникам только минимально необходимые права.
- Настраивайте доступ к проектам с помощью механизма групп GitLab
. - Ограничьте подключения к проектам только с конкретных IP-адресов, а также включите двухфакторную аутентификацию. Для этого перейдите во вкладку Settings → General → Permissions, LFS, 2FA в свойствах нужной группы.
- Чтобы предоставить доступ к проектам пользователям вашей организации, настройте SAML SSO
. - По возможности заблокируйте использование
fork
.
Безопасная конфигурация агента GitLab Runner
- Используйте наиболее изолированные и безопасные управляющие программы
Docker
иKubernetes
. Не рекомендуется использовать устаревшийShell executor
. - Чтобы ограничить сетевой доступ к агенту GitLab Runner, используйте группы безопасности.
- Используйте безопасный механизм назначения сервисных аккаунтов виртуальной машине для взаимодействия с облачным API внутри заданий. Такой способ более безопасен, чем указание учетных данных через
env
.