Какие есть варианты защиты подчиненных узлов Jenkins, имеющих демон docker?Кто-то может запустить Docker-контейнер и получить доступ к файлам, принадлежащим пользователю root.
Среда и сведения о проблеме:
- Jenkins
- Демон Docker доступен на подчиненных устройствах Jenkins
- Агент Jenkins запускается как пользователь «build»
- Сборка пользователя добавлена в группу «docker», чтобы задания могли создавать и запускать контейнеры
- Мы рассматриваем возможность использования конвейера Docker https://jenkins.io/doc/book/pipeline/docker/
Проблема:
- Пользователь может подключить корневой каталог сервера как том докера
- Они могут выполнить команду типа «rm -rf / hostroot / * ”или распечатайте содержимое секретного файла, принадлежащего root.
- Параметры пары:
- Опция 1 : используйте аргумент –user длязапускать команды от имени конкретного пользователя, но поскольку Jenkinsfile управляется командой разработчиков, это не может быть строго выполнено
- Опция 2 : включить пространство имен пользователя в демоне Docker (может бытьнекоторые проблемы с разрешениями - espособенно в папке рабочей области, но некоторые обходные пути могут быть на месте) Используете ли вы пространство имен пользователя?
- Опция 3 : сборка с использованием AWS Fargate (нужно немного разобраться в этом) -поэтому образ докера не построен на подчиненных узлах Jenkins, и сборка не повлияет на файлы на узлах
Пример:
pipeline {
agent {
docker {
image 'maven:3-alpine'
args '-v /:/hostroot'
(args '—user 500 ' --> since Jenkinsfile is managed by development team, ensuring everyone puts this parameter is tricky… someone could forget to put it)
}
}
stages {
stage('Build') {
steps {
sh 'rm -rf /hostroot/*' --> delete the entire filesystem!
sh 'cat /path/to/secret/file' --> see some files owned by root!
}
}
}
}
Aподобный вопрос был опубликован здесь, но ему уже 2 года, и он не имеет хорошего ответа: Создание образов Docker с помощью Jenkins, который запускается внутри контейнера Docker