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