Настройка Containerfile для сборки пользовательских образов, совместимых с Task
Содержание
Обзор функцииСценарии использованияПредварительные требованияШаги1. Подтвердите базовый образ2. Добавьте непривилегированного пользователя3. Установите необходимые права для пользователя (опционально)4. Установите пользователя по умолчанию5. Проверьте образРезультаты работыУстранение неполадокДополнительная информацияОбзор функции
В Tekton для повышения безопасности Tasks могут быть настроены с параметром runAsNonRoot: true, что требует запуска контейнеров от имени непривилегированного пользователя. Поэтому при сборке пользовательских образов необходимо уделять особое внимание конфигурации Containerfile, чтобы обеспечить корректную работу образов в таких Tasks.
В этом документе описывается, как настроить Containerfile для сборки пользовательских образов, совместимых с Tasks, с акцентом на конфигурацию прав пользователя.
Сценарии использования
Следующие ситуации требуют обращения к рекомендациям данного документа:
- Сборка пользовательского образа для использования в Tasks
- Возникновение ошибок, связанных с правами доступа, при запуске существующих образов в Tasks
- Обеспечение соответствия образа требованиям безопасности Tasks
Предварительные требования
Перед использованием данной функции убедитесь, что:
- У вас есть среда для сборки OCI-образов
- Можно использовать нативный pipeline сборки платформы
- Если требуется использовать инструменты сообщества/с открытым исходным кодом, обеспечьте доступ в интернет или подготовьте офлайн-пакеты
- Вы обладаете базовыми знаниями по написанию Containerfile
- Можно обратиться к официальной документации по Containerfile
- Понимаете лучшие практики работы с Containerfile
- Имеется файл Containerfile и соответствующая конфигурация
Шаги
1. Подтвердите базовый образ
Сначала определите версию релиза базового образа, так как команда создания пользователя может отличаться в зависимости от версии:
2. Добавьте непривилегированного пользователя
Добавьте в Containerfile непривилегированного пользователя (рекомендуется использовать UID 65532):
3. Установите необходимые права для пользователя (опционально)
Если пользователю требуется доступ к определённым каталогам или файлам, необходимо добавить соответствующие права:
4. Установите пользователя по умолчанию
Задайте пользователя по умолчанию в Containerfile (используя UID вместо имени пользователя):
Поскольку Pods с параметром
runAsNonRootпроверяют, что ID пользователя не является root, а не имя пользователя.
5. Проверьте образ
После сборки проверьте, что образ запускается корректно:
Результаты работы
С данной конфигурацией:
-
Конфигурация пользователя
- UID 65532 используется последовательно, что позволяет файлам, создаваемым в нескольких Tasks, иметь согласованные права доступа
- Обеспечивается наличие у пользователя необходимых прав на рабочие каталоги
- Избегается использование пользователя root или UID 0
-
Конфигурация приложения
- Гарантируется нормальная работа приложений от имени непривилегированного пользователя
- Необходимые права на каталоги предварительно настраиваются в Containerfile
- Используется инструкция
VOLUMEдля определения каталогов, которые должны сохраняться
-
Рекомендации по безопасности
- Регулярно обновляйте базовый образ для устранения уязвимостей
- Используйте многоступенчатую сборку для уменьшения размера образа
- Следуйте принципу наименьших привилегий при настройке прав пользователя
Устранение неполадок
Если при запуске образа в Tasks возникают проблемы с правами доступа, можно:
- Проверить сообщения об ошибках в событиях Pod
- Убедиться в корректности конфигурации пользователя в образе
- Проверить, что для приложения настроены необходимые права доступа