• Русский
  • Настройка Containerfile для сборки пользовательских образов, совместимых с Tasks

    Обзор функции

    В Tekton для повышения безопасности Tasks могут быть настроены с runAsNonRoot: true, что требует запуска контейнеров от имени пользователей, не являющихся root. Поэтому при сборке пользовательских образов необходимо уделять особое внимание конфигурации Containerfile, чтобы обеспечить корректную работу образов в таких Tasks.

    В этом документе описано, как настроить Containerfile для сборки пользовательских образов, совместимых с Tasks, с акцентом на конфигурацию прав пользователей.

    Сценарии использования

    На следующие сценарии следует ориентироваться при использовании руководства из этого документа:

    • Сборка пользовательского образа для использования в Tasks
    • Возникновение ошибок, связанных с правами доступа, при запуске существующих образов в Tasks
    • Обеспечение соответствия образа требованиям безопасности Tasks

    Предварительные требования

    Перед использованием этой функции убедитесь, что:

    • У вас есть среда сборки OCI-образов
      • Вы можете использовать собственный конвейер сборки платформы
      • Если необходимо использовать community/open-source инструменты, убедитесь, что у вас есть доступ в интернет или подготовлены офлайн-пакеты
    • У вас есть базовое понимание написания Containerfile
    • Файл Containerfile и связанная конфигурация

    Шаги

    1. Подтвердите базовый образ

    Сначала подтвердите версию релиза базового образа, так как команда для создания пользователя может отличаться в зависимости от версии:

    # Проверка версии релиза базового образа
    $ podman run -it --rm ${registry} cat /etc/os-release
    
    # Возможные результаты
    NAME="Alpine Linux"
    # or
    NAME="Debian GNU/Linux"
    # or
    NAME="Ubuntu"
    # or
    NAME="CentOS Linux"

    2. Добавьте пользователя, не являющегося root

    Добавьте в Containerfile пользователя, не являющегося root (рекомендуется использовать UID 65532):

    # В зависимости от базового образа выберите соответствующую команду
    
    # Alpine
    RUN adduser -u 65532 -h /home/nonroot -D nonroot
    
    # Debian
    RUN adduser --home /home/nonroot --uid 65532 nonroot --disabled-password --gecos ""
    
    # Ubuntu
    RUN apt-get update && apt-get install -y adduser \
        && adduser --home /home/nonroot --uid 65532 nonroot --disabled-password --gecos ""
    
    # CentOS
    RUN groupadd -g 65532 nonroot && useradd -u 65532 -U -d /home/nonroot -m nonroot

    3. Назначьте пользователю необходимые права доступа (необязательно)

    Если пользователю требуется доступ к определённым каталогам или файлам, для этого пользователя следует добавить необходимые права доступа.

    # Назначить владельцем каталога или файла пользователя nonroot
    RUN chown -R nonroot:nonroot /path/to/directory
    
    # Либо изменить права доступа к каталогу или файлу так, чтобы все могли читать и писать, либо задать другие минимально необходимые права
    RUN chmod -R a+rwx /path/to/directory

    4. Установите пользователя по умолчанию

    Установите пользователя по умолчанию в Containerfile (используя UID вместо имени пользователя):

    Поскольку Pods, настроенные с runAsNonRoot, проверяют, что идентификатор пользователя не является root, а не имя пользователя.

    # Установить пользователя по умолчанию как nonroot (используя UID)
    USER 65532

    5. Проверьте образ

    После сборки проверьте, может ли образ корректно запускаться:

    # Проверка конфигурации пользователя
    $ podman run -it --rm ${registry} id
    
    # Ожидаемый результат
    uid=65532(nonroot) gid=65532(nonroot) groups=65532(nonroot)
    
    # Проверка прав приложения
    $ podman run -it --rm ${registry} ls -la /home/nonroot

    Результаты работы

    При такой конфигурации:

    1. Конфигурация пользователя

      • UID 65532 используется последовательно, что позволяет файлам, создаваемым в нескольких Tasks, иметь согласованные права доступа
      • Убедитесь, что у пользователя есть подходящие права на рабочий каталог
      • Не используйте пользователя root или UID 0
    2. Конфигурация приложения

      • Убедитесь, что приложения могут нормально запускаться от имени пользователей, не являющихся root
      • Заранее настройте в Containerfile необходимые права доступа к каталогам
      • Используйте инструкцию VOLUME для определения каталогов, которые необходимо сохранять
    3. Рекомендации по безопасности

      • Регулярно обновляйте базовый образ для устранения уязвимостей безопасности
      • Используйте многоэтапные сборки для уменьшения размера образа
      • Следуйте принципу наименьших привилегий при настройке прав пользователей

    Устранение неполадок

    Если при запуске образа в Tasks возникают проблемы с правами доступа, вы можете:

    1. Проверить сообщения об ошибках в событиях Pod
    2. Убедиться, что конфигурация пользователя в образе корректна
    3. Убедиться, что для приложения настроены необходимые права доступа

    Подробнее